1.DecisionTreeClassifier
1、导入需要的算法库和模块
from sklearn import tree
from sklearn.datasets import load_wine #红酒数据集
from sklearn.model_selection import train_test_split
2、探索数据
wine = load_wine()
wine.data.shape #(178, 13)
wine.target #包含[0,1,2]的三标签序列
wine.feature_names #特征矩阵的特征名
wine.target_names #标签序列名
3、分训练集和测试集
Xtrain,Xtest,Ytrain,Ytest = train_test_split(wine.data,wine.target,test_size = 0.3)
Xtrain.shape #(124,13)
Xtest.shape #(54,13)
4、建立模型
clf = tree.DecisionTreeClassifier(criterion = 'entropy')
clf = clf.fit(Xtrain,Ytrain) #对数据进行训练
score = clf.score(Xtest , Ytest) #返回预测的准确度
5、画出一棵决策树
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
import graphviz
dot_data = tree.export_graphviz(clf
,out_file=None
,feature_names = feature_name
,class_names=["鸣人","佐助","小樱"]
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
graph
2.决策分类树的部分属性,参数及接口
1、一个属性
clf.feature_importances_ # 特征重要性
[*zip(feature_name , clf.feature_importances_)]
2、四个接口
A (fit)
clf.fit(Xtrain,Ytrain) #用训练集数据训练模型
B(score)
clf.score(Xtest, Ytest) #返回预测的准确度
C (apply)
clf.apply(Xtest) # 返回每个测试样本所在叶子节点的索引
D (predict)
clf.predict(Xtest) #返回每个测试样本的分类/回归结果
3、八个参数
tree.DecisionTreeClassifier(criterion = 'entropy'
,random_state = 30
,splitter = 'random'
,max_depth = 3
,min_samples_leaf = 10
,min_samples_split= 10
,max_features = 5
,min_impurity_decrease = 0.025
)
A.(criterion)
criterion可以提供两种选择:entropy 和 gini
| gini | 1、默认默认基尼系数 |
2、数据维度很大,噪音很大的使用基尼系数
| entropy | 1、维度低,数据比较清晰的时候,信息熵和基尼系数没区别 |
2、当决策树拟合程度不够时,使用信息熵
B、(random_state)
random_state设置分枝中随机模式的参数,默认为None
C、(splitter)
splitter可以提供两种选择:best 和 random
| best | 1、决策树在分枝时会优选更重要的特征进行分枝|
| random | 1、防止过拟合,分枝时候会更随机 |
D、(max_depth)
max_depth:限制树的最大深度
E、(min_samples_leaf)
min_samples_leaf:节点分枝后的每个子节点必须包含至少min_samples_leaf个训练样本
F、(min_samples_split)
min_samples_split:每个节点必须要包含至少min_samples_split个训练样本
G、(max_features)
max_features:限制分枝时的特征个数,超过限制个数的特征会被舍弃
H、(min_impurity_decrease)
min_impurity_decrease:限制信息增益的大小,信息增益小于设定的数值分枝不会发生
3.DecisionTreeRegressor
1、导入需要的库
import numpy as np
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt
2、创造一条带有噪音的正弦曲线
rng = np.random.RandomState(1) #随机数种子
x = np.sort(5*rng.rand(80,1),axis = 0) #x的取值在0~5之间,x为特征矩阵需要多维数,axis=0排序
y = np.sin(x).ravel()
y[::5] += 3*(0.5 - rng.rand(16))
3、实例化&&训练模型
regr_1 = DecisionTreeRegressor(max_depth= 2)
regr_2 = DecisionTreeRegressor(max_depth= 5)
regr_1.fit(x,y)
regr_2.fit(x,y)
4、测试集导入模型,预测结果
x_test = np.arange(0.0,5.0,0.01)[:,np.newaxis] #newaxis升维操作
y_test1 = regr_1.predict(x_test)
y_test2 = regr_2.predict(x_test)
5、绘制图像
plt.figure()
plt.scatter(x,y
,s= 20 #点的面积
,edgecolors='black'
,c = 'darkorange'
,label = 'data')
plt.plot(x_test,y_test1
,color = 'cornflowerblue'
,label = 'max_depth = 2'
,linewidth = 2)
plt.plot(x_test,y_test2
,color = 'yellowgreen'
,label = 'max_depth = 5'
,linewidth = 2)
plt.xlabel('data')
plt.ylabel('target')
plt.title('Decision Tree Regression')
plt.legend()
plt.show()
4.决策回归树的部分属性,参数及接口
几乎所有的属性,参数及接口和分类树一模一样。
其中参数有一个重要的不同选取
A、(criterion)
criterion可以提供三种选择:mse,friedman_mse 和 mae
| mse | MSE不只是我们的分枝质量衡量标准,也是我们最常用的衡量回归质量的指标 |
|friedman_mse|改进后的均方误差|
| mae | 绝对平均误差MAE |
重点总结:
1、回归树接口score返回的是R的平方,并不是MSE
2、在回归中,我们追求的是,MSE越小越好
3、虽然均方误差永远为正,但sklearn当使用均方误差作为评判标准时,计算'neg_mean_squared_error'
参考:CDA课堂,直播课后的个人笔记总结,仅供参考,有不一样的想法的大佬们,请辩证地观看,如果有问题可以在评论区指出我再订正。