ccc-sklearn-1-决策树

1..tree模块中的类 tree.er分类树
tree.r
回归树
tree.
将生成的决策树导出为DOT格式,画图专用
tree.
高随机版本的分类树
tree.
高随机版本的回归树
2.基本建模流程
流程对应代码:
from sklearn import tree #导入需要的模块clf = tree.DecisionTreeClassifier()#实例化clf = clf.fit(X_train,y_train) #用训练集数据训练模型result = clf.score(X_test,y_test) #导入测试集,从接口中调用需要的信息
3.决策树的参数
不纯度介绍:
1.衡量分类数的指标,数值越低说明拟合效果越好;
2.基于节点计算,每个结点都有不纯度;
3.子结点不纯度低于父节点,即叶子结点不纯度最低
参数:
用来决定不纯度的计算方法,(信息熵)或者gini(基尼系数-默认)
说明:
1.t代表指定结点,i代表标签的任意分类,p(i|t)代表标签分类i在节点t上所占比例
2.信息熵的计算基于信息增益,即父节点信息熵和子节点信息熵的差
3.信息熵对不存度更敏感,计算较基尼系数慢(对数) 。
4.信息熵对于高纬数据和噪音较多的数据容易过拟合,此时基尼系数一般效果更好
5.模型在训练集合测试集上都表现不好时,即拟合程度不足时,使用信息熵
4.构造一课决策树(红酒分类)
决策树的基本流程
步骤一:导入数据以及必要的库
from sklearn import treefrom sklearn.datasets import load_winefrom sklearn.model_selection import train_test_splitwine = load_wine()
步骤二:合并数据表
import pandas as pdpd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
基本信息
步骤三:划分数据集与训练集
Xtrain, Xtest, Ytrain, Ytest =train_test_split(wine.data,wine.target,test_size=0.75)
步骤四:调用er进行分类并且评估
clf = tree.DecisionTreeClassifier(criterion="entropy")clf = clf.fit(Xtrain, Ytrain)score = clf.score(Xtest, Ytest)
步骤五:制图
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']import graphvizdot_data = http://www.kingceram.com/post/tree.export_graphviz(clf,feature_names = feature_name,class_names = ["琴酒","雪梨","贝尔摩德"],filled=True ,rounded=True)#filled:颜色,深度越深越纯 ;rounded:轮廓graph = graphviz.Source(dot_data)

ccc-sklearn-1-决策树

文章插图
步骤六:查看特征的重要性
clf.feature_importances_
说明:
决策树在每次分枝时,不从使用全部特征,而是随机选取一部分特征,从中选取不纯度相关指标最优的作为分枝用的节点 。所以即使每次划分的数据集合训练集一样,最后的结果还是不同
5.决策树中的其他参数
&
:用来设置分枝中的随机模式的参数,默认None,在高维度时随机性会表现更明显,低维度的数据(比如鸢尾花数据集),随机性几乎不会显现 。输入任意整数,会一直长出同一棵树,让模型稳定下来 。
:用来控制决策树中的随机选项的,有两种输入值,输入”best",决策树在分枝时虽然随机,但是还是会优先选择更重要的特征进行分枝,输入“",决策树在分枝时会更加随机,树会因为含有更多的不必要信息而更深更大,并因这些不必要信息而降低对训练集的拟合 。这是防止过拟合的一种方式 。