使用决策树分类,并绘制类图
使用决策树分类,并绘制类图
决策树概念部分:
信息熵
是度量样本集合纯度的一个指标,信息熵越大,纯度越低

信息增益:
在信息论中信息增益也称为互信息(参见附录⃝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')

浙公网安备 33010602011771号