sklearn入门——分类树及其剪枝参数调优

# 1.sklearn.datasets里面包含大量的数据和数据集,load_wine就是其中的一个数据集
# 2.sklearn.model_selction包含训练集测试集划分的函数train_test_split
# 3.criterion:确定不纯度的计算方法
# 4.random_state,splitter确定模型的随机性,前者的值可以随便写,后者值为best和random
# 5.max_depth:确定树最大的层数
# 6.min_samples_leaf:当其值为10时,父节点下的每一个子节点的值都要满足10,
# 否则该父节点下的所有子节点将被剪掉,但sklearn会自动调整,使其满足条件而不被剪掉
# 7.min_samples_split:当其值设为20时,只有当节点的值满足20才会分支
# 8.fit:训练接口,对训练数据进行训练
# 9.score:对测试数据进行测试并得出测试结果
# 9.import graphviz:用来画图的包
# 10.fiiled:把划分的书的节点填充颜色
# 11.rounded:使节点的外部轮廓为半圆形

#分类树:导入相关包
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
wine=load_wine()
#train_test_split
#建立模型
Xtrain,Xtest,Ytrain,Ytest=train_test_split(wine.data,wine.target,test_size=0.3)
clf=tree.DecisionTreeClassifier(criterion="entropy"
                               ,random_state=30
                               #,splitter="random"
                               #,max_depth=5
                              # ,min_samples_leaf=20
                               #,min_samples_split=29
)
clf=clf.fit(Xtrain,Ytrain) score=clf.score(Xtest,Ytest) score #画一棵树 import graphviz feature_name = ['酒精','苹果酸','','灰的碱性','','总酚' ,'类黄酮','非黄烷类酚类','花青素','颜 色强度','色调','稀释葡萄酒','脯氨酸'] 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

生成的决策树:

 

1.查看wine数据 

 

 

2.查看数据:wine.data

 

 3.查看wine的target数据

 

 4.导入pandas,把数据data和target连接成一个表

import pandas as pd
pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)

 

 

5.查看标签的名字:wine.target_names

 

 6.查看特征的名字:wine.feature_names

 

 7.查看数据data的大小,维度:178行13列

wine.data.shape

 

 8.查看target_names的结构

 

 9.查看特征名:wine.feature_names

 

 10.导入feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚'

,'类黄酮','非黄烷类酚类','花青素','颜 色强度','色调','od280/od315稀释葡萄酒','脯氨酸']

 

 11.查看每一个节点在树的划分中起到的重要性

 

 12.把用到的节点与其重要性连接起来

 

13.查看训练和测试的得分:

 

 

#确定最优的剪枝参数:使用超参数曲线 #确定最优的剪枝参数:使用超参数曲线
#确定最优的剪枝参数:使用超参数曲线 #确定最优的剪枝参数:使用超参数曲线
#pyplot:用来画图
#plt.legend():显示图列 ---max_depth
#plt.show:显示图片
import matplotlib.pyplot as plt
test=[]
for i in range(10):
    clf=tree.DecisionTreeClassifier(criterion="entropy"
                                   ,max_depth=i+1
                                   ,random_state=30
                                   ,splitter="random")
    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()

 

apply返回每个测试样本所在的叶子节点的索引 

 predict返回每个测试样本的分类/回归结果 

 

posted @ 2021-06-01 17:03  倾尽年华  阅读(613)  评论(2编辑  收藏  举报