我的老师解释说,在训练测试分割后对分类变量进行编码以防止数据泄漏非常重要,并通过使用 LabelEncoder(来自 sklearn)的示例进行了演示,但是当我尝试在另一个数据帧上执行相同操作时,包含超过列中有 1000 个不同的标签/对象(数据类型:对象),我遇到了一个问题:
valueerror: y contains new labels when using scikit learns labelencoder
为了解决这个问题,我在训练-测试分割之前进行了编码,这会导致过度拟合。有没有办法使用 LabelEncoder 编码/处理训练数据中看不见的标签?列中有很多不同的值,因此使用热编码器(可以处理未知值)是不可行的。如果还有其他选择,为什么不是太复杂(我是 ML 和 Python 的新手)?
最佳答案
LabelEncoder
用于对目标标签 y
进行编码,因此不应用于对 X
变量进行编码。
但是 scikit-learn OrdinalEncoder
正在对 X
变量进行相同的转换。除此之外,它还提供了一个参数来处理未知输入。您可以按如下方式使用它:
from sklearn.preprocessing import OrdinalEncoder
encoder = OrdinalEncoder(handle_unknown='ignore', unknown_value=np.nan)
对于新的未知类别,OrdinalEncoder
基本上会返回 NaN
。
注意:此功能在 scikit-learn 版本 >0.24
中提供。
关于python - 在训练-测试分割后使用 LabelEncoder 对分类变量中看不见的/新标签进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68154631/