数据挖掘学习笔记:分类器(二)
人工神经网络(ANN)
ANN是有相互连接的结点和有项链构成。
(1)感知器。
感知器的一般模型如下所示:
分类思想:Ij = Sum(Wi*Oi) + a,其中Ij为特定的类标号,Wi为输入向量的权重,Oi为输入属性的值,a为偏置因子。用这个模型就可以对未知的记录分类。图中的激活函数的用处是:将某个Ij的计算值映射到相应的类标号中。在训练一个感知器时,最初将所有的权重随机取值,而训练一个感知器模型就相当于不断的调整链的权值,直到能拟合训练数据的输入输出关系为止。其中权值更新公式如下:Wj(k+1) = Wjk + r(yi - yik)Xij。其中Wk是第k次循环后第i个输入链上的权值,参数r称为学习率,Xij是训练样例的Xi的第j个属性值。学习率值在0到1之间,可以用来控制每次循环时的调整量。自适应r值:r在前几次循环时值相对较大,而在接下来的循环中逐渐减少。
(2)多层人工神经网络
一个多层人工神经网络的示意图如下两图所示:其中左边是多类标号情况,右边是一类情况。
ANN学习中的设计问题:
(1)确定输入层的结点数目
(2)确定输出层的结点数目
(3)选择网络拓扑结构
(4)初始化权值和偏置(随机值)
(5)去掉有遗漏的训练样例,或者用最合理的值来代替。
ANN的特点:
(1)至少含有一个隐藏层的多层神经网络是一种普适近似,即可以用来近似任何目标函数。(2)ANN可以处理冗余特征,因为权值在训练过程中自动学习。冗余特征的权值非常小。(3)神经网络对训练数据中的噪声非常敏感。噪声问题的一种方法是使用确认集来确定模型的泛化误差;另一种方法是每次迭代把权值减少一个因子。(4)ANN权值学习使用的梯度下降方法经常会收敛到局部最小值。避免方法是在权值更新公式中加上一个自动量。
支持向量机(SVM)
它可以很好的应用于高维数据,避免了维灾难问题,它使用训练实例的一个子集来表示决策边界,该子集称作支持向量。SVM寻找具有最大边缘的超平面(比那些较小的决策边界具有更好的泛化误差),因此也经常称为最大边缘分类器。最大边缘的决策边界如韩佳伟书P220图6-21所示。
分类思想:
(1) 线性
- 线性可分
在线性可分的情况下就是要学习(找)到这个最大边缘的决策边界(通过线性规划或拉格朗日乘子来求得),当然也允许有一定的误差(可以有少量的结点分在了它 不该在的类,但只要在能够容忍的范围就行),然后利用这个最大边缘的决策边界来分类,结果落在一边的为一类,在另一边的为另一类。
- 线性不可分
软边缘。线性可分的基础上引入松弛变量,来改变优化函数和约束条件等。
(2)非线性
在线性不可分的情况下,将原来的数据从原先的坐标空间X转换到一个新的坐标空间中,从而可以在变换后的坐标空间中使用一个线性的决策边界来划分样本的类标号(主要技术包括:非线性变换、核技术和Mercer定理)。
SVM的特点:
(1)SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数的全局最小值
(2)通过对数据中每个分类属性值引入一个哑变量,SVM可以应用于分类数据。
组合方法
该方法聚集多个分类器的预测来提高分类的准确率,这些技术称为组合或分类器组合方法。组合方法由训练数据构建一组基分类器,然后通过对每个分类器的预测进行投票来进行分类。预测过程如下所示:
由上面的分类过程可以看出当误差率大于0.5时,组合分类器的性能比基分类器更差。组合分类器的性能优于单个分类器必须满足两个必要条件:(1)基分类器之间应该是相互独立的(轻微相关也行);(2)基分类器应当好于随机猜测分类器。
构建组合分类器的方法
(1)通过处理训练数据集。根据某种抽样分布,通过对原始数据进行再抽样来得到多个训练集(如有放回随机抽样)。一般得到的训练集和原始数据集一样大。然后使用特定的学习算法为每个训练集建立一个分类器(装袋和提升是两种处理训练集的组合方法)。
(2)通过处理输入特征。通过选择输入特征的子集来形成每个训练集。对那些含有大量冗余特征的数据集,这种方法的性能非常好(随机深林就是一种处理输入特征的组合方法,它使用决策树作为基分类器)。
(3)通过处理类标号。这种方法适用于类数足够多的情况。这种方法先将所有的类划分为两个大类,然后将两个大类的每个大类划分为两个次大类……,预测时按照前面的分类遇到一个分类结点得一票,最后得票数最多的那个就是最终的类。
(4)通过处理学习算法。如果在同一个训练集上用同一个学习算法得到的分类器模型不一样,就可以多做几次以建立多个基分类器。
组合方法对于不稳定的分类器效果很好。不稳定分类器是对训练数据集微小的变化都很面干的基分类器。不稳定分类器的例子包括决策树、基于规则的分类器和人工神经网络。
(1)装袋(boost strap aggregating,bagging)。装袋又称自助聚集,是一种根据均匀分布从数据集中重复抽样的(有放回的)技术。每个自助样本集都和原始数据一样大。然后对每个样本集训练一个基分类器,训练k个分类器后,测试样本被指派到得票最高的类。用于噪声数据,装袋不太受过分拟合的影响。
(2)提升(boosting)。是一个迭代过程,用来自适应地改变样本的分布,使得基分类器聚焦在那些很难分的样本上。例如开始时所有的样本都赋予相同的权值1/N, 然 后按这个概率抽取样本集,然后得到一个分类器,并用它对原始数据集中的所有样本进行分类。每一轮结束时更新样本的权值。增加错误分类的样本的权值,减少被 正确分类的样本的权值,这迫使分类器在随后的迭代中关注那些很难分类的样本。通过聚集每一轮得到的分类器,就得到最终的分类器。目前有几个提升算法的实现。
它们的差别在于:
(1)每轮提升结束时如何更新训练样本的权值;
(2)如何组合每个分类器的预测。
Adaboost:在该算法中,基分类器Ci的重要性依赖于它的错误率。算法思想:首先初始化N个样本的权值(w = 1/N),然后对于第i次(总共k次,产生k个基分类器)提升(其他次一样),根据w通过对D进行有放回抽样得到训练集Di,然后根据Di得到一个基分类器Ci,用Ci对训练集D中的样本进行分类。然后计算分类的加权误差,如果加权误差大于0.5,就将所有样本的权值重设为为1/N,否则用ai更新每个样本的权值。得到k个基分类器后,然后合并k个基分类器得到预测结果。Adaboost算法将每一个分类器Cj的预测值根据 aj进行加权,而不是使用多数表决的方案。这种机制允许Adaboost惩罚那些准确率很差的模型,如那些在较早的提升轮产生的模型。另外,如果任何中间轮产生高于50%的误差,则权值将被恢复为开始的一致值wi = 1/N,并重新进行抽样。Adaboost算法倾向于那些被错误分类的样本,提升技术很容易受过分拟合的影响。
随机森林。它是一类专门为决策树分类器设计的组合方法。它结合多颗决策树做出预测。与Adaboost算法使用的自适应方法不同,Adaboost中概率分布是变化的,以关注难分类的样本,而随机森林则采用一个固定的概率分布来产生随机向量。
随机森林与装袋不同之处在于:
(1)装袋可以用任何分类算法产生基分类器而随机森林只能用决策树产生基分类器。
(2)装袋最后组合基分类器时用的投票方法二随机森林不一定用投票。
(3)随机森林的每个基分类器是一个样本集的随机向量而装袋是用的有放回抽样来产生样本。随机森林的的决策树在选择分类属性时,随机选择F个输入特征(而不是考察所有可用的特征)来对决策树的节点进行分裂,然后树完全增长而不进行任何剪枝,最后用多数表决的方法来组合预测(这种方法叫Forest-RI,其中RI是指随机输入选择)。注意此时如果F太小,树之间的相关度就减弱了,F太大树分类器的强度增加,折中通常F取log2d + 1,其中d是输入特征数。如果d太小,可以创建输入特征的线性组合,在每个节点,产生F个这种随机组合的新特征,并从中选择最好的来分裂节点,这种方法称为Forest-RC。随机森林的分类准确率和Adaboost差不多,但是随机森林对噪声更加鲁棒,运行速度也快得多。
不平衡类问题
有时候需要准确分类训练集中的少数类而对多数类不是太关心。如不合格产品对合格产品。但是这样建立的模型同时也容易受训练数据中噪声的影响。
新定的指标(过去的指标不顶用如:准确率不顶用):真正率(灵敏度)、真负率(特指度)、假正率、假负率、召回率、精度。 混淆矩阵
- 接受者操作特征(ROC)曲线
该曲线是显示分类器真正率和假正率之间的折中的一种图形化方法。在一个ROC曲线中,真正率沿y轴绘制,而假正率沿x轴绘制。一个好的分类模型应该尽可能靠近图的左上角。随机预测分类器的ROC曲线总是位于主对角线上。
ROC曲线下方的面积(AUC)提供了评价模型的平均性能的另一种方法。如果模型是完美的,则它在ROC曲线下方的面积等于1,如果模型仅仅是简单地随机猜测,则ROC曲线下方的面积等于0.5。如果一个模型好于另一个,则它的ROC曲线下方的面积较大。为了绘制ROC曲线,分类器应当能够产生可以用来评价它的预测的连续值输出,从最有可能分为正类的记录到最不可能的记录。这些输出可能对应于贝叶斯分类器产生的后验概率或人工神经网络产生的数值输出。(绘制ROC曲线从左下角开始到右上角结束,绘制过程见hanjiawei P243)。
- 代价敏感学习
代价矩阵对将一个类的记录分类到另一个类的惩罚进行编码。代价矩阵中的一个负项表示对正确分类的奖励。算法思想:将稀有的类标号预测错误的代价权值设为很 大,则在计算总代价时,它的权值较高,所以如果分类错误的话,代价就较高了。代价敏感度技术在构建模型的过程中考虑代价矩阵,并产生代价最低的模型。例 如:如果假负错误代价最高,则学习算法通过向父类扩展它的决策边界来减少这些错误。
主要思想:改变实例的分布,而使得稀有类在训练数据集得到很好的表示。有两种抽样方法:第一种选择正类样本的数目和稀有样本的数目一样多,来进行训练(可以 进行多次,每次选择不同的正类样本)。第二种复制稀有样本(或者在已有的稀有样本的邻域中产生新的样本)使得和正类样本一样多。注意,第二种方法对于噪声 数据可能导致模型过分拟合。
多类问题(结果类标号不止两个)
解决方法:
(1)将多类问题分解成K个二类问题。为每一个类yi Y(所有的类标号集合)创建一个二类问题,其中所有属于yi的样本都被看做正类,而其他样本都被看做负类。然后构建一个二元分类器,将属于yi的样本从其他的类中分离出来。(称为一对其他(1-r)方法)。
(2)构建K(K-1)/2个二类分类器,每一个分类器用来区分一对类(yi,yj)。当为类(yi,yj)构建二类分类器时,不属于yi或yj的样本被忽略掉(称为一对一(1-1)方法)。这两种方法都是通过组合所有的二元分类器的预测对检验实例分类。组合预测的典型做法是使用投票表决,将验证样本指派到得票最多的类。
纠错输出编码(ECOC):前面介绍的两种处理多类问题的方法对二元分类的错误太敏感。ECOC提供了一种处理多类问题更鲁棒的方法。该方法受信息理论中通过噪声信道发送信息的启发。基本思想是借助于代码字向传输信息中增加一些冗余,从而使得接收方能发现接受信息中的一些错误,而且如果错误量很少,还可能恢复原始信息。具体:对于多类学习,每个类yi用一个长度为n的唯一位串来表示,称为它的代码字。然后训练n个二元分类器,预测代码子串的每个二进制位。检验实例的预测类由这样的代码字给出。该代码字到二元分类器产生的代码字海明距离最近(两个位串之间的海明距离是它们的不同的二进制位的数目)。纠错码的一个有趣的性质是,如果任意代码字对之间的最小海明距离为d,则输出代码任意 (d-1) / 2个 错误可以使用离它最近的代码字纠正。注意:为通信任务设计的纠正码明显不同于多类学习的纠正吗。对通信任务,代码字应该最大化各行之间的海明距离,使得纠 错可以进行。然而,多类学习要求将代码字列向和行向的距离很好的分开。较大的列向距离可以确保二元分类器是相互独立的,而这正是组合学习算法的一个重要要求。
摘要于:http://blog.chinaunix.net/uid-26226106-id-3137245.html