模型----监督学习中的分类算法
决策树算法的思路:
利用树的结构,将数据集中的特征(属性)划分为树中的分支节点
数据集中类别标签对应树的叶节点。
构建决策树的三要素:
1.特征选择----信息熵或信息增益gini系数来选择特征
2.决策树的生成---ID3算法(信息增益) C4.5算法(gini系数)
3.决策树的剪枝---针对决策树产生过拟合
---两种剪枝方式:先剪枝、后剪枝
信息熵:信息的不确定性度量,熵越大不确定性越大,通常每种可能性相同的时候,熵最大的
结论:在构建决策树的过程中,希望选择信息熵比较小的,因为信息熵小对应的信息纯度越高
信息的不确定性越小,确定性越大
决策树建树方法:
第一种方法:基于规则的就建树
1.明确是哪个属性或特征是根节点或叶子节点----根据顺序选取
2.随机选择根节点的特征或叶子结点的特征
3.得到叶子结点的特征
第二种建树的方法:基于信息熵和信息增益建立决策树
信息熵:对信息的不确定性度量
如果每一事件发生的概率都相等(均匀分布),此时熵最大
熵最大,不确定性越大,确定性越小,信息纯度越低
熵越小,不确定性越小,确定性越大,信息纯度越高
如何根据熵建立一颗决策树?
---选择熵比较小的特征或者属性作为分支节点
---原因:因为熵小,信息纯度越高
---定义:事件的不确定性应该是单个取值的不确定性的期望 ,也叫作信息熵,即
上述若对数的底数取值为 2,就是平常所说的信息单位 bit(比特)
ID3算法:
信息增益=总体的信息熵-以某一个特征作为划分标准的信息熵
计算公式:Gain(A)=I(parent)-H(A)
总体信息熵不会改变的
目的:选择特征或属性进行节点划分
选取方式:选择信息增益比较大的作为分支节点
作用:通过节点来划分树结构获取信息量
例:Gain(age)>Gian(income)>Gain(sex)
选择方式:优先选择年龄、收入、性别
算法原理:
输入:数据集
输出:决策树
算法:
1.计算信息增益,选择信息增益比较大的特征作为当前的划分节点
2.在已有的特征集合中去掉已经选择过的特征
3.继续在剩余的节点中计算信息增益比较大的,作为下一个划分节点
4.直到所有的节点都划分为叶子节点
注意:计算信息增益时候,将所有特征或属性的信息增益计算出来了,只需要排序和选择就可以。
迭代建树的停止条件:
1.给定节点所有的样本属于同一个类别
2.没有剩余的属性用于划分,只需要通过多数表决的方法决定剩余节点
3.给定一个信息增益的阈值,通过该阈值判断是否迭代停止
给定迭代次数:在python的sklearn中下属三种情况都是参数,可以动态调整
max_depth 树的深度
min_sample_leaf根据叶子结点所包含的元素个数决定是否迭代停止
min_sample_split根据分支节点含有的样本数决定是否迭代停止
C4.5算法:
在ID3算法的基础上增加了信息增益率作为划分节点的依据
优势:规避掉信息增益比较大或小的时候会倾向于属性多的情形
对连续值处理非常好的
对决策树通过剪枝减小复杂度(过拟合)
能够对不完整数据进行处理
CART树算法:选择划分的节点是根据gini系数划分
在Python的sklearn中默认使用gini系数作为划分的准则
属于一种贪心算法
决策树算法极易产生过拟合的情况:
解决办法:剪枝技术
分类技术:先剪枝(预剪枝)和后剪枝
为什么需要进行剪枝?
答:决策树很容易产生过拟合,需要进行剪枝降低决策树的复杂程度
根据剪枝前后的分类误差率的变化决定是否进行剪枝
先剪枝:
实际生产中比较常见的一种手段。
在建立决策树的过程中进行剪枝
通过选择不同的信息不纯度的阈值(信息增益)
(1)如果阈值设置的过大,容易产生欠拟合(决策树没有生产完全)
(2)如果阈值设置的过小,容易产生过拟合(近似于未剪枝技术)
选取的过程更多的是靠经验
后剪枝:
决策树已经形成之后,进行剪枝的一种技术
如果一个节点能够替换一颗子树,根据分类的误差率时候减少来进行评判
通过充分生长的一棵树中自底向上的进行树的剪枝
(1)用新的叶子结点替换原来的子树
新的叶子节点的类别根据数据集中少数服从多数的原则选取
(2)用子树中最常见的分支节点代替子树
**如何评判剪枝效果?MEP最小错误率剪枝技术
**选择子树或节点的时候,需要产生若干颗子树或节点计算所有子树或节点的错误率,从中选择错误率较小的那个量
两种剪枝技术如何选择?
现在工业界中通常选择先剪枝技术,计算复杂度较小,容易实现
在理论上如果模型的泛化性能好的话,建议采用后剪枝技术,但是会带来复杂度的提升
决策树的特点:
优点:直观、便于理解
执行效率高,执行一次可以多次使用
缺点:对连续值处理不好(Cart树中提供了二分的方法)
实际分类中往往只能处理一个字段