gpt4 book ai didi

python - sklearn DecisionTreeClassifier 真的可以处理分类数据吗?

转载 作者:行者123 更新时间:2023-11-30 08:25:42 25 4
gpt4 key购买 nike

使用 DecisionTreeClassifier I visualized it using graphviz 时,我不得不说,令我惊讶的是,它似乎采用分类数据并将其用作连续数据。

我的所有特征都是分类的,例如您可以看到以下树(请注意,第一个特征 X[0] 有 6 个可能的值 0、1、2、3、4、5: enter image description here据我发现here该类使用树类,它是二叉树,因此它是 sklearn 中的一个限制。

有人知道我缺少明确使用树的方法吗? (我知道这对于这项任务来说并不是更好,但由于我目前需要类别,所以我在数据上使用一个热向量)。

原始数据的示例如下所示:

f1 f2 f3  f4  f5  f6  f7  f8  f9  f10  c1  c2  c3
0 C S O 1 2 1 1 2 1 2 0 0 0
1 D S O 1 3 1 1 2 1 2 0 0 0
2 C S O 1 3 1 1 2 1 1 0 0 0
3 D S O 1 3 1 1 2 1 2 0 0 0
4 D A O 1 3 1 1 2 1 2 0 0 0
5 D A O 1 2 1 1 2 1 2 0 0 0
6 D A O 1 2 1 1 2 1 1 0 0 0
7 D A O 1 2 1 1 2 1 2 0 0 0
8 D K O 1 3 1 1 2 1 2 0 0 0
9 C R O 1 3 1 1 2 1 1 0 0 0

其中 X[0] = f1 并且我将字符串编码为整数,因为 sklearn 不接受字符串。

最佳答案

好吧,我很惊讶,但事实证明 sklearn 的决策树确实无法处理分类数据。从 2015 年 6 月开始,关于此问题 ( #4899 ) 的 Github 问题仍然存在,但它仍然处于开放状态(更新:它现在已关闭,但在 #12866 中继续,因此问题仍未解决)。

正如您在此处所做的那样,将分类变量编码为整数的问题在于,它对它们强加了一个顺序,这可能有意义,也可能没有意义,具体取决于具体情况;例如,您可以编码 ['low', 'medium', 'high'][0, 1, 2] ,自 'low' < 'medium' < 'high' (我们将这些分类变量称为序数),尽管您仍然隐含地做出额外的(可能是不需要的)假设 'low' 之间的距离和'medium''medium' 之间的距离相同和'high' (对决策树没有影响,但很重要,例如在 k-nn 和聚类中)。但这种方法在类似 ['red','green','blue'] 的情况下完全失败。或['male','female'] ,因为我们不能断言它们之间有任何有意义的相对顺序。

因此,对于非序数分类变量,正确编码它们以在 sklearn 决策树中使用的方法是使用 OneHotEncoder 模块。 Encoding categorical features用户指南的部分也可能有帮助。

关于python - sklearn DecisionTreeClassifier 真的可以处理分类数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47873366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com