在python中编译分类变量

时间:2017-04-20 11:31:47

标签: python machine-learning knn imputation

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

knn_impute2=KNN(k=3).complete(train[['LotArea','LotFrontage']]) 

它产生了如下所需的答案:This show how the original dataset looks like and how it has changed using knn imputation

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

could not convert string to float: 'female'

以下是我使用的代码(我正在尝试使用Imputer):

from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='NaN', strategy='most_frequent', axis=0)
imp.fit(df['sex'])
print(imp.transform(df['sex']))

我做错了什么?

回顾一下,我想在这个数据集上使用knn imputation来估算性别列。下面是数据集。

The dataset i want to impute using knn imputation with k value 2

我怎么能用knnimpute做到这一点,或者我需要编写自己的函数。如果有,任何人都可以帮助我。 Thnks

2 个答案:

答案 0 :(得分:1)

我能够使用下面列出的步骤来归类分类变量。我很乐意欢迎任何可以自动执行此类任务的遗漏或程序

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

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

组成

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

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

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

步骤5:使用KNN(来自fancyimpute)来估算缺失值

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

答案 1 :(得分:-2)

Imputer仅适用于数字。你可以转换性别'使用地图功能

列到数字1和0
df.sex=df.sex.map({'female':1,'male':0})

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