这是在不泄露信息的情况下扩展机器学习目标的有效方法吗?
Is this a valid approach to scale your target in machine learning without leaking information?
考虑一个房价数据集,其目标是预测销售价格。
我想通过预测“每平方米的销售价格”来做到这一点,
因为它会产生更好的结果。
问题是如果我这样实现它 - 它是否会在测试集中引入信息泄漏?
当我在 scikit learn 中拆分我的数据集时:
df= read(Data)
target = df["SalePrice"]
df.drop(columns=["SalePrice"], inplace=True)
X_train, X_test, y_train, y_test = train_test_split(df, target, test_size=0.20)
然后缩放y_train:
# Scale target by LivingSpace and call fit()
y_train = target/X_train["LivingSpace"]
estimator.fit(X_train, y_train)
并使用预测和缩放 y_test 中的目标以获得每平方米的销售价格:
y_pred, y_true = estimator.predict(X_test), y_test/X_test["LivingSpace"]
我认为这是有效的,因为我只按已知值缩放目标。如果我直接预测 SalePrice
或 SalePrice / LivingSpace
,应该不会有什么不同,因为 LivingSpace 在我预测价格时无论如何都会给我。
如果是这样的话,我们也可以直接把这个目标变换应用到训练集和测试集上,最后把预测值变换回来,对吧?
这当然也适用于 X 中给出的任何特征。只要有关目标本身的信息不存在于 X 中,我认为这里没有问题。请记住,真正的目标只是销售价格,所以我的意图是将其从每平方米的销售价格中缩减。转换只是为了更好的训练结果。
您对此代码有何看法?
一切都很好。
1· 你没有泄密
2· 你可以直接将这个目标变换应用到训练集和测试集上,预测后再变换回去。
3· 您可以对X 中给出的任何功能执行此操作。您不需要对有关目标的信息进行备注。您可以随时使用 X 以任何您想要的方式转换 y,您唯一“泄漏”的是您自己对手头问题的理解,这绝对没问题。
4· 你的代码有bug,而不是
y_train = target/X_train["LivingSpace"]
你应该
y_train = y_train/X_train["LivingSpace"]
y_test = y_test/X_test["LivingSpace"]
考虑一个房价数据集,其目标是预测销售价格。
我想通过预测“每平方米的销售价格”来做到这一点, 因为它会产生更好的结果。
问题是如果我这样实现它 - 它是否会在测试集中引入信息泄漏?
当我在 scikit learn 中拆分我的数据集时:
df= read(Data)
target = df["SalePrice"]
df.drop(columns=["SalePrice"], inplace=True)
X_train, X_test, y_train, y_test = train_test_split(df, target, test_size=0.20)
然后缩放y_train:
# Scale target by LivingSpace and call fit()
y_train = target/X_train["LivingSpace"]
estimator.fit(X_train, y_train)
并使用预测和缩放 y_test 中的目标以获得每平方米的销售价格:
y_pred, y_true = estimator.predict(X_test), y_test/X_test["LivingSpace"]
我认为这是有效的,因为我只按已知值缩放目标。如果我直接预测 SalePrice
或 SalePrice / LivingSpace
,应该不会有什么不同,因为 LivingSpace 在我预测价格时无论如何都会给我。
如果是这样的话,我们也可以直接把这个目标变换应用到训练集和测试集上,最后把预测值变换回来,对吧?
这当然也适用于 X 中给出的任何特征。只要有关目标本身的信息不存在于 X 中,我认为这里没有问题。请记住,真正的目标只是销售价格,所以我的意图是将其从每平方米的销售价格中缩减。转换只是为了更好的训练结果。
您对此代码有何看法?
一切都很好。
1· 你没有泄密
2· 你可以直接将这个目标变换应用到训练集和测试集上,预测后再变换回去。
3· 您可以对X 中给出的任何功能执行此操作。您不需要对有关目标的信息进行备注。您可以随时使用 X 以任何您想要的方式转换 y,您唯一“泄漏”的是您自己对手头问题的理解,这绝对没问题。
4· 你的代码有bug,而不是
y_train = target/X_train["LivingSpace"]
你应该
y_train = y_train/X_train["LivingSpace"]
y_test = y_test/X_test["LivingSpace"]