用机器学习中的列平均值来估算缺失值

问题描述 投票:0回答:2

我知道插补缺失值正是它听起来的意思,我说的是用列的平均值插补它。我通常在将数据分成训练和测试之前估算缺失值,但后来我看到了这个QnA,上面写着

注意:如果您想将其用于机器学习/数据科学:从数据科学的角度来看,首先替换 NA 然后拆分为训练和测试是错误的...您必须首先拆分为训练和测试,然后替换 NA意思是在火车上,然后应用这个有状态预处理模型来测试,请参阅下面涉及 sklearn 的答案! – Fabian Werner 2019 年 8 月 28 日 9:18

这是什么意思?我们能做到吗?我们该怎么做?分割数据之前和之后有什么不同吗?如果是,为什么?请帮助我理解,因为我对这件事很困惑。

python machine-learning data-science
2个回答
2
投票

是的,这是一个正确的说法。您应该首先将数据分为训练数据和有效/测试数据,计算训练数据的平均值并将其应用于有效/测试数据。

事实上,这与任何基于数据本身的处理相关。 如果对整个数据集进行计算和转换,则会将信息泄漏到数据中。但我们希望进行正确的验证,因此有效/测试数据集应该像火车一样进行处理


0
投票

是的,这个说法是正确的。您应该始终将数据拆分为训练集和测试集,拆分后应仔细处理这两个集,以避免数据泄漏。如果您计算整个数据或测试集的转换,那么您的模型也将从测试集中学习参数,这可能会导致数据泄漏。

为了防止这种情况,您应该始终将输入器安装在训练集上

from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='median')
imputer.fit(X_train_encoded)

然后分别对训练集和测试集应用变换

X_train_imputed = imputer.transform(X_train_encoded)
X_test_imputed=imputer.transform(X_test_encoded)

它将确保插补器仅从训练数据中学习,而测试集在插补过程中保持不可见

© www.soinside.com 2019 - 2024. All rights reserved.