数据挖掘 作业三
151220129 计科 吴政亿 wuzy.nju@gamil.com
1 实验要求
对于给定的数据集,用10折交叉验证,分别使用J4.8, Naïve Bayes, SVM, Neural Network, kNN以及它们的Bagging算法的集成学习,并且比较他们的accuracy与AUC,最后讨论如何优化kNN的Bagging集成学习的性能。
关键字:J4.8, Naïve Bayes, SVM, Neural Network, kNN,Bagging算法
2 实验方法
2.1 实验思路
由于给定的十组数据都是arff格式的,因此选用weka进行数据分析,在这里我们统一用weka的默认参数进行实验,在最后的Bagging的kNN再进行参数修改。
2.2 算法原理
2.2.1 J4.8
机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。
从数据产生决策树的机器学习技术叫做决策树学习, 通俗说就是决策树。
决策树学习也是数据挖掘中一个普通的方法。在这里,每个决策树都表述了一种树型结构,他由他的分支来对该类型的对象依靠属性进行分类。每个决策树可以依靠对源数据库的分割进行数据测试。这个过程可以递归式的对树进行修剪。 当不能再进行分割或一个单独的类可以被应用于某一分支时,递归过程就完成了。另外,随机森林分类器将许多决策树结合起来以提升分类的正确率。
决策树同时也可以依靠计算条件概率来构造。决策树如果依靠数学的计算方法可以取得更加理想的效果。
决策树一般都是自上而下的来生成的。选择分割的方法有好几种,但是目的都是一致的:对目标类尝试进行最佳的分割。从根到叶子节点都有一条路径,这条路径就是一条“规则”。决策树可以是二叉的,也可以是多叉的。对每个节点的衡量:
通过该节点的记录数
如果是叶子节点的话,分类的路径
对叶子节点正确分类的比例。
有些规则的效果可以比其他的一些规则要好。由于ID3算法在实际应用中存在一些问题,于是Quilan提出了C4.5算法,严格上说C4.5只能是ID3的一个改进算法。 C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:
用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足;
在树构造过程中进行剪枝;
能够完成对连续属性的离散化处理;
能够对不完整数据进行处理。
C4.5算法有如下优点:产生的分类规则易于理解,准确率较高。其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。
2.2.2 Naive Bayes
朴素贝叶斯分类器是分类算法集合中基于贝叶斯理论的一种算法。它不是单一存在的,而是一个算法家族,在这个算法家族中它们都有共同的规则。例如每个被分类的特征对与其他的特征对都是相互独立的。
朴素贝叶斯基础假设是,对于每一个特征都有:独立、相等来支持输出结果。
注意:如果在现实情况中,这个假设就使得朴素贝叶斯不能一般性地正确了。实际上独立这个假设就根本不可能成立,但是又往往在实践中能够很方便地计算。
在进入朴素贝叶斯方程之前,要知道贝叶斯理论是十分重要的。贝叶斯理论指的是,根据一个已发生事件的概率,计算另一个事件的发生概率。贝叶斯理论从数学上的表示可以写成这样:
在这里A和B都是事件, P(B) P ( B ) 不为0。基本上,只要我们给出了事件B为真,那么就能算出事件A发生的概率,事件B也被称为证据。
- P(A) P ( A ) 是事件A的先验(先验概率,例如,在证据之前发生的概率)。证据是一个未知事件的一个属性值(在这里就是事件B)。
- P(A|B) P ( A | B ) 是B的后验概率,例如在证据之后发生的概率。现在是时候为贝叶斯理论添加假设了,也就是每个特征之间都是相互独立的。所以我们可以将证据分成每个独立的部分。如何两个事件A和B是相互独立的,那么有:
因此我们可以得到以下结果:
于是又可以写成:
因为分母与输入数据是常量相关的,所以我们可以除去这一项:
现在我们需要建立一个分类模型,我们用已知的类变量yy 的所有可能的值计算概率,并选择输出概率是最大的结果。数学表达式可以这么写:
所以最后剩下的只有 P(y)P(y) P ( y ) P ( y ) 与 P(xi|y)P(xi|y) P ( x i | y ) P ( x i | y ) 的计算了。
请注意: P(y) P ( y ) 也被称为类概率, P(xi|y) P ( x i | y ) 也被称为条件概率。
不同的朴素贝叶斯分类器差异主要在 P(xi|y) P ( x i | y ) 分布的假设。尽管他们貌似过度简化了假设,朴素贝叶斯分类器在真实世界中的应用还是很不错的,其中著名的文件分类和垃圾邮件过滤就是例子。它只要少量的训练数据就能估计出关键的参数。与其他的复杂方法相比,朴素贝叶斯学习和分类的速度非常快。类条件特征分布的波动意思就是每个分布可以独立地被一个尺寸分布估计出来。这就减轻了维度带来的问题。
2.2.3 SVM
支持向量机,是一种非常好的算法,1992年提出,它的主要功能是分类和 回归。接下来我们讲的是分类方面的概念和应用。
支持向量机,即supportvector machine ,它可分为线性支持向量机和非线性支持向量机。在支持向量机的分类模型中,我们首要的目的就是去找到一个最大边缘超平面(具体的下面将会介绍)。而在最大超平面的两边,有一对分别平行于最大超平面的平面,要想找到最大超平面,就得找到这样的两个平面到这个最大边缘超平面的距离最大。(读起来有点拗口,下面将会以图形来展示)。
下面将以图形的方式介绍一下线性支持向量机的一些内容。(下面我们的案例都认为数据的线性可分的。)
如图所示,假如我们想把黑色的正方形和空白的圆形分开,那么我们就得找一条线把他们分开,这样的线有很多条。
但是要想使得分类效果好,如图所示,
B1和B2这两条线都可以把他们分开,但是B1的边缘明显大于B2的边缘,所以,我们需要找一条有最大边缘的线,把二种图形分开的明显一些。为什么边缘大的分类效果就好呢?打个比方,很多的点都在b21的虚线周围,那么我们有时候就很难去分辨他该属于哪一个类,假设我们以B2为最大边缘超平面,一个黑色的正方形位于b21的右方0.0002毫米处,那这样一来这个正方形就属于原形了,而我们知道,现在是存在B1的线使刚才的那个黑色正方形归为到黑色正方形的类中的,那么如果以B2为最大边缘超平面,这样就分类错误了。总的来说,寻找到一个最大边缘超平面的作用就是使得分类的误差达到最小。
那么,我们怎么样去找这样满足高分类效果的线呢?下面我们将用函数的形式给出说明:
我们将线性支持向量机的最大边缘超平面写成如下的函数形式:
如图3所示,中间的那条实线为决策边界(就是上面所说的超平面),我们令
当 f(x)=0 f ( x ) = 0 的时候,为决策边界。当 f(x)=1 f ( x ) = 1 或 f(x)=−1 f ( x ) = − 1 的时候,为两个平行于决策边界的超平面,而在这两个超平面上面的点也就是支持向量。我们需要这俩个超平面到这个决策边界的距离最大,那么我们将转化到下面的式子:
两式相减,我们将得到 d=2∥w∥ d = 2 ‖ w ‖ ,其中 ∥W∥ ‖ W ‖ 为欧几里得范数。因此,我们得到的d为最大的边缘。那么也可以得到我们需要最小的 ∥W∥ ‖ W ‖ ,使得最大化的d。
从上面的说的,我们可以知道,W是我们关键找的一个向量,在支持向量机的训练过程中,主要是获得w,一旦我们有了一个训练后的支持向量机(这个向量机保证了最大的边缘超平面,使得在此数据集下有较好的分类精度)。我们就可以用对于的SVM来对线性可分的数据进行分类。。。。。然后给上面训练后的支持向量机一个名称,为线性支持向量机。
所以,学习训练后的分类器的复杂度由支持向量的数目而不是由数据的维数来刻画。
2.2.4 Neural Network
神经网络目前最广泛使用的定义是Kohonen于1988年的描述,神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应。
2.2.4.1 神经元模型
神经元模型,即上述定义中的简单单元。
在生物神经网络中,每个神经元与其他神经元相连,当它兴奋时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个阈值,那么它就会激活,即兴奋起来。向其他神经元发送化学物质。
我们把上述的这种神经元模型抽象出来,这就是M-P神经元模型:
神经元接受输入x,通过带权重w的连接进行传递,将总输入信号与神经元的阈值进行比较,最后通过激活函数处理确定是否激活。
2.2.4.2 阈值
阈值,又称为bias,其含义有点类似阀门。在计算中,可以将阈值看作一个固定输入为-1的哑节点对应的连接权重。
2.2.4.3 激活函数
理想中的激活函数是阶跃函数,但实际使用中由于阶跃函数不光滑,不连续,我们一般使用sigmoid或者tanh函数,如下:
两者都是将较大范围的输入值挤压到一个小范围内,如(0,1)或者(-1, 1),即上述的确定神经元是否激活。
两层神经元,即输入层+输出层(M-P神经元),构成感知机。而多层功能神经元相连构成多层前馈神经网络,输入层与输出层之间的一层神经元,称为隐层:
如图所示,每层神经元与下一层神经元互连,神经元之间不存在同层连接,也不存在跨层链接,这样的结构称多层前馈神经网络。
神经网络学习的过程,其实就是根据训练数据,来调整神经元之间的连接权w以及每个功能神经元阈值b的过程。
误差逆传播就是其中一种广为人知的训练方法,其核心的思想非常简单,对于训练数据(x,y),若当前神经网络的输出为Y,则神经网络的权重:
从上可以看出,假设训练结果正确,则权重w不会发生改变;假如错误,则会对w进行一定调整,其中n为学习率,对学习速度有影响。多层神经网络从输出层往输入层逆方向传播误差进行权重调整,即所谓的误差逆传播算法。
神经网络的训练过程即是一个参数寻优过程,基于梯度下降求得的可能是局部最优但不一定是全局最优解:
所以实际调参过程中,往往需要多次试验,才能得到一个较为满意的模型。
2.2.5 KNN
如下图所示,有两类不同的样本数据,分别用蓝色的小正方形和红色的小三角形表示,而图正中间的那个绿色的圆所标示的数据则是待分类的数据。也就是说,现在, 我们不知道中间那个绿色的数据是从属于哪一类(蓝色小正方形or红色小三角形),下面,我们就要解决这个问题:给这个绿色的圆分类。
我们常说,物以类聚,人以群分,判别一个人是一个什么样品质特征的人,常常可以从他/她身边的朋友入手,所谓观其友,而识其人。我们不是要判别上图中那个绿色的圆是属于哪一类数据么,好说,从它的邻居下手。但一次性看多少个邻居呢?从下图中,你还能看到:
如果K=3,绿色圆点的最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
如果K=5,绿色圆点的最近的5个邻居是2个红色三角形和3个蓝色的正方形,还是少数从属于多数,基于统计的方法,判定绿色的这个待分类点属于蓝色的正方形一类。
于此我们看到,当无法判定当前待分类点是从属于已知分类中的哪一类时,我们可以依据统计学的理论看它所处的位置特征,衡量它周围邻居的权重,而把它归为(或分配)到权重更大的那一类。这就是K近邻算法的核心思想。
KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
KNN 算法本身简单有效,它是一种 lazy-learning 算法,分类器不需要使用训练集进行训练,训练时间复杂度为0。KNN 分类的计算复杂度和训练集中的文档数目成正比,也就是说,如果训练集中文档总数为 n,那么 KNN 的分类时间复杂度为O(n)。
KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
K 近邻算法使用的模型实际上对应于对特征空间的划分。K 值的选择,距离度量和分类决策规则是该算法的三个基本要素:K 值的选择会对算法的结果产生重大影响。K值较小意味着只有与输入实例较近的训练实例才会对预测结果起作用,但容易发生过拟合;如果 K 值较大,优点是可以减少学习的估计误差,但缺点是学习的近似误差增大,这时与输入实例较远的训练实例也会对预测起作用,使预测发生错误。在实际应用中,K 值一般选择一个较小的数值,通常采用交叉验证的方法来选择最优的 K 值。随着训练实例数目趋向于无穷和 K=1 时,误差率不会超过贝叶斯误差率的2倍,如果K也趋向于无穷,则误差率趋向于贝叶斯误差率。
该算法中的分类决策规则往往是多数表决,即由输入实例的 K 个最临近的训练实例中的多数类决定输入实例的类别
距离度量一般采用 Lp 距离,当p=2时,即为欧氏距离,在度量之前,应该将每个属性的值规范化,这样有助于防止具有较大初始值域的属性比具有较小初始值域的属性的权重过大。
KNN算法不仅可以用于分类,还可以用于回归。通过找出一个样本的k个最近邻居,将这些邻居的属性的平均值赋给该样本,就可以得到该样本的属性。更有用的方法是将不同距离的邻居对该样本产生的影响给予不同的权值(weight),如权值与距离成反比。 该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。 该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进。
该方法的另一个不足之处是计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本。该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
实现 K 近邻算法时,主要考虑的问题是如何对训练数据进行快速 K 近邻搜索,这在特征空间维数大及训练数据容量大时非常必要。
3 实验结果
首先,对于下面的表格,加粗的数据代表他是五种方法中的最优方法
3.1 未使用集成学习
accuracy | J4.8 | Naive Bayes | SVM | Neural Network | kNN |
---|---|---|---|---|---|
breast-w | 94.5637% | 95.9943% | 96.9957% | 95.2790% | 95.1359% |
colic | 85.3261% | 77.9891% | 82.6078% | 80.4348% | 81.2500% |
credit-a | 86.0870% | 77.6812% | 84.9275% | 83.6232% | 81.1594% |
credit-q | 70.5000% | 75.4000% | 75.1000% | 71.5000% | 72.0000% |
diabetes | 73.8281% | 76.3021% | 77.3438% | 75.3906% | 70.1823% |
hepatitis | 83.8710% | 84.5161% | 85.1613% | 80.0000% | 80.6452% |
mozilla4 | 94.7958% | 68.6394% | 83.2100% | 91.1869% | 88.9932% |
pc1 | 93.3273% | 89.1794% | 92.9666% | 93.5978% | 92.0649% |
pc5 | 97.4631% | 96.4157% | 97.1721% | 97.1023% | 97.2943% |
waveform-500 | 75.0800% | 80.0000% | 86.6800% | 83.5600% | 73.6200% |
最优情况次数 | 4 | 1 | 4 | 1 | 0 |
ROC | J4.8 | Naive Bayes | SVM | Neural Network | kNN |
---|---|---|---|---|---|
breast-w | 0.955 | 0.986 | 0.968 | 0.986 | 0.973 |
colic | 0.813 | 0.842 | 0.809 | 0.957 | 0.802 |
credit-a | 0.887 | 0.896 | 0.856 | 0.895 | 0.808 |
credit-q | 0.639 | 0.787 | 0.671 | 0.730 | 0.660 |
diabetes | 0.751 | 0.819 | 0.720 | 0.793 | 0.650 |
hepatitis | 0.708 | 0.860 | 0.756 | 0.823 | 0.653 |
mozilla4 | 0.954 | 0.829 | 0.838 | 0.940 | 0.877 |
pc1 | 0.668 | 0.650 | 0.500 | 0.723 | 0.740 |
pc5 | 0.817 | 0.833 | 0.541 | 0.941 | 0.932 |
waveform-500 | 0.830 | 0.956 | 0.932 | 0.963 | 0.802 |
最优情况次数 | 1 | 5 | 0 | 4 | 0 |
可以观察到,J4.8与SVM在准确度上表现的非常好,但是在AUC上缺不尽如人意。同样,Naive Bayes与Neural Network的AUC表现出众,但是准确度缺不太好。另外,kNN在此没有一项部分出众,应当是我的参数选用的是默认参数的原因。当然也与数据集有关。
3.2 使用集成学习
accuracy | J4.8 | Naive Bayes | SVM | Neural Network | kNN |
---|---|---|---|---|---|
breast-w | 96.2804% | 95.8521% | 96.9957% | 95.9943% | 95.8512% |
colic | 85.5978% | 77.9891% | 83.9674% | 84.5109% | 81.2500% |
credit-a | 86.8116% | 77.8261% | 85.2174% | 85.0725% | 81.3043% |
credit-q | 73.3000% | 74.8000% | 75.4000% | 76.1000% | 72.1000% |
diabetes | 74.6094% | 76.5625% | 77.4740% | 76.8229% | 71.0938% |
hepatitis | 83.8710% | 85.8065% | 85.8056% | 84.5161% | 81.2903% |
mozilla4 | 95.1110% | 68.7424% | 83.1200% | 91.2834% | 88.8582% |
pc1 | 93.5978% | 88.9089% | 93.1470% | 93.3273% | 91.0730% |
pc5 | 97.5271% | 96.4797% | 97.1779% | 97.3118% | 97.3700% |
waveform-500 | 81.2000% | 79.9800% | 86.2600% | 85.5600% | 74.4600% |
最优情况次数 | 5 | 1 | 4 | 1 | 0 |
ROC | J4.8 | Naive Bayes | SVM | Neural Network | kNN |
---|---|---|---|---|---|
breast-w | 0.985 | 0.989 | 0.975 | 0.989 | 0.987 |
colic | 0.864 | 0.842 | 0.868 | 0.876 | 0.824 |
credit-a | 0.928 | 0.896 | 0.888 | 0.908 | 0.886 |
credit-q | 0.753 | 0.787 | 0.754 | 0.776 | 0.694 |
diabetes | 0.798 | 0.817 | 0.747 | 0.822 | 0.725 |
hepatitis | 0.865 | 0.890 | 0.828 | 0.846 | 0.782 |
mozilla4 | 0.976 | 0.830 | 0.849 | 0.954 | 0.928 |
pc1 | 0.855 | 0.628 | 0.512 | 0.835 | 0.793 |
pc5 | 0.959 | 0.845 | 0.572 | 0.954 | 0.953 |
waveform-500 | 0.949 | 0.956 | 0.954 | 0.969 | 0.900 |
最优情况次数 | 4 | 3 | 0 | 4 | 0 |
应用集成学习后,可以明显的发现,J4.8的集成学习在准确度与AUC都表现的十分出众。另外,对于所有的数值,在应用集成学习后,基本都有上升。
3.3 kNN的集成学习优化
在这里,我选取了一个最具有代表性的实验结果 breast-w,来体现优化的过程与选择,并进行相应参数的调整。
3.3.1 更改KNN的distance Function
accuracy | ROC |
---|---|
Euclidean Distance | 95.8512% |
Filtered Distance | 95.8512% |
Manhattan Distance | 96.4235% |
Chebyshev Distance | 95.9943% |
Minkowski Distance | 95.8512% |
可以看出,在所有的距离度量方法中,Manhattan Distance的accuracy与ROC均是最出色的。可能因为我们的数据集是离散的,所以曼哈顿距离表现出色。
3.3.2 更改kNN的k值
在kNN中,k值也是一项重要的参数,在之前的数据中,我们的k值默认为1,在下面实验中,我们固定distance function为Manhattan,对k值进行测试。
k | accuracy | ROC |
---|---|---|
1 | 96.4235% | 0.991 |
2 | 96.8526% | 0.992 |
3 | 96.8526% | 0.991 |
4 | 96.4235% | 0.991 |
5 | 96.2804% | 0.991 |
可以发现,当k值等于2时得到的accuracy与ROC同样出色,与之前的结果相比,accuracy上升1.0014%,ROC上升0.005.在与其他方法比较中,accuracy排名第二,ROC排名第一。
4 实验总结
4.1 多种分类方法对比
- 可以看出集成学习得到的模型更具有鲁棒性,而且准确率与AUC优于未使用的情况。
- SVM算法在数据集维度较高时表现的更为出色,如breast-w、diabetes、hepatitis、waveform-500。
- Naive Bayes在数据集较小时表现的更为出色,如credit-q。
- KNN在数据集较大时表现的比较出色。
- Neural Network的参数对结果影响较大,好的初始值与参数对其效果影响巨大。
4.2 优化kNN的集成学习性能
- 学习更强大的指标,如NCA
- 给定一个学习集,每个引导程序集都是通过学习集随机取样来创建的。 每个基数与训练集的大小相同。
当从学习集创建引导程序集时,我们检查引导程序集中每个类的样本数的比率。 将该比率与学习集合中每班的样本比率进行比较。 如果比较比率之间的差异大于某个类别的偏差容限阈值,则我们拒绝该引导程序集。 使用的偏差容限阈值设置为10%。
该方法与方法2类似,只是自举设定比率与全套比例相比较。 全套是指包含所有样本,学习和测试样本的集合。 该全套比例模拟样本空间中类别分布的先验知识。
5 实验参考
- Alkoot F M. Investigating methods for improving bagged k-NN classifiers[C]// Wseas International Conference on Artificial Intelligence, Knowledge Engineering and Data Bases. 2008:351-356.
- https://blog.csdn.net/zufejsjcy/article/details/51290109
- https://blog.csdn.net/sinat_33741547/article/details/76652611
- https://blog.csdn.net/zhangtian6691844/article/details/51655531