我有一组特性,其中之一是字符串。我将字符串转换为整数,方法是将字符串作为36基数(我只使用前13个字符)。然后我可以使用DecisionTrees,因为在sklearn实现中,您需要将它转换为一个数字。当我尝试一种不同的模型,比如说Logistic回归时,性能急剧下降,从80%下降到30%。
如果我能够在DecisionTrees模型中这样使用字符串,我可能会接受这个结果,但是既然我对两个模型都使用了相同的字符串到整数转换,那么为什么会有这么大的差异呢?
我不能说细节,但让我给你打个比方。比方说,您正在根据数百万对象的有用性对其进行分类。所以你说锤子是4,螺丝刀6,洗衣机10等等。当然,你有不止一个螺丝刀,有时你会忘记,给它一个5的值,或者其他什么东西。该模型遍历数百万个示例,然后对每个对象的数量进行预测。正如我解释的,我把名字转换成整数,决策树给了我80%的准确率,线性回归了30%。我假设问题是线性回归试图找出一些不存在的数学规则。但是为什么决策树不受这个问题的影响呢?
发布于 2018-11-01 16:43:50
字符串数据可以是分类的(例如,每个字符串有10个以上的示例),也可以是免费的文本。如果是前者,一棵决策树就可以解决这个问题。你不需要把它转换成数字。
对于回归,不能直接使用分类变量。如果要在回归中使用它们,则需要创建虚拟变量来对值进行编码。例如,如果颜色变量为“红色”、“黄色”、“蓝色”,则创建变量"Red“(需要1或0)和”黄色“(需要1或0)。如果两者都是0,则颜色必须是“蓝色”。在滑雪板中有自动完成此操作的功能。
如果您的字符串只是免费的文本,那么您将需要一个更好的方法来获取信息。您可以使用文本挖掘(如标记化、TF等)将其转换为可以输入分类器的数字和分类信息。
发布于 2018-08-21 04:46:10
决策树可以对分类数据进行分类。即使它们将每个字符串视为单独的(与其他字符串不可比较)类别,它们仍然能够检测两个字符串何时相等。
统计方法,如logistic回归,情况并非如此。这些需要我是间隔数据。这就是为什么您需要在字符串上定义一个字符串相似性度量。除非有理由这样定义您的度量(注意,在其他类似字符串中的第一个字符的差异被计算得比最后一个字符中的差异要远得多),否则算法可能会被字符串的值搞混。因此,您的回归可能学到了您在字符串转换中引入的一些内容,并且在原始数据中不存在。这种引入的依赖性可能会混淆您的回归,并可能掩盖一种更有效的学习方式。
要验证这样的假设,您可以尝试应用其他字符串相似性度量并比较结果。但是,要小心:在不同的上下文中,不同的度量可能是有用的。
https://datascience.stackexchange.com/questions/16509
复制相似问题