决策树与集成模型

目录

概念

公式

流程

常用划分节点的方法

剪枝步骤

优缺点

处理缺失值、连续值

集成模型

随机森林RF

GBDT

xgboost

lightGBM


概念

依据树形结构,基于特征对实例进行划分。特征最优选择的方法、构建决策树(树的生成)、剪枝。

(属性值离散、分类问题)当前数据集有k类(label)样本,再选择最优特征后,特征值为离散属性的时候,根据每个属性的几个离散属性将数据集划分到每个节点下边。目的是使每个节点下的样本尽量属于同一类别。

公式

  • 信息熵:ent(D) =- \sum_{1}^{k}p_{i}logp_{i}\displaystyle 信息熵越大越混乱

  • 条件熵:H(Y|A) = \sum_{1}^{m} \frac{|D_{i}|}{|D|}ent(D_{i}) ,这里指定为给定属性A作为划分,新的各个数据集的信息熵的期望。

  • 信息增益:G(D,A) = ent(D) - H(Y|A) = ent(D) - \sum_{1}^{m} \frac{|D_{i}|}{|D|}ent(D_{i}) 用A划分数据集后,混乱减少的程度。

流程

决策树划分流程(离散属性、分类问题)

 

常用划分节点的方法

  • 信息增益(ID3):如上,缺点是选择的最优特征结果偏向于属性值较多的特征,分得越细,节点下的样本越统一。
信息增益率
  • 信息增益率(C4.5):在信息增益的基础上,加上了正则化。
  • 基尼指数(CART):classification and regression tree 分类和回归树,分类回归任务都可用。基尼指数的定义可以理解为随机从数据种抽取两个样本,其类别不一致的概率,优化目标是使基尼指数降低。
  • CART分类(二叉树):
  • 基尼值:Gini(D) = \sum_{1}^{k}\sum_{k^{'} \neq k} p_{k}p_{k^{'}} = 1-\sum_{1}^{k}(p_{k})^{2}
  • 基尼指数(相当于条件熵):Gini_(D,A_{a}) = \frac{|D_{1}|}{|D|}Gini(D_{1}) + \frac{|D_{2}|}{|D|}Gini(D_{2}),被特征A的值a分为两部分
  • 计算:对每个特征的每个点,都将样本分为两部分,都计算基尼指数,最后在所有特征中选择最小的值作为划分依据,在子结点中仍可使用该特征作为划分属性。

CART回归: 思想是一致的,只不过采用均方误差作为最优特征的属性值,对每个特征每个值遍历,最为划分属性计算(划分后样本的均值作为最终的Y,于样本中每个值进行均方误差计算)

三种划分方法的比较:

  1. 使用信息增益或者信息增益率时,如果属性为离散的,作为最优特征划分后,则不能出现在之后的划分节点中。如果是连续属性进行离散化后的离散属性,则还可以继续作为最优划分属性。
  2. 使用基尼指数处理分类和回归问题时,需要比较每个特征的每个属性值作为划分点后计算的基尼指数,然后选择最小的作为最优划分点(使用过的在之后仍可以使用),在接下来重复,直到满足条件(回归是设定的阈值,分类是属性划分完、节点都为一类)

剪枝步骤

  • 预剪枝:在决策树生成的时候,使用验证集来衡量当前节点分类是否能带来好的泛化性能,是就分裂,否则不分裂。
  • 后剪枝:在决策树构建完成后,对树自底而上,使用验证集来衡量删除当前子树是否能带来好的泛化性能,是就删除,否则不删除。

优缺点

信息增益适合处理数据比较混乱的,效果比较明显。基尼指数随对较纯的数据集区分清楚。原因是信息增益根据使混乱度降低的程度来选择特征。而基尼指数根据分后的数据纯程度来选择,本质一样,但是出发点不一样,导致有细微的差别。

信息增益偏向于处理离散数据,基尼指数偏向于处理连续数据。

处理缺失值、连续值

  • 删除缺失值、插值、
  • C4.5:Information Gain (Ratio) based Threshold
  • CART:遍历所有输入变量j 和切分点s,根据最小化平方误差准则选取;

特征重要性:

参考  对于单棵树,当前特征作为划分点后,数据集的基尼指数*样本数量-子数据集的基尼指数。最后对每个特征归一化。(信息熵的化,则就是减少的程度)整体来说就是计算为减少混乱的贡献度。

集成模型的化,为每个树计算后的加权平均。

集成模型

bagging与boosting两种集成方式:传送门


随机森林RF

GBDT

xgboost

lightGBM

GDBT更详细(DT,RF,GBDT,xgboost,lightGBM)

 

代码

# -*- coding: utf-8 -*-
"""
Created on Mon Mar 30 14:28:58 2020

@author: dabing
"""
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris

from sklearn.model_selection import GridSearchCV

#加载数据集,x为矩阵float64,y为标签int32(未经过one-hot编码)
X, y = load_iris(return_X_y=True)
#参数,每种可能做5折交叉验证
param_grid = {
        'criterion':['gini','entropy'],
        'max_depth':[1,2,3,6,12,15],
        'min_samples_split':[2,3,4,5]
        }

search_grid = GridSearchCV(DecisionTreeClassifier(),param_grid, scoring='accuracy', cv=5 )

search_grid.fit(X,y)
#最优参数
print(search_grid.cv_results_['mean_test_score'])

print(search_grid.best_params_)
print(search_grid.best_score_)

#最优模型中的特征重要性
best_model = search_grid.best_estimator_
print(best_model.feature_importances_)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值