我正在尝试从数据集上的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
答案 0 :(得分:1)
我能够使用下面列出的步骤来归类分类变量。我很乐意欢迎任何可以自动执行此类任务的遗漏或程序
步骤1:将对象的数据类型(全部)子集到另一个容器
第2步:将np.NaN
更改为对象数据类型,例如None
。现在,容器仅由objects
数据类型
步骤3:将整个容器更改为分类数据集
步骤4:对数据集进行编码(我正在使用.cat.codes)
步骤5:将编码None
的值更改为np.NaN
步骤5:使用KNN(来自fancyimpute)来估算缺失值
步骤6:将编码数据集重新映射到其初始名称
答案 1 :(得分:-2)
Imputer
仅适用于数字。你可以转换性别'使用地图功能
df.sex=df.sex.map({'female':1,'male':0})
在此之后,你可以使用Imputer
用1或0填充所有缺失的值,并再次使用map函数转换' sex'返回字符串值(如果需要)。