python 标签对目标变量进行编码与一次热编码相比,可以极大地改进模型

iyr7buue  于 2022-12-17  发布在  Python
关注(0)|答案(1)|浏览(133)

我对转换为tf-idf的文本数据使用了Random Forest分类器(特征和目标变量都是文本,目标变量是公司名称)由于使用LabelEncoder在没有顺序的地方添加了顺序,所以我首先尝试对公司进行one-hot编码(完整的公司名称将是一列)。这导致了0. 48分。我改变了它,使公司现在是LabelEncoded,得分(具有交叉验证但具有相同参数)跳到0.75。
我有两个与此有关的问题。
Sklearn的文档确实提到LabelEncoder可以用来编码目标变量,这是否意味着添加的序数以某种方式被取反了,实际上可以用它来编码目标变量呢?
另外,你能帮助我理解是什么导致了这个大的改进吗?它是一个“假”的改进,不知何故造成的增加平凡性?
谢谢大家!

dly7yett

dly7yett1#

Scikit-Learn分类器可以按原样处理字符串目标。实际上,这应该是默认/预期设置。
当你把一个字符串目标编码成数字目标时(无论是使用LabelEncoderOneHotEncoder,还是其他的),你开始错误地表达问题。有一个机会,Scikit-Learn检查你的数据,并决定在幕后使用其他的ML算法(例如,你原来的分类问题看起来像一个回归问题,并将以这种方式处理)。
LabelEncoder应用到字符串目标不会改变任何东西。您正在使用一个分类器,根据定义,大多数Scikit-Learn分类器将目标视为无序分类问题。也就是说,将标签从字符串转换为整数不会使Scikit-Learn将其视为有序,因为Scikit-Learn代码库根本不包含任何有序建模逻辑!
应用OneHotEncoder会将单个目标列转换为多个(二进制)目标列。如果您看到模型性能发生了巨大变化,那么可能是Scikit-Learn正在将您的问题作为多输出分类问题来处理。
TLDR:不要以任何方式编码/转换你的字符串目标!没有必要这样做,这样做的话,你就有可能错误地表达你的问题。

相关问题