一、功能实现与样本分析
在数据挖掘领域,能够利用相应的算法对数据集进行训练,即对样本的特征进行分析,从而概括出相同类别的样本之间存在的内在特征联系,进一步对未知类别的样本进行预测,判断出该样本所属的类别。本文实现了利用决策树算法对UCI 机器学习库上的经典wine数据集进行分类的目的。node
为达到相应的分类目的,须要先对数据集样本进行分析。git
表1 wine数据集样本特征github
不用化学成分的含量与酒的所属类别息息相关。表1列举了所选用的wine数据集的特征状况。整个数据集样本包含13个特征,例如Alcohol(酒精度),Malic acid(苹果酸含量)等,这些特征的取值范围见表1所示。算法
表2 wine数据集部分样本表编程
属性机器学习
1学习
属性测试
2优化
属性ui
3
属性
4
属性
5
属性
6
属性
7
属性
8
属性
9
属性
10
属性
11
属性
12
属性
13
类别
14.23
1.71
2.43
15.6
127
2.8
3.06
.28
2.29
5.64
1.04
3.92
1065
1
13.2
1.78
2.14
11.2
100
2.65
2.76
.26
1.28
4.38
1.05
3.4
1050
1
13.16
2.36
2.67
18.6
101
2.8
3.24
.3
2.81
5.68
1.03
3.17
1185
1
14.37
1.95
2.5
16.8
113
3.85
3.49
.24
2.18
7.8
.86
3.45
1480
1
13.24
2.59
2.87
21
118
2.8
2.69
.39
1.82
4.32
1.04
2.93
735
1
14.2
1.76
2.45
15.2
112
3.27
3.39
.34
1.97
6.75
1.05
2.85
1450
1
14.39
1.87
2.45
14.6
96
2.5
2.52
.3
1.98
5.25
1.02
3.58
1290
1
12.37
.94
1.36
10.6
88
1.98
.57
.28
.42
1.95
1.05
1.82
520
2
12.33
1.1
2.28
16
101
2.05
1.09
.63
.41
3.27
1.25
1.67
680
2
12.64
1.36
2.02
16.8
100
2.02
1.41
.53
.62
5.75
.98
1.59
450
2
13.67
1.25
1.92
18
94
2.1
1.79
.32
.73
3.8
1.23
2.46
630
2
12.37
1.13
2.16
19
87
3.5
3.1
.19
1.87
4.45
1.22
2.87
420
2
12.17
1.45
2.53
19
104
1.89
1.75
.45
1.03
2.95
1.45
2.23
355
2
12.37
1.21
2.56
18.1
98
2.42
2.65
.37
2.08
4.6
1.19
2.3
678
2
12.86
1.35
2.32
18
122
1.51
1.25
.21
.94
4.1
.76
1.29
630
3
12.88
2.99
2.4
20
104
1.3
1.22
.24
.83
5.4
.74
1.42
530
3
12.81
2.31
2.4
24
98
1.15
1.09
.27
.83
5.7
.66
1.36
560
3
12.7
3.55
2.36
21.5
106
1.7
1.2
.17
.84
5
.78
1.29
600
3
12.51
1.24
2.25
17.5
85
2
.58
.6
1.25
5.45
.75
1.51
650
3
酒的品种可能属于3种类别。表2展现了wine数据集的部分样本状况。因此,本文的目的就是运用分类算法,挑选相应的特征属性来构造相应的决策树,挖掘wine数据集类别与13个特征之间的关系。并利用所构造的决策树来对测试样本作预测,分析预测偏差,从而证实所构造的决策树的合理性。
二、C4.5算法对UCI wine数据集分类的实现
2.一、C4.5算法分类流程设计
图1 C4.5算法构造决策树流程设计
C4.5算法是决策树分类领域的一种较为经典的算法,图1展现了本次使用C4.5算法构造决策树的算法流程。
首先,从UCI 机器学习库上下载wine数据集,提取样本。这里将全部样本分为训练样本和测试样本两部分。训练样本用来训练C4.5算法,测试样本用来最后测试C4.5算法所构造的决策树的正确性。因此样本预处理部分即是将训练样本与测试样本分开。本文采用的是随机采样的方法来分开训练样本和测试样本。
而后,将随机采样所获得的训练样本用来构造决策树。依次对训练样本的各个特征计算信息增益率,选择具备最大信息增益率的特征做为当前样本的分割特征,对决策树进行分支。
若是决策树分支以后,全部的分割样本都知足预先定义的决策树剪枝策略,则完成对训练样本构造决策树的目标。不然将利用分割样本递归构造决策树,直到全部的分割样本都知足剪枝策略为止。
图2 测试样本类别预测流程图
C4.5算法构造决策树后,须要对决策树的合理性作评估。图2展现了利用所构造的决策树预测测试样本类别流程。经过对决策树的预测偏差做分析,来判别所构造的决策树是否可行。下面将介绍具体的决策树构造过程。
2.二、C4.5算法构造决策树
图3 决策树节点设计
图3显示了决策树节点的全部成员属性。Feature_tosplit用来记录当前节点的分割特征,location记录分割特征的分割界限,value表征的是属于当前节点的特征的取值状况,而child描述按照feature_tosplit和location进行分支后,隶属于当前节点的子节点。须要注意的是,若是当前节点已是叶子节点,则利用child属性来记录当前节点的标签,相应地,将feature_tosplit设置为0,将location和value设置为空。
当属性类型为离散型,无须对数据进行离散化处理;而当属性类型为连续型时,则须要对数据进行离散化处理。为此,节点分裂以前先要对属性的类型作判断。
图4 属性类型判断
图4是对某一维度属性类型判断的相关代码。Thres_disc是为了判断属性是离散类型仍是连续类型而设立的一个阈值,在算法的运行过程当中,设定thres_disc=10。当某一维度属性的全部可能取值状况多于thres_disc时,认为该属性的类型是离散型;不然认为是连续型。
对于连续型的属性,本文利用C4.5算法离散化的核心思想是:将属性A(假设属性A是连续取值)的N个属性值按升序排列;经过二分法将属性A的全部属性值分红两部分(共有N-1种划分方法,二分的阈值为相邻两个属性值的中间值);计算每种划分方法对应的信息增益,选取信息增益最大的划分方法的阈值做为属性A二分的阈值。
详细流程以下:
1)将节点Node上的全部数据样本按照连续型属性A的具体取值,由小到大进行排列,获得属性A的属性值取值序列
;
2)在序列
中共有N-1种二分方法,即共产生N-1个分隔阈值。对于第i种二分方法,其二分阈值
。它将该节点上的数据集划分为2个子数据集
和