决策树(Decision Tree)学习笔记

决策树的种类

模块 sklearn.tree

tree.DecisionTreeClassifier: 分类树

tree.DecisionTreeRegressor:回归树

tree.export.graphviz:将生成的决策树导出为DOT格式,画图专用,可以可视化展现决策树

tree.ExtraTreeClassifier:高随机版本的分类树

tree.ExtraTreeRegressor

决策树建模的过程

决策树通过分类器集成的方式筛选出最终的决策树:多次随机选择一些特征进行决策树分类,得到多个决策树后选取拟合效果最好(score最高)的一个决策树模型。

每个节点的分类是依靠entropy和gini系数进行节点的划分,计算系数后得到不纯度,不纯度越低说明该节点内分类的数据越具备统一的标签。例如,有苹果、梨子、香蕉,该节点分类被归属于苹果,但其实内部仍然包含少部分的梨子和香蕉。当不纯度为0时,代表所有记录都为一个相同的标签,叶子(leaf)节点的不纯度为0。

相关代码:

建模代码

clf = tree.DecisionTreeClassifier(criterion='entropy'[默认gini]
,random_state=30[按照一定规则选取特征,不会随机选取特征,输入相同的数值会生成同一棵树】
,splitter='random'【控制随机选择的特征的,分为random和best,best为决策树随机选择特征时会选择更重要的特征进行分枝,random为分枝时会更加随机,对选练级的拟合会降低,当过拟合时经常选用这个方式降低拟合】
,max_depth=3【树最大的层数(不包含root层),如果太大就会过拟合,太小就会underfit
,min_samples_leaf=10【节点的子节点至少包含10各训练样本,太大就会underfit,太小就会过拟合】
,min_samples_split=10【节点至少包含10各节点】)

clf=clf.fit(Xtrain,Ytrain)

score=clf.score(Xtest,Ytest)

可视化代码

import graphviz

feature_name=['a','b','c']

dot_data=tree.export_graphviz(clf, feature_name=feature_name,class_names=['a','b','v'],filled=True,rounded=True)

graph=graphviz.Source(dot_data)

注:feature_name是数据集的特征,class_names是记录的标签,filled是是否上颜色。

#决策树查看特征重要性

clf.feature_importance_

[zip(feature_name,clf.feature_importances_)]

参数选择

import matplotlib.pyplot as plt

test=[]

for i in range(10):
        clf=tree.DecisionTreeClassifier(max_depth=i+1
        ,criterion = "entropy"
        ,random_state=30)

clf=clf.fit(Xtrain,Ytrain)
score=clf.score(Xtest,Ytest)
test.append(score)

plt.plot(range(1,11),test,color='red',label='max_depth')
plt.legend()
plt.show()

遍历一下参数,选出最好的参数,不光是max_depth,也可以选择其他参数。

重要接口

clf.apply(Xtest)#返回每个样本所在的叶子节点索引

clf.predict(Xtest)#返回每个样本的分类回归结果

猜你喜欢

转载自blog.csdn.net/xzhu4571/article/details/125298576