数据挖掘导论学习总结——第四章

第四章:分类与预测

分类方法用于预测数据对象的离散类别,预测则用于预测数据对象的梁旭取值,例如我们可以构造一个分类模型来对银行贷款进行风险评估,也可以简历一个预测模型以利用顾客收入与职业预测其可能用于购买计算机设备的支出大小。最初的数据挖掘方法大多都是建立在机器学习、专家系统、统计学和神经生物学等领域的分类与预测算法,目前数据挖掘方法都要求具有基于外存以处理大规模数据集合能力且具有可扩展性。本章讲初步探讨决策树归纳方法、贝叶斯分类方法和贝叶斯信念网络等数据分类方法,此外还有KNN、基于示例学习法、遗传算法等其他分类学习方法。而预测方法则包括线性及分线性回归模型等内容。

分类与预测基本知识

分类学习方法所使用的数据集称为训练样本集合,因此分类学习有称为监督学习,它是在已知训练样本类别的情况下,通过学习建立相应模型,而无监督学习则是训练样本的类别与类别个数均未知的情况下进行的。通常分类学习的模型可以表示为分类规则行事、决策树行事或数学公式形式等。在得到分类模型后,我们需要对模型分类的准确率进行估计,例如holdout方法。它利用一组带有类别的样本进行分类测试,测试样本随机获得且与训练样本相互独立。对于一个给定数据所构造出模型的准确性可以通过由该模型所正确分类的数据样本个数所占总测试样本比例得到。若模型的准确率是通过学习数据集的测试所获得的,这样由于学习模型倾向于过分逼近训练数据,从而造成对模型测试准确率的估计过于乐观。因此需要使用一个测试数据集来对所获得的模型的准确率进行测试工作。

分类与回归是两种主要预测形式,分类用于预测离散或符号值,而回归择时用于预测连续或有序值。通常在数据挖掘中,将预测离散无序类别的数据归纳方法称为分类方法,将预测连续有序值的数据归纳方法称为预测方法。

与分类与预测有关的若干问题

在进行分类或预测前,我们需要对数据进行预处理,以提高分类或预测的准确性、效率和可扩展性。数据预处理主要包括数据清洗、相关分析、数据转换三个步骤。在对分类方法进行比较时,我们可以用预测准确率、计算速度、鲁棒性、可扩展性和易理解性等方面对模型进行比较。其中鲁棒性是指在数据带有噪声和有数据遗失的情况下模型仍然能够进行正确预测的能力,可扩展性描述的是处理大量数据并构相应学习模型所需要的能力。

接下来我们将逐一介绍各个分类与回归模型。首先从我们最熟悉的决策树模型入手,读者们可以回顾一下信息熵和信息增益的概念。


基于决策树的分类

决策树归纳方法是目前许多基于规则进行归纳数据挖掘商用系统的基础,一下是最常用的ID3算法描述。

算法:Generate_decision_tree #根据给定数据集产生一个决策树
输入:训练样本,各属性均取离散数值,可供归纳的候选属性集为attribute_list
输出:决策树
处理流程:

  1. 创建一个结点N
  2. 若该结点中的所有样本均为同一类别C,则返回N作为一个叶结点并标记为类别C
  3. 若attribute_list为空,则返回N作为一个叶结点并标记为该结点所含样本中类别个数最多的类别。否则从attribute_list中选择一个信息增益最大的属性test_attribute,并将结点N标记为test_attribute
  4. 对于test_attribute中的每一个已知取值 ai a i ,划分结点N所包含的样本集。根据 test_attribute=ai t e s t _ a t t r i b u t e = a i 条件,从结点N产生相应的一个分支,表示该测试条件,并将 si s i 设为满足 test_attribute=ai t e s t _ a t t r i b u t e = a i 条件的样本集合
  5. si s i 为空,则将相应叶结点标记为该结点所含样本中类别个数最多的类别。否则将相应叶结点标记为Generate_decition_tree( si s i , attribute_list - test_attribute).

基本决策树算法是一个贪心算法,它采用自上而下,分而治之的递归方式。其中递归操作的停止条件分为三种:

  1. 一个节点的所有样本均为同一类别
  2. 若无属性可用与划分当前样本集,则利用投票原则,少数服从多数,将当前结点强制为叶节点,并标记为当前结点所含样本集中类别个数最多的类别。
  3. 没有样本满足 test_attribute=ai t e s t _ a t t r i b u t e = a i ,则创建一个叶结点并将其标记为当前结点所含样本集中类别个数最多的类别。

在决策树归纳方法中,通常使用信息增益方法来确定生成每个结点时所应采用的合适属性,这样可以选择具有最高信息增益(熵减少的程度最大)的属性作为测试属性,保证对之后所划分获得的训练样本子集进行分类时所需要的信息最少。也就是说,利用该属性进行当前样本集合划分,将会使得所产生的各样本子集中的“不同类别混合程度”降为最低。因此采用这种信息论方法可以帮助有效减少对象分类所需要的次数,从而确保产生的决策树最为简单,尽管不一定是最简单的。

设S代表一组训练样本集,每个对象的类别已知,共有m个不同类别,即S包含 si s i 个类别为 Ci C i 的数据行, i[1,2,...m] i ∈ [ 1 , 2 , . . . m ] . 任何一个对象属于 Ci C i 的概率为 pi=si/s p i = s i / s . 这里s为集合S中所有样本总数。一个决策树可用于对数据对象进行分类,因此决策树可以看成是 Ci C i 的一个信息源,为产生相应信息需要的信息熵为

I(s1,s2,...sm)=pilog2pi I ( s 1 , s 2 , . . . s m ) = − ∑ p i l o g 2 p i

若属性A可以取值为 {a1,a1,...av} { a 1 , a 1 , . . . a v } , 且该属性用作决策树的一个结点时,它将会把对应的数据集合分成v份,即 {S1,S1,...Sv} { S 1 , S 1 , . . . S v } ,其中 Sj S j 包含属性A取同一值 ai a i 的数据行。 Sj S j 包含 sij s i j 个类别属性为 Ci C i 的数据对象。根据属性A的取值对当前数据集进行划分所获得的信息就称为属性A的熵,计算公式如下:
E(A)=j=1vs1j+s2j+...+smjsI(s1j,s2j,...smj)=j=1vsjsI(s1j,s2j,...smj) E ( A ) = ∑ j = 1 v s 1 j + s 2 j + . . . + s m j s I ( s 1 j , s 2 j , . . . s m j ) = ∑ j = 1 v s j s I ( s 1 j , s 2 j , . . . s m j )

其中 s1j+s2j+...+smjs s 1 j + s 2 j + . . . + s m j s 项被当做第j个自己的权值,它是由所有自己种属性A取 aj a j 值的样本数之和除以S集合中的样本总数。E(A)计算结果越小,就表示其自己划分结果越纯,越好。对于一个给定的子集 Sj S j ,它的信息为
I(s1j,s2j,...smj)=i=1mpijlog2(pij) I ( s 1 j , s 2 j , . . . s m j ) = − ∑ i = 1 m p i j l o g 2 ( p i j )

其中 pij p i j 为子集 Sj S j 中任一个数据样本属于类别 Ci C i 的概率。因此通过选择属性A并进行决策树分支而获得的信息增益可以由以下公式计算:
Gain(A)=I(s1,s2,...sm)E(A) G a i n ( A ) = I ( s 1 , s 2 , . . . s m ) − E ( A )

即Gain(A)被认为是根据属性A取值进行样本集合划分所获得的信息熵的减少量。
ID3方法根据S集合中数据对象来计算每个属性的Gain(A)值,并从中选择出值最大的属性作为决策树的根节点,并该属性的取值个数将初始数据集划分为v份,即通过不断对每个新产生的数据子集循环进行上述操作,直到产生所有叶结点。

决策树归纳算法无需相关领域知识。归纳的学习与分类识别操作处理都相当快。对于具有细长条分布性质的数据集合来讲,决策树归纳算法相应的分类准确率相当高。

然而,在决策树构造过程中,我们可以回遇到一些异常数据,或是存在噪声。我们可以利用树枝修建的方法对其进行处理,即通过利用统计方法删去最不可靠的分支,以提高今后分类识别的速度和分类识别新数据的能力,通常分类事前修剪和事后修剪两种方法。

事前修剪方法通过提前停止分支生成过程,即通过在当前结点上就判断是否需要继续划分该结点所含训练样本集来实现。一旦停止分支,当前结点就称为一个叶结点。该叶结点中可能包含多个不同类别的训练样本。具体来说,我们可以利用统计学上的重要性检测卡方检验或信息增益等来对分支生成情况进行评估。如果在一个结点上划分样本集时,会导致结点中样本数量少于指定的阈值,则停止继续分支。但确定一个合理的阈值也比较困难。

事后修剪方法从一个充分生长的树中修剪掉多余的树枝,被修剪的结点成为一个叶结点,并将其标记为它所包含样本中类别个数最多的类别。对于树中每个非叶结点,计算出该结点被修剪后所发生的预期分类错误率,同时根据每个分支的分类错误率以及每个分支的权重(样本分布),计算若该结点不被修剪时的预期分类错误率。如果修剪导致预期分类错误率较大,则放弃修剪,否则就将相应结点分支修剪删去。在产生一系列的经过修剪的决策树之后,我们可以利用一个独立的测试数据集,对这些经过修剪的决策树的分类准确性进行评价,保留下预期分类错误率最小的决策树。除此之外,我们也可以利用编码长度来进行修剪,最佳修剪树就是编码长度最短的决策树。该原则的基本思想是,最简单的就是最好的,利用最短描述长度(MDL,Minimum Description Length)进行决策树修剪时无需额外的独立测试数据集。

接下来我们考虑如何对经典的ID3算法进行改进。首先是对于连续取值属性A的优化,我们可以将其进行二值化,分别对应两个分支。基本的决策树归纳方法对一个测试属性的每个均值产生一个相应分支,且划分相应的数据样本子集,划分过程中将会由于子集规模过小所造成的统计特征不充分而停止。二元决策树比传统决策树更可能具有较好的分类预测准确性。

其次,在运用信息增益方法的时候,我们会偏向于选择取值较多的属性,针对这一问题,我们可以考虑采用增益比率,把每个属性取值的概率考虑在内,例如gini索引方法、卡方条件统计表方法和G统计方法等。

再者,许多处理遗失数据的方法也值得借鉴。我们可以利用属性A中最常见的值来替代一个遗失或未知属性A的值,或者我们也可以利用属性A与其他属性之间的关系来进行缺失值的填补。

最后,随着数据集的不断分解,每个数据子集将会变得越来越小,可能出现碎片、重复、复制等问题。属性构造是防止这类问题发生的一种解决方法,利用已有属性构造新的属性可以帮助改善现有属性集的在表示范围上的局限性。

贝叶斯分类方法

贝叶斯分类器是一个统计分类器,能够预测类别所属的概率。朴素贝叶斯分类器假设一个指定类别中各个属性的取值是相互独立的,也被称为类别条件独立,它可以帮助有效减少在构造贝叶斯分类器时所需要进行的计算量。其中一个最重要的定理就是贝叶斯定理,即

P(θ|x)=P(θ)P(x|θ)P(x) P ( θ | x ) = P ( θ ) P ( x | θ ) P ( x )

朴素贝叶斯分类算法如下:

  1. 每个数据样本都是一个n维特征向量,即属性( A1,A2,...An A 1 , A 2 , . . . A n )的具体取值
  2. 假设共有m个不同类别, C1,C2,...Cm C 1 , C 2 , . . . C m ,给定一个位置类别的数据样本X,分类器在已知X的情况下,预测X属于后验概率最大的那个类别,即

P(Ci|X)>P(Cj|X)1jm P ( C i | X ) > P ( C j | X ) ∀ 1 ≤ j ≤ m

也就是说 P(Ci|X) P ( C i | X ) 的值是最大的。
3. 由于P(X)对于所有的类别均是相同的,我们只需要使得 P(X|Ci)P(Ci) P ( X | C i ) P ( C i ) 最大即可,其中 P(Ci) P ( C i ) 可以利用公式 P(Ci)=si/s P ( C i ) = s i / s 进行估算。
4. 根据所给定的数据集,直接计算 P(X|Ci) P ( X | C i ) 运算量通常非常大,为了实现估算,朴素贝叶斯通常假设各个类别是相互独立的,即各个属性的取值是相互独立的,从而有
P(X|Ci)=k=1nP(xk|Ci) P ( X | C i ) = ∏ k = 1 n P ( x k | C i )

于是我们的任务成为根据训练数据估算 P(xk|Ci) P ( x k | C i ) 的值,我们可以分两种情况进行讨论。
Ak A k 是离散值,则 P(xk|Ci)=siksi P ( x k | C i ) = s i k s i ,其中 sik s i k 为训练样本中类别为 Ci C i 且属性 Ak A k 取值为 vk v k 值的样本数量。若 Ak A k 为连续变量,我们假设其具有高斯分布,即
P(xk|Ci)=g(xk,μCi,σCi)=12πσCiexp(xμCi)22σ2Ci P ( x k | C i ) = g ( x k , μ C i , σ C i ) = 1 2 π σ C i exp ( x − μ C i ) 2 2 σ C i 2

  1. 为了预测一个位置样本X的类别,我们用以上方法计算 P(X|Ci)P(Ci) P ( X | C i ) P ( C i ) ,并将其归类为后验概率最大的一类

从理论上讲,与其他分类器相比,贝叶斯分类器具有最小的错误率。但在实际应用中,由于其所依据的类别独立性假设和缺乏某些数据的准确概率分布,从而使得贝叶斯分类器预测准确率受到影响。各种研究结果表明,与决策树和神经网络分类器相比,贝叶斯分类器在某些情况下具有更好地分类效果。在某些特定假设下,许多神经网络和曲线拟合算法的输出都同贝叶斯分类器一样,使得后验概率取值最大。

在朴素贝叶斯的基础之上,我们考虑贝叶斯信念网络。在朴素贝叶斯中,我们基于假设各类别相互独立从而估算后验概率,也就是要求样本属性的取值是相互独立的。这一假设简化了分类计算复杂性。若这一假设成立,则与其他分类方法相比,朴素贝叶斯分类器是最准确的。但在实际应用中,变量间的相互依赖情况会非常紧密,我们进一步考虑信念网络模型,用来描述这种相互关联的概率分布。该网络描述各个属性子集之间有条件的相互独立,并利用图形模型来描述其中的因果关系。

一个信念网络包含两方面的内容,有向无环图与条件概率表。在有向无环图中,每一个结点代表一个随机变量,每一个弧代表一个概率依赖。条件概率表定义了一个条件分布 P(Z|parent(Z)) P ( Z | p a r e n t ( Z ) ) ,其联合概率可以表示为

P(z!,z2,...zn)=i=1nP(zi|parent(Zi)) P ( z ! , z 2 , . . . z n ) = ∏ i = 1 n P ( z i | p a r e n t ( Z i ) )

信念网络中的一个结点可以被选为输出结点,用来代表类别属性,网络中可有多于一个输出结点,该网络可以利用学习推理算法。其分类结果返回的是概率分布。

若网络结构已经确定且所涉及的变量均为可观察变量,我们就可以进行下一步的网络学习,与朴素贝叶斯分类方法中的概率计算方法类似。若存在隐含变量,则可以利用梯度下降法来帮助训练信念网络,其训练目标是获得CPT(Conditional Probability Table)的入口值,原理类似于神经网络中的隐藏层。梯度下降法采用的是贪心爬山搜索操作,每次循环群众都被更新并最终收敛于局部最优解。

神经网络分类方法

神经网络的优点是对噪声数据有较好的适应能力,并且对未知数据也具有较好的预测分类能力。一个多层前馈神经网络利用后传算法完成相应的学习任务。神经网络的输入层对应每个训练样本的各属性取值,隐藏层的带权输出又作为输入再传递给下一隐藏层,最后的隐层结点带权输出给输出等单元,即为预测概率。只要隐藏层足够多,多层前馈网络中的线性阈值函数可以充分逼近任何函数。

在对神经网络训练开始之前,需要确定神经网络的结构,包括输入层的单元数,隐含层的层数,每个隐含层的单元数目以及输出层单元数目。对于输入层,通常需要对各属性规格化到[0,1]区间。神经网络的结构设计是一个不断试错的过程,不同网络结构所获得的神经网络常常会获得不同的预测准确率。网络中的权重初始值设置也会影响最终的预测准确率。BackPropogation方法可以对神经网络进行训练,不断修改权重以使网络输出与实际类别之间的均方误差达到最小。尽管无法理论保证,但通常在学习停止时权重修改将会收敛。

但神经网络的一个主要缺点就是网络锁隐含知识的清晰表示。以网络及其各单元间连接的权值和偏差所构成的知识难以被人理解。神经网络规则的抽取和网络敏感性分析已经成为研究中的一个重点。

基于关联的分类方法

关联分类主要分为两步,第一步是利用标准关联规则算法挖掘出有关的关联规则,第二步是基于所挖掘出的关联规则构造一个分类器。关于关联分类方法将在第五章详细介绍。

设D为训练数据集,Y为D中所有类别的集合。D中的每个数据样本d是用一组(属性-值)对和一个类别y来表示。设I为D中所有(属性-值)对集合。一个关联分类规则(CAR)具有(conditionset y ⇒ y ),其中conditionset为一组(属性-值)对的组合,即有 conditionsetI,yY c o n d i t i o n s e t ⊂ I , y ∈ Y ,因此我们可以用

分类器准确性分析

holdout和cross validation是两种常用的评估分类器预测准确率的技术。这两者均是在给定数据集中随机取样划分数据。在holdout方法中,所给定的数据集被随机划分为两个独立部分,一般三分之二作为训练数据,剩下三分之一作为测试数据,对其预测准确率进行评估。holdout一个简单的改进是重复利用holdout方法进行预测准确率估计k次,最后对这k次所获得的预测准确率取平均值。

为了提高预测准确率,我们可以利用bagging与boosting方法。


预测方法

对一个连续数值的预测可以利用统计回归方法建立模型来实现。借助变量转化,我们可以将一个非线性问题转换成一个线性问题。

最基础的一元线性回归可以用最小二乘法或极大似然估计进行求解。同理,多元回归也可以用最小二乘法求解。再进一步,我们可以推广到非线性模型与广义线性模型。其中广义线性模型可以处理离散变量,常见的有逻辑回归模型与泊松回归模型。逻辑回归模型也称为对数线性模型,可以用于数据压缩和数据平滑等,因为高维数据所受到造成的干扰比低维数据要少许多,高维数据占用的空间也比低维数据要少许多。

你可能感兴趣的:(数据挖掘导论学习总结——第四章)