【问题标题】:How sklearn DecsionTreeClassifier choose output values when the max_depth has given 1?当 max_depth 为 1 时,sklearn DecsionTreeClassifier 如何选择输出值?
【发布时间】:2019-12-05 12:27:48
【问题描述】:

这是我的代码

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier

dataset = load_iris()
X_train,X_test,y_train,y_test = train_test_split(dataset.data,dataset.target,test_size=0.3)


reg = DecisionTreeClassifier(max_depth=1)
reg.fit(X_train,y_train)
print(reg.predict(X_test))

我已经为训练集添加了树的图像,在这里你可以看到在错误的情况下,数据集的值 [0,39,38] 分别指向 0、1、2 的输出。因此,从假数据集 1 成为输出的可能性最高。决策树应该根据树对 0 或 1 进行分类,但我也可以在预测中看到 2。那么,sklearn如何在什么条件下选择false set上的类来预测输出。

【问题讨论】:

  • 这是错误的一面,不是吗?在那之后,由于基尼指数,从那里开始几乎有 50-50 的机会。
  • 这不等于问“sklearn 决策树对 D=0 的两个类会做什么”?我认为是这样,在这种情况下,每个班级的机会将根据发生的情况,并由大多数人做出决定(这与机会相对应)。
  • D=1:如果petal_length 预测0(所有以petal_lenght预测1。这对应于每个叶子的“值”,即每个类在树的确切分支上出现的次数。拿它,除以值的总和,你会得到每个类的经验概率,条件是分支。
  • 此类树的优化请看en.wikipedia.org/wiki/C4.5_algorithm(今天更常用的是为决策树实现梯度提升的XGBoost算法)。根据定义,这就是 ID3 和 C4.5 优化的工作原理,也是分支和标签之间互信息的 Gini 指标(参见 en.wikipedia.org/wiki/Decision_tree_learning#Gini_impurity
  • 如果您问为什么它在预测中也显示 2,这可能是由于 SKlearn 功能和分隔符选择中实施的随机化,请参阅stackoverflow.com/questions/21391429/…

标签: python machine-learning scikit-learn data-science


【解决方案1】:

我敢肯定,不同之处在于没有设置random_state

这里有两个地方是随机的,

  • 训练测试拆分
  • 构建决策树模型

您可能已经使用决策树进行了预测,然后使用另一棵决策树创建了可视化。

使用不同的random_state 值尝试以下代码:

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.tree import plot_tree

dataset = load_iris()

X_train,X_test,y_train,y_test = train_test_split(dataset.data,
                                                 dataset.target,
                                                 test_size=0.3,
                                                 random_state=0)
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(max_depth=1, random_state=1)
clf.fit(X_train,y_train)
print(clf.predict(X_test))

plot_tree(clf)

注意:plot_tree 功能需要 sklearn 版本 0.21.2。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-21
    • 2020-11-04
    • 1970-01-01
    • 2019-07-22
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    相关资源
    最近更新 更多