决策树
作者:互联网
**
决策树
**
构造和裁枝
构造的过程就是选择什么属性为节点的过程
1.根节点:树的最顶端,最开始的哪个节点
2.内部节点:树中间的节点
3.叶节点:根的最低端,也就是结果
过拟合:决策树训练的太好了,之后过度的苛刻,以至于太过死板
预剪枝:决策树构造的时候进行修剪
后剪枝:决策树创建完毕后再进行修剪,通常从叶节点开始,如果去掉这个节点去决策树影响不大,或者能提高决策树的准确程度,都可以用这个节点的叶节点来替代这个节点
属性作为节点的判断依据有:纯度,信息熵
纯度就是为了将目标变量的分歧变的最小
比如 我10天中有9天吃早餐,我10天中只有2天吃早餐,那么从我每天吃早餐次数的方向来看纯度的话很明显第一个的纯度是大于大二个的
信息熵表示了信息的不确定性,为了计算表示这种信息的不确定性,信息之父香农引入了信息熵的计算方法
假如说我们6天有5天吃早餐,那么我们计算信息熵的方法就可以如上图一样
那么同样,如果六天有三天吃早餐的话,计算方法如上图所示。
我们可以清晰明显地发现,纯度越大的信息熵越小
不纯度
我们在构造决策树时,通常有三种方法去作为判断信息不纯度的指标
信息增益
信息增益率
基尼指数
ID3算法的基础上改进C4.5算法
信息增益就是根节点的信息熵减去所有叶节点的信息熵
信息增益率=信息增益/属性熵
属性有很多值的时候相当于被划分成了很多份,信息增益会增大,但是信息增益率不会有很大的变化
ID3构造决策树容易造成过拟合的情况,在C4.5的时候会在决策树构造完成的时候进行悲观剪枝,来提高决策树的泛化能力,悲观剪枝就通过递归估算每个内部节点的分类错误率来判断是否剪枝,比较剪枝前后的分类错误率来判断是否对其剪枝。这种剪枝方法不再需要一个单独的测试数据集。
离散化处理连续属性
C4.5可以处理连续属性的情况,比如一个属性,我们用高低判断,而这可以取值,并且会有一个C4.5选择具有最高信息增益划分所对应的阙值。
4.处理缺失值
如果数据中有缺失值
我们依旧可以计算出信息增益率并且乘上百分比就是新的信息增益率
ID3算法的特点就是简单,而C4.5的特点就是需要多次扫描,效率较低。
我们在使用数据挖掘工具时会用到它们,python中的sklearn和weka(一个免费的数据挖掘平台)
CART算法
ID3和C4.5可以分成二叉树和多叉树,而CART算法只支持二叉树,但它可以作分类树,也可以做回归树。
我们可以看见,职业不同 性别不同 年龄不同 那么我们就可以称之其为分类树,因为时从数据中的几个分类做选择,如果给定了数据,想要预测这个人的年龄,那就属于回归树。
分类树可以处理离散数据
基尼指数(衡量国家收入差距)
大于0.4说明国家收入悬殊,0.2到0.4之间正常
那么我们就能理解了,基尼指数低说明差异小,不确定程度低。
所以CART算法在构造分类树的时候,会选择基尼系数最小的属性作为划分。
假设t为节点GINI系数就为
CART中的回归树是用来评价“不纯度”,回归树预测得到的结果是连续值,为了统计这种离散程度,我们通常统计差值的绝对值或者方差。
两种节点划分标准,分别对应着两种目标函数的最优化的标准,即用最小绝对偏差,或者使用最小二乘偏差(更常见)。
clf=DecisionTreeClassifier(criterion='entropy')
entropy:信息熵,也就是ID3算法 结果和C4.5相差不大
gini:默认参数,基于基尼系数,属性划分的CART算法
在构造决策树生成器后,我么可以使用fit方法让分类器进行拟合,用predict的方法对新数据进行预测,得到预测的分类结果,也可以用score的方法去得到分类器的准确率
数据探索
输出结果
数据清洗
通过数据探索,我们可以发现有字段的数据有所缺失,数值型我们可以通过它的其他数据的平均值来表示
具体实现
通过数据我们想把其他数据都设置成S就可以运用这种代码去填充nan值
特征选择
通过分析我们可以放弃一些杂乱无章/对结果影响不大的数据。
决策树模型
K折交叉验证
大部分样本进行训练,小部分的样本进行验证。
做K次交叉验证,每次选取K/1的数据进行验证,其余的进行训练,进行K次,取平均值。
关联规则
支持度
某个东西出现次数和总次数的比例,支持度越大,代表这个组合的出现率越大。
置信度
举个例子,如果我买了五次啤酒,在这五次中我有两次买了尿不湿,那么尿不湿对于啤酒的置信度就是2/5.
提升度
提升度(A➡B)=置信度(A➡B)/支持度
用来衡量A的出现对B出现的频率是否有增加。
提升度>1说明有提升
<1说明反而下降了
Apriori的工作原理就是查询频繁项集的原理
频繁项集就是支持度大于等于最小支持度的阙值项集,所以小于最小支持度的项集就是非频繁项集。
项集(itemset)可以是单个商品,也可以是多个商品的集合。
比如说我的最小支持度是0.5,那么小于这个值的的商品是不符合最小支持度的,不属于频繁项集,在这个基础上我们再去进行两两组合,得到下一组,以此筛选
这样我们到最后就只得到了
因为Apriori算法每次都会重新扫描,所以会消耗很多的时间和空间。所以提出了FP-Growth的算法,它的优点是:
1.整个过程只遍历两次数据
2.创建一棵FP树来储存频繁项集。在创建前对不满足最小支持度的项进行删除,减少储存空间
所以在实际工作中,我们常常选用FP-Growth的算法来做频繁项集的数据挖掘。
1.创建项目头
创建项目头的作用其实就是为了提供索引。
这个流程先扫描一遍数据集,对于满足最小支持度的项进行从高到低的排序
链表初始的时候即为空的。
2.构造FP树
FP树的根节点记为NULL节点
整个流程需要再次遍历数据集,对于每一条数据,按照支持度从高到低的数据进行创建节点,节点如果存在,那么计数+1,如果不存在就进行创建。同时在创建的过程中,需要更新项头表的链表。
3.通过FP树挖掘频繁项集
到这里,我们就得到一个储存频繁项集的FP树,以及一个项头表。我们可以通过项头表来挖掘每个项集。
标签:剪枝,信息熵,项集,增益,节点,决策树 来源: https://blog.csdn.net/weixin_51732814/article/details/111056457