首页 > 解决方案 > Scikit-learn 的 (0.22.1) KNNImputer 返回错误数量的值

问题描述

我的原始数据集形状(790215,20)包含大约 60-80% 缺失值的特征。我决定使用 scikit-learn 的 KNNImputer 如下

import pandas as pd
from sklearn.impute import KNNImputer

# Loading the data
dataset = pd.read_csv('Dataset.csv')

# To avoid 'MemoryError' imputing individually

#Loading the first feature
X = dataset.iloc[:,0].values

#Imputing with default parameters 
imputer = KNNImputer()

#Reshaping to meet the dimensional requirement
X_imp  = imputer.fit_transform(X.reshape(1,-1))

现在的形状X_imp(1,729026)

我不确定我做错了什么。为什么 790215 改为 729026。

更新

X.shape是_(790215,)

X.reshape(1,-1).shape(1,790215)

X.reshape(1,-1)array([[ nan, 97., 89., ..., 140., 120., 115.]])

标签: pythonpandasnumpyscikit-learn

解决方案


您使用的方式reshape是问题所在。您已通过提供将数据转换为单个数据点.reshape(1, -1)。意思是 1 行 790215 列。因此,在转换 KNNImputer 时,会删除只有nan值的列。这就是下跌的原因。

相反,您需要使用.reshape(-1,1),这将使其成为 790215 行和 1 列。

注意:对 KNNImputer 使用单一功能可能效果不佳。更好的是,您一次可以使用 3-5 个功能。你也可以看看SimpleImputer


推荐阅读