我的数据中有一些分类列,它们的基数很大,所以我选择使用 LabelEncoding 而不是 OneHotEncoding。但是,验证集中的某些类别没有出现在训练集中,它们导致我的模型表现很差。我正在抓取互联网,但找不到方法。
有什么办法可以用来解决这个问题吗?
先感谢您。
我的数据中有一些分类列,它们的基数很大,所以我选择使用 LabelEncoding 而不是 OneHotEncoding。但是,验证集中的某些类别没有出现在训练集中,它们导致我的模型表现很差。我正在抓取互联网,但找不到方法。
有什么办法可以用来解决这个问题吗?
先感谢您。
要解决高基数问题,请遵循 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. 为最小频率尝试不同的阈值。RARE_VALUE。