使用中位数填充测试集中的NaN值

我在进行数据准备,以便使数据适合用于机器学习算法。目前,我正在处理缺失值。在下面的代码块中,我没有遇到错误,而是感到困惑。在两个代码块中,我对两个不同的数据集应用了相同的方法:train_x_e => 训练集test_x => 测试集。在第一个代码块中,我使用 train_x_e 来填充 train_x_e 中的NaN值,这完全没问题。然而,在 test_x 中,我不确定应该使用 train_x_e 还是 test_x 来填充NaN值,如第二个代码块所示。如果有人能向我解释这一点,我将不胜感激!

检查键值是否大于0,以便我们可以将它们存储在nan_columns中

训练集

 nan_columns = []    for keys, values in null_vals.items():        if values > 0:            nan_columns.append(keys)    train_x_b = train_x_e.fillna(train_x_e.median())    print(nan_columns)

测试集的相同程序

测试集

  nan_columns = []    for keys, values in null_vals.items():        if values > 0:            nan_columns.append(keys)    test_x_b = test_x.fillna(test_x.median())    print(nan_columns)

回答:

你这样做是正确的。你应该始终分开训练和测试数据。你在测试模型时使用的是新的数据,因此只能使用从这些数据中得出的信息。

在测试时使用训练数据的中位数并不是一个严重的错误,但请注意,这两个数据集的准备过程是不同的。在第一个数据集中,使用的是相同数据集的中位数,而在第二个数据集中,则使用了与测试数据集无关的值。

此外,当使用训练集的中位数时,你需要将它与模型一起保存。如果你有1000个特征,你需要保存1000个值。如果你想要一个迭代模型,你是否也需要更新这些值呢?

使用来自其他数据集的信息污染一个数据集的现象被称为数据泄漏

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中创建了一个多类分类项目。该项目可以对…

发表回复

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