python - 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.]])
解决方案
您使用的方式reshape
是问题所在。您已通过提供将数据转换为单个数据点.reshape(1, -1)
。意思是 1 行 790215 列。因此,在转换 KNNImputer 时,会删除只有nan
值的列。这就是下跌的原因。
相反,您需要使用.reshape(-1,1)
,这将使其成为 790215 行和 1 列。
注意:对 KNNImputer 使用单一功能可能效果不佳。更好的是,您一次可以使用 3-5 个功能。你也可以看看SimpleImputer
。