决策树模型
第五章 基于sklearn的决策树
一、什么是决策树?
决策树是一种用于分类和回归的机器学习算法
。它模拟了人类决策的过程,通过一系列的问题和条件判断从输入数据中推断出相应的输出。
1、决策树组成
决策树由一个根节点
、若干个内部节点
和若干个叶节点
组成:
根节点
表示开始
的问题或条件;
内部节点
表示根据特征或条件进行的判断
;
叶节点
表示最终
的分类或回归结果
。
决策树的构建过程是通过选择最优的属性划分数据集
,使得每个子节点包含尽可能纯的数据。
2、决策树的作用
在分类问题
中,决策树可以帮助我们根据特征对数据进行分类;
在回归问题
中,决策树可以帮助我们根据特征预测数据的数值。
决策树算法简单易懂,可解释性强,适用于处理多类别和数值型数据。
二、决策树的python实现
1、引入库
#-*- coding:utf-8 -*-
from sklearn.tree import export_graphviz
from sklearn.tree import DecisionTreeClassifier
import pydot # 引入可视化库
2、导入数据集
本文使用威斯康辛州乳腺癌数据集,数据集包含了威斯康辛州记录的569个病人的乳腺癌恶性/良性(1/0)类别型数据,以及与之对应的30个维度的生理指标数据,适用于二分类问题。
# 乳腺癌数据集
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
# 划分数据集
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(cancer['data'],cancer['target'],random_state=1) # 参数random_state是指随机生成器,1表示函数输出是固定不变的,但填0或不填,每次都会不一样
3、生成决策树
Scikit-learn
涉及决策树生成的函数有:
分类决策树的类对应的是DecisionTreeClassifier
;
回归决策树的类对应的是DecisionTreeRegressor
。
两者的参数定义几乎完全相同,但是意义不全相同。
tree = DecisionTreeClassifier() # 每次生成决策树不同
tree.fit(X_train,y_train)
4、结果测试
print('Train score:{:.3f}'.format(tree.score(X_train,y_train)))
print('Test score:{:.3f}'.format(tree.score(X_test,y_test)))
5、可视化
生成过程可能会报错:
FileNotFoundError: [Errno 2] "dot" not found in path.
可以通过:
1、从官网下载安装合适版本的graphviz:
graphviz下载网址
2、在终端中运行下面一行代码,找到pydot.py
文件路径
python -c "import pydot; print(pydot.__file__)"
用编辑器打开 pydot.py
,利用搜索找到
self.prog = 'dot'
所在位置,将其改为
self.prog = 'dot.exe'
python代码为:
#生成可视化图
export_graphviz(tree,out_file="tree.dot",class_names=['严重','轻微'],feature_names=cancer.feature_names,impurity=False,filled=True)
#展示可视化图
(graph,) = pydot.graph_from_dot_file('tree.dot')
graph.write_png('tree.png')