sklearn的基本建模流程:
1. 实例化,建立评估模型对象
2. 通过模型接口训练模型
3. 通过模型接口提取需要的信息
from sklearn import tree
clf = tree.DecisionTreeClassifier() #实例化
clf = clf.fit(X_train,y_train) #用训练集数据训练模型
result = clf.score(X_test,y_test) #导入测试集,从接口调用需要的信息
决策树
1. 分类树
class sklearn.tree. DecisionTreeClassifier ( criterion=’gini’ , splitter=’best’ , max_depth=None ,min_samples_split=2 , min_samples_leaf=1 , min_weight_fraction_leaf=0.0 , max_features=None , random_state=None , max_leaf_nodes=None , min_impurity_decrease=0.0 , min_impurity_split=None ,class_weight=None , presort=False )
1.1. 模块:sklearn.tree
from sklearn import tree
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
1.2. 决策树的建立(以load_wine数据集为例)
x_train,x_test,y_train,y_test=train_test_split(wine.data,wine.target,test_size=0.3)
##实例化
clf = tree.DecisionTreeClassifier(criterion="entropy"
,random_state=30
,splitter="random")
clf = clf.fit(x_train,y_train)
score = clf.score(x_test,y_test)
##可视化
import graphviz
dot_data = tree.export_graphviz(clf
,feature_names=wine.feature_names
,class_names=["琴酒","雪莉","贝尔莫德"]
,filled=True,rounded=True)
graph = graphviz.Source(dot_data)
graph
##查看特征的贡献
clf.feature_importances_
##把特征进行匹配
[*zip(feature_name,clf.feature_importances_)]
1.3. 重要参数
1.3.1 criterion
用来决定决策树的不纯度的衡量指标,有两种取值
entropy:信息熵 / 信息增益
gini :基尼系数
默认情况下会选择基尼系数
信息熵计算会慢一点,对不纯度更敏感,用信息熵为标准时生成的决策树会更精细,更贴近训练集,也更容易过拟合。主要取决于数据。数据噪音很大的时候用gini系数。
1.3.2 random_state
决策树内部实际上自带有随机化的过程,在建立决策树的时候,并不会选择全部的特征进行建树,而是会选择其中的一部分,因此需要通过random_state规定这个随机过程的方式。
可以通过设置random_state的参数进行多次测试,选出score最大的树。
1.3.3 splitter
也是用来控制决策树中的随机选项的,有两个值
"best":选择更重要的特征进行分枝
"random":随机进行分枝
用random的时候树会更深,更加随机,也是对抗过拟合的一种方式。
1.3.4 剪枝参数---核心问题
1. max_depth : 限制树的最大深度,建议从3开始尝试
2. min_samples_leaf & min_samples_split
min_samples_leaf: 规定每个叶子节点必须含有的最少样本数,那么如果分出来的节点达不到最小样本数要求,就不会进行划分。
例: **如在此树中,从上一个节点(49个样本)到下面分节点(左:46个样本,右:3个样本)的过程中,如果设置min_samples_leaf为5,则右边的分枝无法满足条件。
min_samples_split: 规定所有训练数据的最少样本数,即中间节点包含的最少样本的数量。
3. max_features & min_impurity_decrease
max_features:强制减少可以使用的特征数量,但这样的方法会限制决策树对数据的学习,因为强行减少了数据的信息量。
min_impurity_decrease:限制信息熵增益,即如果分层后的信息熵增益不够大,就放弃分类,也是提前结束分类的方法。
1.3.5 目标权重参数
用来解决样本不平衡的问题:class_weight & min_weight_fraction_leaf
1.3.6 如何确定最优的剪枝参数?
使用超参数曲线的方法。
可以使用matplotlib通过循环的方法画曲线。
1.4 重要属性和接口
主要用的有四个:fit score apply predict
fit: 模型训练接口
score: 分类效果的评判指标
apply:输入为x_test,即clf.apply(x_test),返回每个样本对应的叶节点的索引
predict: 输入为x_test,即clf.predict(x_test),返回对于每个样本的预测结果
2. 回归树
class sklearn.tree.DecisionTreeRegressor ( criterion=’mse’ , splitter=’best’ , max_depth=None , min_samples_split=2 , min_samples_leaf=1 , min_weight_fraction_leaf=0.0 , max_features=None , random_state=None , max_leaf_nodes=None , min_impurity_decrease=0.0 , min_impurity_split=None , presort=False )