使用决策树分类,并绘制类图

使用决策树分类,并绘制类图

决策树概念部分:

信息熵

是度量样本集合纯度的一个指标,信息熵越大,纯度越低

信息增益:

在信息论中信息增益也称为互信息(参见附录⃝1 ),其表示已知一个 随机变量的信息后使得另一个随机变量的不确定性减少的程度。这个公式可以理解为在属性 a 的取值已知后,样本类别这个随机变量的不确定性减小的程度。若根据某个属性计算得到的信息增益越 大,则说明在知道其取值后样本集的不确定性减小的程度越大,也即为书上所说的“纯度提升”越大

细读西瓜书中使用西瓜2.0数据集计算信息增益的例子

信息增益率:

信息增益率就是信息增益除以划分属性$\alpha$的固定值,公式为:

属性$\alpha$的可能取值越多,V越大,固定值就越大,因此信息增益率就限制了信息增益大,但是分类多的属性被选取,例如西瓜书中数据集的“编号”属性

需注意的是:C4.5算法中不是直接用信息增益率作为划分属性,而是先求的信息增益,然后再最大信息增益中再寻找信息增益率大的属性

基尼指数:

反映了从数据集中随机抽取两个样本,其类别标记不一样的概率,基尼指数越小,其数据D的纯度越高

CART树就是采用基尼指数作为划分标准,不仅可以分类,也可以回归

代码部分

from sklearn.tree import DecisionTreeClassifier

tree_model = DecisionTreeClassifier(criterion='gini', 
                                    max_depth=4, 
                                    random_state=1)
tree_model.fit(X_train, y_train)

X_combined = np.vstack((X_train, X_test))
y_combined = np.hstack((y_train, y_test))
plot_decision_regions(X_combined, y_combined, 
                      classifier=tree_model,
                      test_idx=range(105, 150))

plt.xlabel('petal length [cm]')
plt.ylabel('petal width [cm]')
plt.legend(loc='upper left')
plt.tight_layout()
#plt.savefig('images/03_20.png', dpi=300)
plt.show()

from sklearn import tree

tree.plot_tree(tree_model)

plt.savefig('images/03_21_1.pdf')

plt.show()

from pydotplus import graph_from_dot_data
from sklearn.tree import export_graphviz

dot_data = export_graphviz(tree_model,
                           filled=True, 
                           rounded=True,
                           class_names=['Setosa', 
                                        'Versicolor',
                                        'Virginica'],
                           feature_names=['petal length', 
                                          'petal width'],
                           out_file=None) 
graph = graph_from_dot_data(dot_data) 
graph.write_png('tree.png') 

posted @ 2022-10-20 11:28  狂钓叟  阅读(175)  评论(0)    收藏  举报