微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一种热编码的正确方法

如何解决一种热编码的正确方法

我对什么是在线 RE one hot encoding 感到有些困惑。我正在使用 get_dummies 方法,但我不清楚的是我是否在 train_test_split 之前或之后应用一种热编码。例如这样对吗?这是一种流行的方法,但这不会导致数据泄漏吗?

features = pd.get_dummies(features,columns=['country'],dummy_na=True)

X_train,X_test,y_train,y_test = train_test_split(features,y,random_state=0)

例如在我的情况下,火车包含所有国家/地区,但测试集包含除德国之外的所有国家/地区,但使用上述方式将使德国保持热编码,在我的测试集中使用一系列 0 和 1,因此不仅仅是一系列 0,因为它不存在。这在我看来是错误的。

解决方法

tl;dr:总是先分裂。仅使用训练集来确定特征表示的任何方面。

任何编码都应该只在训练集上计算,以避免数据泄漏。然后将相同的编码应用于测试集。

当然有可能某个特定值没有出现在训练集中,而是出现在测试集中。有不同的方法来处理这个,视情况而定:

  • 只需忽略测试集中的未知值,或将其替换为缺失值即可。
  • 从一开始就移除任何稀有值(例如频率低于 N)并替换为特殊类别“未知”。在测试集上应用相同的原理。

此外,请注意,如果训练集中存在稀有值,则会带来过度拟合的风险。如果训练集中不存在,则该值无用,因为模型不知道它。这就是为什么从一开始就删除它们几乎总是一个好主意。

,

有时,您有很多小类别。这是内容丰富的类别,您可以尝试在培训中将它们合并为一个类别。让我们将此类别称为 C0。因此,您进行推理(测试)。在推理时,您将获得新类别。您可以将未定义的类别添加到 C0 类别并进行预测。

当然,你需要在交叉验证上测试这个案例。

不要忘记,数据在现实世界中会及时更改。我想,您需要找到来源到达新类别。

如果你说发明的任务,例如,kaggle - 问题,那么好的想法是在交叉验证和排行榜上尝试这个案例。之后,您就可以了解最好的做法。

在 Kaggle 中,有时在测试中有很大的类别。它为C0 奠定了不可理喻的大类别。你需要研究你的问题。或许,这是解决的关键。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。