7

文档看来,它DecisionTreeClassifier支持多类功能

DecisionTreeClassifier 能够进行二元(标签为 [-1, 1])分类和多类(标签为 [0, ..., K-1])分类。

但是,似乎每个节点中的决策规则都基于“大于”

我正在尝试构建具有枚举特征的树(每个特征的绝对值没有意义 - 只是相等\不相等)

scikit-learn 决策树是否支持这一点?

我目前的解决方案是将每个特征分离为每个可能值的一组二进制特征 - 但我正在寻找一种更清洁、更有效的解决方案。

4

3 回答 3

12

术语多类仅影响目标变量:对于 scikit-learn 中的随机森林,它要么是分类的,带有整数编码的多类分类,要么是连续的回归。

“大于”规则适用于输入变量,与目标变量的种类无关。如果您有低维的分类输入变量(例如,少于几十个可能值),那么对这些变量使用 one-hot-encoding 可能是有益的。看:

  • OneHotEncoder如果您的类别被编码为整数,
  • DictVectorizer如果您的类别在 python dict 列表中被编码为字符串标签。

如果某些分类变量具有高基数(例如数千个或更多可能值),则实验表明DecisionTreeClassifiers 和基于它们的更好模型(例如RandomForestClassifiers)可以直接在原始整数编码上进行训练,而无需将其转换为one-hot-encoding 会浪费内存或模型大小。

于 2013-09-11T08:23:31.857 回答
2

DecisionTreeClassifier当然可以进行多类分类。“大于”恰好在该链接中进行了说明,但得出该决策规则是其对信息增益或基尼系数的影响的结果(请参阅该页后面的内容)。决策树节点通常具有二进制规则,因此它们通常采用某个值大于另一个值的形式。诀窍是转换您的数据,使其具有可比较的良好预测值。

需要明确的是,多类意味着您的数据(例如文档)将被归类为一组可能的类中的一个。这与多标签分类不同,在多标签分类中,文档需要用一组可能的类别中的几个类别进行分类。大多数 scikit-learn 分类器都支持多类,并且它有一些元包装器来完成多标签。您还可以使用概率(使用该predict_proba方法的模型)或决策函数距离(使用该decision_function方法的模型)进行多标签。

如果您说您需要为每个数据应用多个标签(例如 ['red','sport','fast'] 到汽车),那么您需要为每个可能的组合创建一个唯一标签以使用树木/森林,这将成为您的 [0...K-1] 类集。但是,这意味着数据中存在一些预测相关性(对于汽车示例中的颜色、类型和速度的组合)。对于汽车,可能有红色/黄色的快速跑车,但不太可能用于其他 3 路组合。数据可能对少数人有很强的预测性,而对其他人则非常弱。最好使用 SVM 或LinearSVC和/或使用OneVsRestClassifier或类似方法进行包装。

于 2013-09-11T07:51:40.597 回答
1

有一个名为 DecisionTree https://engineering.purdue.edu/kak/distDT/DecisionTree-2.2.2.html的 Python 包 ,我觉得它很有帮助。

这与您的 scikit/sklearn 问题没有直接关系,但对其他人有帮助。另外,当我在寻找 python 工具时,我总是去 pyindex。 https://pypi.python.org/pypi/pyindex

谢谢

于 2014-06-11T19:58:13.393 回答