使用标签编码时训练与测试中不同数量的特征

数据挖掘 机器学习 分类数据 分类编码
2022-03-06 02:49:59

这不是训练与测试中不同数量的特征的重复

我的数据中有一些分类列,它们的基数很大,所以我选择使用 LabelEncoding 而不是 OneHotEncoding。但是,验证集中的某些类别没有出现在训练集中,它们导致我的模型表现很差。我正在抓取互联网,但找不到方法。

有什么办法可以用来解决这个问题吗?

先感谢您。

2个回答

要解决高基数问题,请遵循 Erwan 的建议。要解决您提到的第二个问题,请在训练集上安装 OneHotEncoder 并在测试集上使用变压器,如下所示:

from sklearn.preprocessing import OneHotEncoder

enc = OneHotEncoder(handle_unknown = 'ignore')

enc.fit(train)

X_train = enc.transform(train)

X_test = enc.transform(test)

用于分类特征是错误的LabelEncoding,它应该只用于分类目标变量。这是因为它将值转换为整数,因此在值上引入了任意顺序。

导致性能不佳的不是训练集中没有出现的值(您可以检查),这很可能是因为您的模型过拟合:由于特征中有许多不同的值,因此您需要大量实例以便模型获得每个值的代表性样本。当然数据永远不会那样,从您的描述中可以清楚地看出,有些值出现得太少(这就是为什么有些值只出现在测试集中)。

解决方案是简化数据,使模型不依赖于训练集中偶然出现的模式:

  • 用特殊值替换很少出现的值,例如RARE_VALUE. 为最小频率尝试不同的阈值。
  • 使用一种热编码 (OHT) 对分类特征进行编码。
  • 由于移除了稀有值,因此 OHT 特征的数量会更少。为了避免过拟合,实例/特征的比率应该足够高。
  • 如果测试集中仍有一些值没有出现在训练集中,请将它们替换为您的特殊值RARE_VALUE