1 DecisionTreeClassifier 决策树

from sklearn import tree #树模型
from sklearn.datasets import load_wine #可以生成数据集的库 导入数据
from sklearn.model_selection import train_test_split  #训练集和测试集的模块
import pandas as pd
import graphviz

wine=load_wine();
# wine.data 特征 wine.target 标签 ... 如下 
# wine.data_name 特征的名字 wine.data.target 标签的名字 

Xtrain ,Xtest ,Ytrain ,Ytest= train_test_split(wine.data,wine.target,test_size=0.3)
#分出训练集和测试集
#test_size= ___取30%作测试集 70%作训练集
#前面x、y、train、test的顺序不可更改,不然结果不知道会成怎么样

clf = tree.DecisionTreeClassifier(criterion = "gini"
                                 ,random_state=3
                                 ,splitter="best")
clf = clf.fit(Xtrain,Ytrain) #训练模型
score = clf.score(Xtest,Ytest)#使用接口导出我们所需要的分数

#↓把树画出来
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']
dot_data= tree.export_graphviz(clf
                               ,feature_names=feature_name #建好的模型名字
                               ,class_names=['琴酒','雪莉','贝尔摩德']
                               ,filled=True #用颜色来区分不同的酒 颜色越浅 该节点不纯度越高
                               ,rounded=True) #圆角
graph=graphviz.Source(dot_data)

criterion 决定不纯度计算方法

  • “entropy” 信息熵(父节点的信息熵-子节点的信息熵)
  • “gini” 基尼系数

不纯度越低,决策树对训练集的拟合越好

random_state 设置分枝中的随机模式的参数

  • 输入同一整数,会一直生成同一棵树,保持模型的稳定

splitter= “best” / “random”

  • best——优先选择更重要特征放。
  • random——更加随机,树会更深,训练集拟合度会降低,是一种防止过拟合的方法。

过拟合:

  • 模型在训练集上表现良好,在测试集上表现糟糕。即当模型对训练数据有过于优秀的解释性,找出的规则必定是包含训练样本中的噪声
#我们的树对训练集的拟合程度如何?
score_train=clf.score(Xtrain,Ytrain)
score_train
#>>>1.0
#相当于100% 处于一种过拟合的状态

特征重要性

  • 为什么上面只体现出部分特征?
  • 取决于特征重要性,数值越大越重要
clf.feature_importances_
#[*zip(feature_name,clf.feature_importances_)]

剪枝参数

  • 剪枝策略对决策树的影响巨大,正确的策略是优化策略树算法的核心。
  1. max_depth

    限制树的最大深度,超过设定深度的树枝全部剪掉
    运用最广泛的剪枝参数,对高纬度低样本量时非常有效。实际运用时建议先从=3开始,看看拟合效果再决定是否增设深度。

  2. min_sample_leaf & min_sample_split

    一个节点 在分枝后 每个子节点必须 包含至少min_sample_leaf个子节点,否则,分枝不会发生;或者会朝着满足 每个子节点 都包含 min_sample_leaf个样本的方向去发生。
    一般搭配max_depth使用,在回归树有奇效,让模型变光滑。建议从=5开始使用

    min_sample_split限定,一个节点 必须要包含至少 min_sample_split个训练样本,才允许分枝。否则,不分枝。

  3. max_features & min_impurity_decrease

    max_features限制分枝时考虑的特征个数,超过限制个数则会被舍弃,与max_depth异曲同工。用来限制高维度数据的过拟合的修剪参数,但比较暴力,不建议。

    min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生。

2 DecisionTreeRegressor 回归树

无不纯度 连续性变量

  1. mse 均方误差 父节点子节点误差的差额 最小化L2损失
  2. friedman_mse 费尔德曼均方误差
  3. mae 绝对平均误差

总结

七个参数:

  • Criterion
  • 两个随机性相关的参数(random_state、solitter)
  • 四个剪枝参数(max_depth、min_sample_leaf、max_feature、min_impurity_decrease)

一个属性:

  • feature_importances_

四个接口:

  • fit
  • score
  • apply
  • predict
Logo

一站式 AI 云服务平台

更多推荐