【发布时间】:2018-10-09 04:39:34
【问题描述】:
这是我对著名的Iris 数据集进行二特征分类的基本代码:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, export_graphviz
from graphviz import Source
iris = load_iris()
iris_limited = iris.data[:, [2, 3]] # This gets only petal length & width.
# I'm using the max depth as a way to avoid overfitting
# and simplify the tree since I'm using it for educational purposes
clf = DecisionTreeClassifier(criterion="gini",
max_depth=3,
random_state=42)
clf.fit(iris_limited, iris.target)
visualization_raw = export_graphviz(clf,
out_file=None,
special_characters=True,
feature_names=["length", "width"],
class_names=iris.target_names,
node_ids=True)
visualization_source = Source(visualization_raw)
visualization_png_bytes = visualization_source.pipe(format='png')
with open('my_file.png', 'wb') as f:
f.write(visualization_png_bytes)
当我检查我的树的可视化时,我发现了这个:
乍一看,这是一棵相当普通的树,但我发现它有些奇怪。节点 #6 总共有 46 个样本,其中只有一个是杂色的,因此该节点被标记为弗吉尼亚。这似乎是一个相当合理的停下来的地方。但是,由于某种我无法理解的原因,该算法决定进一步拆分为节点 #7 和 #8。但奇怪的是,仍然存在的 1 versicolor 仍然被错误分类,因为两个节点最终都具有Virginica 类。为什么要这样做?它是否只是盲目地只看基尼系数的下降,而不看它是否有任何影响——这对我来说似乎是一种奇怪的行为,而且我在任何地方都找不到它的记录。
是否可以禁用,或者这实际上是否正确?
【问题讨论】:
标签: python python-3.x machine-learning scikit-learn decision-tree