决策树专题01

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课堂,直播课后的个人笔记总结,仅供参考,有不一样的想法的大佬们,请辩证地观看,如果有问题可以在评论区指出我再订正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值