基于weka的数据库挖掘➖分类方法决策树分类
关于作者
- 作者介绍
🍓 博客主页:作者主页<br> 🍓 简介:JAVA领域优质创作者🥇、一名初入职场小白🎓、曾在校期间参加各种省赛、国赛,斩获一系列荣誉🏆<br> 🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨💻
决策树思想的来源非常朴素,程序设计中的条件分支结构就是if-else结构,最早的决策树就是利用这类结构分割数据的一种分类学习方法
决策树算法思想:
- 是一种树形结构,本质是一颗由多个判断节点组成的树
- 其中每个内部节点表示一个属性上的判断
- 每个分支代表一个判断结果的输出
- 最后每个叶节点代表一种分类结果
概念
要学习决策树首先需要明白以下关键字
熵 Entropy :系统越有序,熵值越低;系统越混乱或者分散,熵值越高
信息熵 informationentropy:度量样本集合纯度最常用的一种指标 假定当前样本集合 D 中第 类样本所占的比例为 pk(k = 1,2,...,|y|)
则 D 的信息熵定义为( (log是以2为底,lg是以10为底)
交叉熵 :用来衡量两个概率分布之间差异的度量指标。在分类问题中,我们通常有一个真实的概率分布和一个模型预测的概率分布,交叉熵可以衡量模型预测的分布与真实分布之间的差异。
其中,Σ表示求和符号,x表示所有可能的取值。交叉熵可以理解为对于真实分布p的平均信息量的度量。当两个分布完全相同时,交叉熵达到最小值为0。
相对熵 :(也称为KL散度)衡量了两个概率分布之间的差异。相对熵用于衡量在给定真实分布p的情况下,使用模型分布q来表示这个真实分布的信息损失或失真程度。
其中,Σ表示求和符号,x表示所有可能的取值。相对熵可以理解为真实分布p相对于模型分布q的信息增益(或损失)。当两个分布完全相同时,相对熵为0。
信息增益(ID3)
以某特征划分数据集前后的熵的差值。熵可以表示样本集合的不确定性,熵越大,样本的不确定性就越大。因此可以使用划分前后集合熵的差值来衡量使用当前特征对于样本集合D划分效果的好坏, 信息增益越大,则意味着使用属性 $a$ 来进行划分所获得的"纯度提升"越大
信息增益 = entropy (前) - entropy (后)
信息增益 = 整体信息熵 − 按某个属性划分后的信息熵信息增益 = 整体信息熵 − 按某个属性划分后的信息熵
信息增益率(C4.5)
信息增益准则对可取值数目较多的属性(类型多)有所偏好(信息增益倾向于选择类别多属性进行划分),为减少这种偏好可能带来的不利影响,著名的 C4.5 决策树算法 [Quinlan, 1993J 不直接使用信息增益,而是使用"增益率" (gain ratio) 来选择最优划分属性
增益率:增益率是用前面属性a的信息增益Gain(D, a) 和属性a对应的"固有值"(intrinsic value)
信息增益率 = 属性信息增益 / 属性分裂信息度量
Gini系数 (CART)
基尼值Gini(D):从数据集D中随机抽取两个样本,其类别标记不一致的概率。故,Gini(D)值越小,数据集D的纯度越高。
计算公式: 1 - 每一个类别概率平方的和
基尼指数Gini_index(D):一般,选择使划分后基尼系数最小的属性作为最优化分属性
按照某种分割方式, 分割后的基尼值
具体实现:
1、打开weather.nominal.arff
,切换到classify
页,选择决策树算法 weka-\>classifiers-\>trees-\>J48
,算法参数不变。选择10折交叉验证方法,单击start运行,得出如下结果。
2、再选择使用训练集作为测试数据,如下
单击start运行,得出如下结果
可以看到分类准确率是100%,解释上图矩形框中数据的含义,并思考为什么使用训练数据集进行测试的最终准确率要高。
图中以解释
为什么使用训练数据集进行测试的最终准确率要高?
1、数据集太小的话,如果数据集切分的不均匀,或者说训练集和测试集的分布不均匀
2、在训练期间,Dropout将这些分类器的随机集合切掉,因此,训练准确率将受到影响
3.选中下图矩形框中内容,右键,选择Visualize tree,可生成对应的决策树。
4、使用J48预测未知数据,创建测试数据集如下编辑,名命为weather.nominal.test.arff
5、选择,点击右边的set,打开测试数据集,再点击more option,设置如下
点击ok,再start运行决策树算法,得到如下结果:
注意:
- 特征选择:选择合适的划分特征对算法的性能至关重要。常用的特征选择方法包括信息增益、基尼指数、方差等。
- 剪枝策略:为了避免过拟合,可以采用剪枝策略对构建好的决策树进行修剪,去除一些不必要的节点。
- 处理连续特征:决策树算法通常处理离散特征,对于连续特征,可以采用二分法或其他方法进行离散化处理。
- 处理缺失值:决策树算法对缺失值敏感,需要考虑如何处理缺失值,常见的方法包括填充缺失值或使用缺失值作为一个特殊的取值。