LabelEncoding目标变量与one-hot-encoding相比,可以大大改善模型



我对转换为tf-idf的文本数据使用随机森林分类器(特征和目标变量都是文本,目标变量是公司名称)。由于使用LabelEncoder可以在没有序数的地方添加序数,因此我首先尝试对公司进行one-hot编码(完整的公司名称将是一列)。结果是0.48分。我改变了它,使公司现在是LabelEncoded,分数(交叉验证,但具有相同的参数)跃升到0.75。

我有两个与此相关的问题。

Sklearn的文档确实提到了LabelEncoder可用于对目标变量进行编码。这是否意味着增加的序数被否定了,这样用它来编码目标变量实际上是可以的?

还有,你能帮我理解是什么导致了这个大的改进吗?这是"假的"吗?改进是由增加的平凡性引起的吗?

谢谢!

Scikit-Learn分类器可以按原样处理字符串目标。实际上,这应该是默认的/预期的设置。

当您将字符串目标编码为数字目标(无论是使用LabelEncoderOneHotEncoder还是其他任何东西)时,您开始错误地表示问题。有一个机会,Scikit-Learn检查你的数据,并决定在幕后使用一些其他ML算法(例如。你最初的分类问题看起来像一个回归问题,并将以这种方式处理)。

LabelEncoder应用于字符串目标不应该改变任何东西。您正在使用分类器,根据定义,大多数Scikit-Learn分类器将目标视为无序分类问题。也就是说,将标签从字符串转换为整数不会使Scikit-Learn将其视为有序,因为Scikit-Learn代码库根本不包含任何有序建模逻辑!

应用OneHotEncoder将把单个目标列变成多个(二进制)目标列。如果你看到模型性能的巨大变化,那么Scikit-Learn现在可能正在将你的问题作为一个多输出分类问题来处理。

TLDR:不要以任何方式编码/转换您的字符串目标!没有必要这样做,这样做可能会误解你的问题。

最新更新