使用Python进行五折交叉验证的缺失值填补

我有一个包含165个样本和49个特征的数据集,目标值为1和0。这个数据集有缺失值,所以我尝试使用KNNimputer结合五折交叉验证来处理。以下是代码:

from numpy import meanfrom numpy import stdfrom pandas import read_csvfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.impute import SimpleImputerfrom sklearn.impute import KNNImputerfrom sklearn.model_selection import cross_val_scorefrom sklearn.model_selection import RepeatedStratifiedKFoldfrom sklearn.pipeline import Pipelinefrom pandas import read_csvimputer = KNNImputer(n_neighbors=5, weights='uniform', metric='nan_euclidean')df=read_csv('data.csv', header=None,na_values='?')data=df.valuesix = [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)

但是这里的问题是我不需要得分。我希望在填补缺失值后获得数据集(五折或完整的),因为我需要在填补后使用五折数据进行特征选择,然后进行分类。那么如何获得填补后的数据集呢?


回答:

正如评论中讨论的,CV过程在这里实际上没有任何帮助。你真正需要的是:

  • 拟合你的KNNImputer并用它来转换(填补)你的训练数据
  • 使用这个已经拟合的填补器相应地转换你的未见数据

这样,你的训练和测试数据将共享一个共同的填补过程,因此无论你选择哪种特征选择方法,都可以实际应用于这两个数据集。

这里是使用虚拟数据的演示,改编自文档中的示例:

import numpy as npfrom sklearn.impute import KNNImputerX = [[1, 2, np.nan], [3, 4, 3], [np.nan, 6, 5], [8, 8, 7]] # dummy dataimputer = KNNImputer(n_neighbors=2)X_imp = imputer.fit_transform(X) # fit imputer & transform training dta in 1 stepX_imp# result:array([[1. , 2. , 4. ],       [3. , 4. , 3. ],       [5.5, 6. , 5. ],       [8. , 8. , 7. ]])# new (unseen - test) data with missing values:# we DON'T fit the imputer againX_new = np.array([[7, 3, 4], [np.nan, 8, 7]])X_new_imp = imputer.transform(X_new) # use the imputer already fitted with the training dataX_new_imp# result:array([[7. , 3. , 4. ],       [5.5, 8. , 7. ]])

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注