1、定义
决策树是一种非参数的有监督学习方法,它能从一系列有特征和标签的数据中总结出决策规则,
并用树状图的结构来呈现这些规则,已解决分类和回归问题。
非参数-
不限制参数的结构和类型,适用于各种各样的数据。
自我理解:
决策树就是 一种分类方法,即如何将数据进行分类和回归的规则。
但是如何依据数据总结出最合适的规则,又是需要研究的。
2、决策树算法的核心是要解决两个问题:
①如何从数据表中找出最佳节点和最佳分支
②如何让决策树停止生产,防止过拟合
3、sklearn中的决策树模块
模块 sklearn.tree
tree.DecisionTreeclassifier --分类树
tree.DecisionTreeRegressor --回归树
tree.export_graphviz --将生成的决策树导出为DOT格式,画图专用
4、sklearn建模的基本流程(对所模型都通用)
① 实例化:建立评估模型对象
-实例化式用到的参数
②通过模型接口训练模型
数据属性和数据接口 (fit)
③通过模型接口提取需要的信息
数据属性和数据接口
例如这个流程下,分类树对应的代码是:
from sklearn import tree
clf=tree.DecisionTreeclassifier() #实例化
clf=clf.fit(x_train,y_train) #用训练数据集训练模型 ,fit 接口
#几乎使用所有模型
result=clf.score(x_test,y_test) #打入测试集,从接口中调用需要的信息
4-2 分类树的参数(重要的8个参数)
① criterion
为了将表格转化为一棵树,决策树需要找出最佳节点和最佳分支方法,对于分类来
说,衡量这个最佳的指标叫做“不纯度”,不纯低越低,决策树对训练集拟合的效果
越好,同一棵树上,叶子结点的不纯度肯定是最低的。
criterion用来决定不纯度的计算方法的,主要有两种:
1) 'entropy' ,使用信息熵
2) 'gini' 使用基尼系数
信息熵和基尼系数代表两种数学计算方法,sklearn内置的计算过程,无法干涉。
实际过程中,两种系数的效果基本相同。
creterion 一般默认为 基尼系数,但信息熵对不纯度更敏感,数分支更精细。
当拟合效果不够的时候,可以两个都试试。
4-3 决策树基本流程总结:
计算全部特征的不纯度指标->选取不纯度指标最有的特征来分支-> 在第一个特征的分支下计算全部特征的不纯度指标-> 选取不纯度指标最优的特征继续分…
具体实践如下:
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
wine=load_wine() #加载内置的红酒数据
wine.feature_names #特征的名字查看
wine.target_names #标签的名字
Xtrain,Xtest,Ytrain,Ytest=train_test_split(wine.data,wine.target,test_size=0.3)
# wine_data 数据 wine_target 标签 test_size=0.3 表示将数据中的30%做测试集,其余做训练集
#决策树三步骤
clf=tree.DecisionTreeClassifier(criterion='entropy')
clf=clf.fit(Xtrain,Ytrain)
score=clf.score(Xtest,Ytest)
score #值表是预测的准确度
#绘制树
import graphviz
dot_data=tree.export_graphviz(clf #训练好的模型
,feature_names=feature_name
,class_names=['茅台','五粮液','黄台']
,filled=True
,rounded=True
)
graph=graphviz.Source(dot_data)