python - 在训练-测试分割后使用 LabelEncoder 对分类变量中看不见的/新标签进行编码?

标签 python scikit-learn

我的老师解释说,在训练测试分割后对分类变量进行编码以防止数据泄漏非常重要,并通过使用 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/

相关文章:

python - 链接到 Python 文档字符串中的类方法

python - 如何创建随机点立体图 (RDS)?

machine-learning - scikit-learn 中多标签模型的得分优于具有二进制标签的相同模型

python - Scikit : How to limit maximum values for prediction per sample

python - 如何在Scikit-Learn文本CountVectorizer或TfidfVectorizer中保留标点符号?

python - 从 bash 脚本检查 Python 开发文件是否存在

java - 为什么我的 Swing 窗口会在几秒钟后自行关闭?

python - 绘制 kmeans 的输出(PyCluster impl)

scikit-learn - 多处理支持的并行循环不能嵌套在线程下

python - 如何加速 python 中的嵌套交叉验证?