我想知道如何使用决策树来预测涉及六个唯一类的多类问题的结果。我只能遇到二叉树的例子,二叉树可以用来预测多类问题还是有更好的选择?
您将如何使用决策树来学习预测涉及 6 个独特类别的多类别问题
机器算法验证
机器学习
2022-03-23 01:07:59
3个回答
简而言之,是的,您可以使用决策树来解决这个问题。
然而,还有许多其他方法可以预测多类问题的结果。
如果您想使用决策树,一种方法是为每个类分配一个唯一的整数。第一类的所有示例都将被分配值 y=1,所有第二类的示例都将分配给值 y=2 等等。在此之后,您可以训练决策分类树。
这是我通过修改此hackernoon帖子(https://hackernoon.com/a-brief-look-at-sklearn-tree-decisiontreeclassifier-c2ee262eab9a)中的示例获得的Python快速实现
您可以看到我们在数据中有 0、1、2 和 3 类,并且算法训练能够完美地预测这些(请注意,这里有过度训练,但这是一个旁注)
from sklearn import tree
from sklearn.model_selection import train_test_split
import numpy as np
features = np.array([
[29, 23, 72],
[31, 25, 77],
[31, 27, 82],
[29, 29, 89],
[31, 31, 72],
[29, 33, 77],
]*10)
labels = np.array([
[0],
[1],
[2],
[3],
[2],
[0],
]*10)
X_train, X_test, y_train, y_test = train_test_split(
features,
labels,
test_size=0.3,
random_state=42,
)
clf = tree.DecisionTreeClassifier()
clf.fit(X=X_train, y=y_train)
clf.feature_importances_ # [ 1., 0., 0.]
clf.score(X=X_test, y=y_test) # 1.0
clf.predict(X_test) # array([0, 0, 0, 3, 1, 0, 3, 0, 0, 3, 2, 2, 1, 3, 2, 0, 2, 0])
当然可以。树的二元性只存在于它提出的问题中。树的每个节点代表一个具有二进制答案的问题(除非它是一个终端节点 -> 一个代表一个“类”),例如:
是数字变量吗?
是分类变量吗?
然后,树根据答案拆分观察结果。可以有许多终端节点通向不同的“类”,甚至可以有许多节点通向同一类。
注意:我把“类”这个词放在“”中,这样我就不必为回归树改写它了。
注意2:例如查找随机森林以克服树木的一些障碍。
可以直接调用sklearn的决策树来实现任务。
对于每个分裂节点,需要选择一个最佳属性和一个最佳分裂点(对于连续属性),然后分别计算左右子节点的杂质。可以基于基尼指数计算子杂质。
其它你可能感兴趣的问题