python中分类变量的knn插补

python中分类变量的knn插补,python,machine-learning,knn,imputation,Python,Machine Learning,Knn,Imputation,我试图在数据集上从FancyComputer模块实现kNN。我能够使用以下代码实现数据集连续变量的代码: knn_impute2=KNN(k=3).complete(train[['LotArea','LotFrontage']]) 它得到了如下理想答案: 我尝试为分类数据集实现相同的代码,但得到错误: could not convert string to float: 'female' 以下是我使用的代码(我正在尝试使用Imputer): 我做错了什么 总而言之,我想对这个数据集使用k

我试图在数据集上从FancyComputer模块实现kNN。我能够使用以下代码实现数据集连续变量的代码:

knn_impute2=KNN(k=3).complete(train[['LotArea','LotFrontage']]) 
它得到了如下理想答案:

我尝试为分类数据集实现相同的代码,但得到错误:

could not convert string to float: 'female'
以下是我使用的代码(我正在尝试使用Imputer):

我做错了什么

总而言之,我想对这个数据集使用knn插补来插补性别列。下面是数据集


我如何使用KNIMPUTE来实现这一点,或者我需要编写自己的函数。如果有的话,有人能帮我吗。Thnks仅对数字有效。您可以使用map函数将“sex”列转换为数字1和0

df.sex=df.sex.map({'female':1,'male':0})

在此之后,您可以使用
Imputer
用1或0填充所有缺失的值,并再次使用map函数将“sex”转换回字符串值(如果需要)。

我可以使用下面列出的步骤来插补分类变量。我将很高兴地欢迎任何遗漏或程序,可以自动执行这些任务

步骤1:将对象的数据类型(全部)子集到另一个容器中

步骤2:将
np.NaN
更改为对象数据类型,例如
None
。现在,容器仅由
对象
数据类型组成

步骤3:将整个容器更改为分类数据集

步骤4:对数据集进行编码(我正在使用.cat.code)

步骤5:将编码的
None
值更改回
np.NaN

步骤5:使用KNN(来自FancyComputer)来插补缺失值


步骤6:将编码的数据集重新映射到其初始名称

大多数scikit学习估计器/转换器只处理数字,而不是字符串。因此,首先将字符串分类数据转换为数字,然后再尝试。我已经在想一个主意了。但是插补器不能将np.NaN转换为标签你如何定义类别/分类变量之间的距离,欧几里德距离或其他距离?我使用欧几里德距离,否则,有人说用汉明距离来表示分类变量。在欧几里德坐标系中没有定义的两个物体之间的欧几里德距离的定义是什么?我可以很容易地对“category1”、“category2”和“category3”进行热编码。但我不能确定它们的相对距离,我已经做过了。请记住,在sex列中有np.NaN,插补器无法将其转换为标签。@KINNI否,插补器可以处理np.NaN,如本例所示-scikit learn.org/stable/modules/…。它将返回一个整数,您可以将其转换回labelI,然后重试并发布我得到的错误。我将感谢你尝试它,并张贴你得到的输出。你是如何处理你的问题,我有sameR软件包。。。我不使用Python,因此无法提供参考
df.sex=df.sex.map({'female':1,'male':0})