当特征之一是字符串时,决策树和逻辑回归之间的性能差异

数据挖掘 Python scikit-学习 决策树 线性回归
2021-09-29 15:11:42

我有一组功能,其中一个是字符串。我通过将字符串视为 36 基数(我只使用前 13 个字符)将字符串转换为整数。然后我可以使用 DecisionTrees,因为在 sklearn 实现中您需要将其转换为数字。当我尝试不同的模型时,比如逻辑回归,性能急剧下降,比如从 80% 到 30% 的准确度。

如果我能够在 DecisionTrees 模型中使用字符串,我可能会接受这个结果,但是由于我对两个模型都使用了相同的字符串到整数的转换,为什么会有如此大的差异?

我无法详细说明,但让我为您提供一个类比。假设您正在按有用性对数百万个对象进行分类。所以你说锤子是 4 个,螺丝刀 6 个,垫圈 10 个,等等。当然,你有不止一把螺丝刀,有时你会忘记并给它一个 5 的值,或者别的什么。该模型经过数百万个示例,然后对每个对象的数量进行预测。正如我解释的那样,我将名称转换为整数,决策树给了我 80% 的准确率,线性回归 30%。我认为问题在于线性回归试图找出一些不存在的数学规则。但是为什么决策树不受这个问题的影响呢?

2个回答

字符串数据可以是分类数据(例如,每个字符串有 10 多个示例)或自由文本。如果是前者,决策树可以处理它没有问题。您不必将其转换为数字。

对于回归,您不能直接使用分类变量。如果要在回归中使用它们,则需要创建虚拟变量来对值进行编码。例如,如果颜色变量的类别是“红色”、“黄色”、“蓝色”,则创建变量“红色”(取 1 或 0)和“黄色”(取 1 或 0)。如果两者均为 0,则颜色必须为“蓝色”。sklearn 中有一些功能可以自动执行此操作。

如果您的字符串只是自由文本,那么您将需要一种更好的方法来从中获取信息。您可以使用文本挖掘(例如标记化、TF-IDF 等)将其转换为可输入分类器的数字和分类信息。

决策树可以对分类数据进行分类。即使他们将每个字符串视为一个单独的(与其他字符串不可比较)类别,他们仍然能够检测到两个字符串何时相等。

统计方法并非如此,例如逻辑回归。这些需要我的区间数据。这就是为什么你需要在你的字符串上定义一个字符串相似度度量除非有理由以这种方式定义度量(请注意,否则相似字符串的第一个字符的差异被评估为比最后一个字符的差异更远),算法可能会被字符串的值混淆。因此,您的回归可能会学习到您在字符串转换中引入的东西,而这些东西在原始数据中不存在。这种引入的依赖可能会混淆你的回归,并可能掩盖更有效的学习方式。

要验证这样的假设,您可以尝试应用其他字符串相似度指标并比较结果。但是,请注意:不同的指标可能在不同的情况下有用。