目录
1、概念
2 决策树生成方法
3、决策树绘图方法
4、案例代码示例
决策树(DEcision Tree)
他通过对训练样本的学习,并建立分类规则,对新样本数据进行分类,属于有监督学习
决策树也是一种多功能的机器学习算法,它可以
实现分类和回归任务,甚至是多输出任务。
优点:
决策树易于理解和实现
决策树可处理数值型和非数值型数据
# dtModel=DecisionTreeClassifier(max_leaf_nodes=None)
max_leaf_nodes 最大的叶子节点数
## 训练模型
dtMOdel.fit(featureData,targetData)
featuereData 属性数据
targetData 目标数据
### dtModel.Predict(featureData)
featureData 属性数据
sKlearn.tree.export_graphviz(...)
dtModel 决策树模型
out_file 图形数据的输出路径
class_names 目标属性名称,中文
feature_names 特征属性名称 中文
filled=Ture 是否使用颜色填充
rounded=TRUE 边框是否采用圆角边框
special_characters 是否有特殊字符
升学意愿调查——
列 备注
studentID 学生ID
GEnder 性别
ParentIncome 父母亲收入
IQ IQ
parentEncouragement 父母亲是否鼓励
ColegePlans 是否打算上大学
目的: 想换出决策树的图形,用于指导人员判断某个学生是否具有升学意愿
import pandas;
data = pandas.read_csv('D:\\DATA\\pycase\\number2\\5.3\\data.csv')
# 将虚拟变量转换为数值变量,在这里有性别和是否推荐升学
dummyColumns=["Gender","ParentEncouragement"]
for column in dummyColumns:
data[column]=data[column].astype('category')
dummiesData=pandas.get_dummies(
data,
columns=dummyColumns,
prefix=dummyColumns,
prefix_sep="=",
drop_first=True
)
# 列表展示
dummiesData.columns
# 挑选出可以建模的列
fData=dummiesData[[
'ParentIncome','IQ','Gender=Male',
'ParentEncouragement=Not Encouraged'
]]
# 挑选出目标变量
tData=dummiesData['CollegePlans']
# 导入决策树方法
from sklearn.tree import DecisionTreeClassifier
# 设置叶子节点的数据为8,太大的话会导致过拟合,8表示的是叶子最下端的叶子数量
dtModel=DecisionTreeClassifier(max_leaf_nodes=8)
# 导入十折交叉验证方法,得出模型的最终分数
from sklearn.model_selection import cross_val_score
cross_val_score(
dtModel,
fData,
tData,
cv=10
)
# 进行模型的训练
dtModel.fit(fData,tData)
from sklearn.tree import export_graphviz
# 需要绘图的dot文件
with open('D:\\DATA\\pycase\\number2\\5.3\\data.dot','w') as f:
f=export_graphviz(dtModel,out_file=f)
# 在cmd客户端进行dote命令绘图,切换到dot文件路径
# dot -Tpng data.dot -o loan_tree.png #png
# dot -Tpdf data.dot -o loan_tree.pdf
# 通过pypdot进行运行和绘制
import pydot
from sklearn.externals.six import StringIO
dot_data=StringIO()
export_graphviz(
dtModel,
out_file=dot_data,
class_names=["不计划","计划"],
feature_names=["父母收入","智商","性别=男","父母鼓励=不鼓励"],
filled=True,
rounded=True,
special_characters=True
)
# 将dot_data 转换为图形变量
graph=pydot.graph_from_dot_data(dot_data.getvalue())
#设置字体格式
graph.get_node("node")[0].set_fontname("Microsoft YaHei")
# 导出图片
graph.write_png('D:\\DATA\\pycase\\number2\\5.3\\tree.png')