【发布时间】:2020-11-20 07:29:12
【问题描述】:
我有一个包含 165 个实例和 49 个特征的数据集,目标 1 和 0。这个数据集有缺失值,所以我正在尝试使用五折交叉验证的 KNNimputer。代码如下:
from numpy import mean
from numpy import std
from pandas import read_csv
from sklearn.ensemble import RandomForestClassifier
from sklearn.impute import SimpleImputer
from sklearn.impute import KNNImputer
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import RepeatedStratifiedKFold
from sklearn.pipeline import Pipeline
from pandas import read_csv
imputer = KNNImputer(n_neighbors=5, weights='uniform', metric='nan_euclidean')
df=read_csv('data.csv', header=None,na_values='?')
data=df.values
ix = [i for i in range(data.shape[1]) if i != 49]
X, y = data[:, ix], data[:, 49]
model = RandomForestClassifier()
pipeline = Pipeline(steps=[('i', imputer), ('m', model)])
cv = RepeatedStratifiedKFold(n_splits=5, n_repeats=1, random_state=1)
scores = cross_val_score(pipeline, X, y, scoring='accuracy', cv=cv, n_jobs=-1)
但这里的问题是我不需要分数。在填充折叠中的缺失值后,我想要数据集(五折或整体),因为我需要在插补后使用五折进行特征选择,然后进行分类。那么如何获得插补后的数据集呢?
【问题讨论】:
-
如果你不需要分数,为什么你要写一份简历?您这样做的目的是什么?
-
@desertnaut 我想通过交叉验证来估算缺失值,因为测试数据是看不见的,所以我不能一次估算整个数据集,然后我还需要进行特征选择。你还有什么建议?
-
你
fit_tranform你的KNNImputer和你的训练数据,然后你使用估算的数据进行特征选择。还有什么? -
但是我的测试数据也有缺失值。那么如何处理呢?
-
这就是存在各自
transform方法的原因。您尝试的 CV 程序将如何提供帮助?
标签: python machine-learning scikit-learn cross-validation imputation