本文详细介绍了C4.5决策树算法,包括与ID3的改进点、算法流程、代码实现分析,以及如何进行训练和样本分类。通过信息增益率选择属性、剪枝和处理非离散数据,C4.5算法在分类任务中表现出色。
摘要由CSDN通过智能技术生成
1. 算法概述
C4.5
,是机器学习算法中的另一个分类决策树算法,它是决策树
(
决策树也就是做决策的节点间的组织方式像一棵树,其实是一个倒树
)
核心算法,是相对于
ID3
算法的改进,主要改进点有:
1.
用信息增益率来选择属性。
C4.5
克服了
ID3
用信息增益选择属性时偏向选择取值多的属性的不足。
2.
在树构造过程中进行剪枝。
3.
对非离散数据也能处理。
4.
能够对不完整数据进行处理。
2. 算法过程
统计好样本集
S
,属性集
A
,分别求出属性集中每个属性的信息增益率,选中增益率最大的属性
P
,假设
P
总有
n
种情况的取值(连续变量要离散化),那么分别统计好第
i
种情况时样本集
Si
和除去
P
的属性集
Pi
,递归生成相对应的子树。
2.1
主要步骤
1
)
读取文件信息,统计数目
2
)
建立决策树
如果样本集为空,则生成一个信息数目都为
0
的树节点返回
如果样本均为同一类别,则生成一个叶子节点返回
计算节点正负样本的数目
如果属性值只有那个类别的属性,则生成一个叶子节点,并赋值类型索引
如果以上都不是,则选择一个增益率最大的属性(连续属性要用增益率离散化),按那个属性的取值情况从新定义样本集和属性集,建造相关子树
3
)
事后剪枝(采用悲观错误率估算)
4
)
输出决策树
5
)
移除决策时
3. 算法实现分析
3.1 训练分类器
public
void
buildClassifier(Instances instances)
throws
Exception {
ModelSelectionmodSelection;
if
(
m_binarySplits
)
modSelection=
new
BinC45ModelSelection(
m_minNumObj
, instances,
m_useMDLcorrection
);
modSelection=
new
C45ModelSelection(
m_minNumObj
, instances,
m_useMDLcorrection
);
if
(!
m_reducedErrorPruning
)
m_root
=
new
C45PruneableClassifierTree(modSelection, !
m_unpruned
,
m_CF
,
m_subtreeRaising
, !
m_noCleanup
,
m_collapseTree
);
m_root
=
new
PruneableClassifierTree(modSelection, !
m_unpruned
,
m_numFolds
, !
m_noCleanup
,
m_Seed
);
m_root
.
buildClassifier
(instances);
第一个if判断是否对nominal属性进行二分裂,第二个if是判断是否对tree进行剪枝。
modSelection后面会被用于选择足有的分裂模型。
m_root是该树的根节点。
上面比较重要的是最后一句m_root.buildClassifier(instances);用于在各节点中构建分类器。下面我们看看其代码:
(C45PruneableClassifierTree.java)
public
void
buildClassifier(Instances data)
throws
Exception {
buildTree(data,
m_subtreeRaising
);
if
(
m_collapseTheTree
){
collapse();
if
(
m_pruneTheTree
) {
prune();
if
(
m_cleanup
) {
cleanup(
new
Instances(data, 0));
过程为:首选见创建树然后根据需要对数进行节点折叠、剪枝、清理内存空间等。下面我们依次分析:
3.1.1 创建树buildTree (ClassifierTree.java)
public
void
buildTree(Instances data,
boolean
keepData)
throws
Exception {
Instances [] localInstances;
if
(keepData) {
m_train
= data;
m_test
=
null
;
m_isLeaf
=
false
;
m_isEmpty
=
false
;
m_sons
=
null
;
m_localModel
=
m_toSelectModel
.selectModel(data); //选择最优的分裂模型
if
(
m_localModel
.numSubsets()> 1) {
localInstances =
m_localModel
.split(data); //对训练数据进行分组
data =
null
;
m_sons
=
new
ClassifierTree [
m_localModel
.numSubsets()]; //分配子树
for
(
int
i = 0; i <
c4
.5算法是ID3算法的改进,它使用了信息增益率来选择属性,克服使用信息增益来选择属性时偏向选择值多的属性的不足。信息增益率定义为其中Gain(S,A)与ID3算法中的信息增益相同,而分类信息SplitInfo(S,A)代表了按照属性A分裂样本集S的广度和均匀性。其中,Si到Sc是c个属性不同的值的属性A分割S而成的c个样本子集。
C4
.5既可以处理离散型描述属性,也可以处理连续性描述属性。在...
用
WEKA
进行数据挖掘,第 2 部分
weka
算法参数整理
文章目录1 算法原理1.1 计算类别信息熵1.2 计算每个属性的信息熵1.3 计算信息增益1.4 计算属性分裂信息度量1.5 计算信息增益率2
weka
上的实现2.1
WEKA
数据集2.2 在
WEKA
内进行分类
1 算法原理
首先,
C4
.5是
决策树
算法的一种。
决策树
算法作为一种分类算法,...
这篇文章中我会通过几个例子向大家介绍一些
weka
中经典的数据挖掘算法和评估算法的手段。
J4.8
决策树
算法
在预处理标签页 点击 open file ,选择
Weka
安装目录下 data 文件夹中的 weather.numberic.arff 。(在这个目录中有很多经典的样本)
进入
分类器
标签,点击 Choose 按钮,开始选择
分类器
算法。在弹出的树状目录中找到 trees 节点...
1、
weka
来源
WEKA
的全名是怀卡托智能
分析
环境(Waikato Environment for Knowledge Analysis),同时
weka
也是新西兰的一种鸟名,而
WEKA
的主要开发者来自新西兰。
WEKA
作为一个公开的数据挖掘工作平台,集合了大量能承担数据挖掘任务的机器学习算法,包括对数据进行预处理,分类,回归、聚类、关联规则以及在新的交互式界面上的可视化。
2、...
1
决策树
算法框架1.1
决策树
主函数
决策树
主函数本质是一个递归函数,主要功能是按照某种规则生长出
决策树
的各个分支节点,并根据终止条件结束算法。
主函数功能:
(1)输入分类的数据集和类别标签。
(2)根据某种分类规则得到最优的划分特征,并创建特征的划分节点——计算最优特征子函数。
(3)按照该特征取值划分数据集为若干部分——划分数据集子函数。
Weka
是Waikato大学开发的数据挖掘系统,使用Java语言实现。提供了对任意数据集的数据预处理预计算法性能评估的方法,具有很强的扩展型和兼容性。用户可以根据具体需要将个性化的算法封装进系统,达到数据处理及算法性能评估的目的。
Weka
具有多种数据处理功能,支持图形界面以及命令行方式的使用。同时
Weka
也提供了可以访问的API通过程序接口来调用。
J48是
WEKA
中的一个
分类器
,它是一个基于
C4
.5算法的
决策树
分类器
。J48算法的基本思想是根据训练数据构建一棵
决策树
,将数据分成不同的类别。在分类时,将测试数据从根节点开始向下遍历
决策树
,直到到达一个叶子节点,该叶子节点就是测试数据所属的类别。
J48算法的优点是能够处理大规模的数据集,同时也能够处理连续和离散属性。此外,J48算法还具有可解释性强、易于理解等特点。
然而,J48算法也存在一些缺点,如容易过拟合、对噪声敏感等。因此,在使用J48算法时需要注意数据预处理和调参等问题,以提高算法的性能。
StarOldAccount:
Spark Softmax
zengjiancang:
Spark Softmax
liangliang8086
Spark Softmax
z8596300: