sklearn机器学习之决策树
Posted 柳小葱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sklearn机器学习之决策树相关的知识,希望对你有一定的参考价值。
🐖上次学习了sklearn中的线性回归API有兴趣的同学可以查看下面的链接👇:
- 线性回归模型: sklearn机器学习之线性回归模型.
- 决策树概念: 决策树详解.
🌌今天我们要学习的内容是决策树,决策树是概率模型,主要有ID3、C4.5和CART树,sklearn中只有ID3和CART树,决策树是很非常重要的分类和回归算法,以及衍生出来的集成算法都是很重要的算法。
1.决策树的API
首先介绍决策树的API,树的种类由criterion参数决定
from sklearn.tree import DecisionTreeClassifier
有关的参数可以参考文章
决策树的参数: 决策树API详解.
2.决策树实例
我们使用sklearn中红酒数据集来进行决策树的分类任务。说明一下,红酒数据集有13个特征,178行数据,3类数据。
导入数据
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
#导入tree模型和数据集加载工具
from sklearn import tree,datasets
#导入数据拆分工具
from sklearn.model_selection import train_test_split
#d导入数据集
wine=datasets.load_wine()
#只读取数据集的前两个特征
x=wine.data[:,:2]
y=wine.target
#将数据拆分成训练集和测试集
x_train,x_test,y_train,y_test=train_test_split(x,y)
决策树模型
#设置决策树分类器最大深度为1
clf=tree.DecisionTreeClassifier(max_depth=1)
#拟合数据
clf=clf.fit(x_train,y_train)
结果展示了该模型的参数:
看看分类效果
cmap_light=ListedColormap(["#FFAAAA","#AAFFAA","#AAAAFF"])
cmap_bold=ListedColormap(["#FF0000","#00FF00","#0000FF"])
#用X的两个特征作为X,Y轴画图
x_min,x_max=x_train[:,0].min()-1,x_train[:,0].max()+1
y_min,y_max=x_train[:,1].min()-1,x_train[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))
z=clf.predict(np.c_[xx.ravel(),yy.ravel()])
#给每个分类中的样本分配不同的颜色
z=z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,z,cmap=cmap_light)
#用散点图把样本画出来
plt.scatter(x[:,0],x[:,1],c=y,cmap=cmap_bold,edgecolor="k",s=20)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifier:(max_depth=1)")
plt.show()
一层深度的决策树效果很差:大家可以设置max_depth参数决定决策树的深度。
3.保存决策树模型
使用graphviz包可以保存决策树模型
import graphviz
#导入接口
from sklearn.tree import export_graphviz
#选择最大深度3的分类模型
export_graphviz(clf,out_file="C:\\\\Users\\\\Administrator\\\\Desktop\\\\资料\\\\wine.dot",class_names=wine.target_names,feature_names=wine.feature_names[:2],impurity=False,filled=True)
#打开一个dot文件
with open("C:\\\\Users\\\\Administrator\\\\Desktop\\\\资料\\\\wine.dot") as f:
dot_graph=f.read()
#显示dot文件图像
graphviz.Source(dot_graph)
4.随机森林
决策树的API
#随机森林
from sklearn.ensemble import RandomForestClassifier
随机森林在红酒上的分类
#随机森林
from sklearn.ensemble import RandomForestClassifier
#导入红酒数据集
wine=datasets.load_wine()
#选择前两个特征
#只读取数据集的前两个特征
x=wine.data[:,:2]
y=wine.target
#将数据拆分成训练集和测试集
x_train,x_test,y_train,y_test=train_test_split(x,y)
#构建模型6棵树
forest=RandomForestClassifier(n_estimators=6,random_state=3)
#使用模型拟合数据
forest=forest.fit(x_train,y_train)
forest
结果如下:bootstrap代表有放回抽样
看看分类效果
cmap_light=ListedColormap(["#FFAAAA","#AAFFAA","#AAAAFF"])
cmap_bold=ListedColormap(["#FF0000","#00FF00","#0000FF"])
#用X的两个特征作为X,Y轴画图
x_min,x_max=x_train[:,0].min()-1,x_train[:,0].max()+1
y_min,y_max=x_train[:,1].min()-1,x_train[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))
z=forest.predict(np.c_[xx.ravel(),yy.ravel()])
#给每个分类中的样本分配不同的颜色
z=z.reshape(xx.shape)
plt.figure()
plt.pcolormesh(xx,yy,z,cmap=cmap_light)
#用散点图把样本画出来
plt.scatter(x[:,0],x[:,1],c=y,cmap=cmap_bold,edgecolor="k",s=20)
plt.xlim(xx.min(),xx.max())
plt.ylim(yy.min(),yy.max())
plt.title("Classifier:(max_depth=1)")
plt.show()
参考资料
《深入浅出python机器学习》
《统计学习方法》
以上是关于sklearn机器学习之决策树的主要内容,如果未能解决你的问题,请参考以下文章