基于规则的分类器的规则用析取范式 R = ( r 1 ∨ r 2 ∨ ⋯ ∨ r k ) R=(r_1\lor r_2 \lor \cdots \lor r_k) R=(r1∨r2∨⋯∨rk)表示。R称作规则集, r i r_i ri是分类规则或析取项。
每一个分类规则都可以表示为:规则前件 ⇒ \Rightarrow ⇒规则后件
如果规则r的前件和记录x的属性匹配,则称r覆盖x。称r被激发或被触发。
分类规则的质量可以用覆盖率(coverage)和准确率(accuracy)来度量 C o v e r a g e ( r ) = ∣ A ∣ ∣ D ∣ A c c u r a c y ( r ) = ∣ A ∩ y ∣ ∣ A ∣ Coverage(r)=\frac{|A|}{|D|} \\ \\ \\ Accuracy(r)=\frac{|A\cap y|}{|A|} Coverage(r)=∣D∣∣A∣Accuracy(r)=∣A∣∣A∩y∣
其中|A|表示符合前件的记录数, ∣ A ∩ y ∣ |A\cap y| ∣A∩y∣表示同时符合前后件的记录数,|D|表示记录总数。
互斥规则(Mutually Exclusive Rule):如果规则集R中不存在两条规则被同一条记录触发,则称R中的规则是互斥的。。
穷举规则(Exhaustive Rule):如果对属性值任一组合,R中都有一条规则加以覆盖,则称规则集R具有穷举覆盖
默认规则:默认规则的前件为空,当所有其他规则失效时触发。
有序规则(ordered rule):在这种方法中,规则集中的规则按照优先级降序排列,优先级的定义方法很多(覆盖率准确率总描述长度规则产生的顺序等)。有序的规则集也称决策表(decision list)
无序规则:允许一条测试记录触发多条分类规则,每触发一次看做一次对类的加权投票(权数可以是准确率),最后根据票数将记录分配到某个类标号。这优于有序原则,建模开销也小,但对测试记录分类很繁重。
本章主要讨论使用有序规则的分类器
基于规则的排序方案
基于类的排序方案:大部分分类器都是用这种方案
直接方法就是直接从数据中提取分类规则
Rule_set = {}; //学习的规则集初试为空
E是训练记录,Y是类的有序集
for 每个类c do
repeat
Rule = Learn_One_Rule(E,Att-vals,y)
从E中删除被Rule覆盖的训练记录;
until终止条件被满足
Rule_set = Rule_set +Rule%追加rule到列表尾部
end for
把默认规则插入到规则列表的尾部
返回Rule_set
Learn_One_Rule采用一种贪心的增长规则。他先产生一个初始规则r。并不断对该规则求精,直到满足某种终止条件为止。
规则增长策略 :
(1)从一般到特殊:从初始规则r(前件为空)开始,添加合取项来提高规则质量
(2)从特殊到一般:相反
束状搜索:算法维护k个最佳候选规则,个候选规则在其前件中添加或删除合取项独立增长。评估候选规则的质量,选择k个进行下一轮迭代
规则评估 由于准确率存在片面性,我们提供以下几种方法来解决问题。
(1)可以使用统计检验剪出覆盖率较低的规则。似然比(likelihood ratio)统计量: R = 2 ∑ i = 1 k f i log 2 f i / e i R=2\sum_{i=1}^kf_i\log_2{f_i/e_i} R=2i=1∑kfilog2fi/ei
k表示类的个数, f i f_i fi表示被规则覆盖的类i的样本的观测频率, e i e_i ei是规则做随机猜测的期望频率。R是满足自由度为k-1的 χ 2 \chi^2 χ2分布。较大的R值说明该规则作出的正确预测数显著的大于随机猜测的结果。
(2)可以使用一种考虑规则覆盖率的评估度量:
L a p l a c e = f + + 1 n + k m 估 计 = f + + k p + n + k Laplace=\frac{f_++1}{n+k} \\ m估计=\frac{f_++k p_+}{n+k} Laplace=n+kf++1m估计=n+kf++kp+
n为规则覆盖的样例数, f + f_+ f+为规则覆盖的正例数,k是总类数,p+是正类的先验概率。由于规则的覆盖率,两个度量达到了准确率和正类先验概率之间的平衡。当覆盖率很高时,他们都趋向于规则的准确率 f + / n f_+/n f+/n
(3)另一种可使用的评估度量是考虑规则的支持度计数的评估度量。
F O I L 信 息 增 益 = p 1 × ( log 2 p 1 p 1 + n 1 − log 2 p 0 p 0 + n 0 ) FOIL信息增益=p_1 \times (\log_2{\frac{p_1}{p_1+n_1}}-\log_2{\frac{p_0}{p_0+n_0}}) FOIL信息增益=p1×(log2p1+n1p1−log2p0+n0p0)在这种度量中,规则的支持度计数对应于它所覆盖的正例数。假设规则r:A→+覆盖p0个正例和n0个反例,增加新的合取项B,扩展后的规则r‘=A且B→+覆盖p1个正例,和n1个反例。
该度量值与p1和p1/(p1_n1)成正比,所以它倾向于选择那些高支持度计数和高准确率的规则。
规则剪枝,对于Learn——One——Rule函数产生的的规则,也可以像对第四章中的决策树一样剪枝,来改善泛化误差。就像4.4节介绍的那样。
规则提取出来后,顺序覆盖算法必须删除该规则所覆盖的所有正例和反例。
该算法的复杂度几乎线性的随着训练样例的数目增长,并且特别适合为类分布不均衡的数据及建立模型。它也能很好地处理噪声数据集。
RIPPER算法按照类的频率进行排序 ( y 1 , y 2 , ⋯ , y c ) (y_1,y_2,\cdots,y_c) (y1,y2,⋯,yc)其中,y1是最不频繁地类,在第一次迭代中,先把属于 y 1 y_1 y1的样例标记为正例,把其他的样例标记为反例,使用顺序覆盖算法产生规则,直到剩下最后一个类yc,把它作为默认类。
规则增长使用FOIL信息增益来组安泽最佳合取项添加到规则前件中。通过计算 ( p − n ) / ( p + n ) (p-n)/(p+n) (p−n)/(p+n)来判断是否剪枝,其中p,n分别是被覆盖的确认集中的正例与反例数,如果该度量值增加就进行剪枝。
建立规则及规则生成后,他所覆盖的所有正反例都要删除。只要改规则不违反最小描述长度原则的终止条件,就将它添加到规则集中。具体措施需要进一步学习。
现在介绍一种基于决策树生成规则集的方法。
决策树从根节点到叶节点的路径表示为一个分类规则,这样的规则是完全且互斥的。但可以进行简化,尽管简化后不再互斥,但更容易解释。
规则产生 只要简化后的规则的误差率低于原规则的误差率,就保留其中悲观误差率最低的规则。重复进行知道不能再改进为止。
规则排序 C4.5规则算法使用基于类的排序方案定序。同一个类的规则分到同一个子集中。计算每个子集的总描述长度,然后各类按照总描述长度由小到大排序。类的总描述长度等于 L e x c e p t i o n + g × L m o d e l L_{exception}+g\times L_{model} Lexception+g×Lmodel,其中 L e x c e p t i o n L_{exception} Lexception是对误分类样例编码所需要的比特位数, L m o d e l L_model Lmodel是对模型编码所需要的比特位数,而g是调节参数。调节参数取决于模型中冗余属性的数量。
积极学习方法(eager learner):先建模,再预测(一劳永逸)
消极学习方法(lazy learner):比如Rote分类器,记住训练数据,匹配时再分类(现学现卖)
最近邻分类器:把每个样例看做d维空间的一个数据点,d是属性个数。
如果数据点的近邻中有多个类标号,则将该数据点指派到其最近邻的多数类。k值得选择很重要,k太小,分类器容易受到容易受到噪声影响产生过拟合,如果k太大可能会误分类。
k-最近邻分类算法
令k是最近邻数目,D是训练样例集合
for 每个测试样例z=(x',y') do
计算z和每个样例(x,y)∈D之间的距离d(x',x)
选择离x最近的k个样例的集合D_z
y'=argmax∑I(v=y_i)
距离加权表决 y ′ = arg max v ∑ ( x i , y i ) ∈ D i w i × I ( v = y i ) y'=\argmax_v \sum_{(x_i,y_i)\in D_i}w_i \times I(v=y_i) y′=vargmax(xi,yi)∈Di∑wi×I(v=yi)其中,v是类标号,y是一个最近邻的类标号, I ( . ) I(.) I(.)是指示函数,参数为真返回1,否则为0。 w i = 1 / d w_i=1/d wi=1/d,表示远离z的样例对分类的影响变弱。
贝叶斯分类器是一种对属性集和类变量的概率关系建模的方法。
对每个类Y计算后验概率: P ( Y ∣ X ) = P ( Y ) ∏ i = 1 d P ( X i ∣ Y ) P ( X ) P(Y|X)=\frac{P(Y)\prod_{i=1}^dP(X_i|Y)}{P(X)} P(Y∣X)=P(X)P(Y)∏i=1dP(Xi∣Y)由于对所有的Y,P(X)都是固定的,因此只需要计算条件概率就可以了。
对于分类属性 X i X_i Xi,根据类y中属性值等于 x i x_i xi的训练实例的比例就可以了,比如7个还清房贷的人里面有3个结婚,那么就是3/7
朴素贝叶斯分类有两种方法
1.可以把一个连续属性离散化。这要注意,离散区间的数目不能太多也不能太少。
2.可以将设连续变量服从某种概率分布,然后使用训练数据估计分布的参数。比如正态分布,通过求训练记录的均值和方差来估计条件概率。
在计算条件概率的时候P(Y|X),X是一个向量,包含多个属性,我们假设多个属性相互独立,所以应该算多个条件概率的乘积 ∏ P ( X i ∣ Y ) \prod P(X_i|Y) ∏P(Xi∣Y)
上述方法有一个缺点就是,如果有一个属性的类条件概率为0,那么乘积为零。解决该问题的途径就是使用m估计
P ( x i ∣ y j ) = n c + m p n + m P(x_i|y_j)=\frac{n_c+mp}{n+m} P(xi∣yj)=n+mnc+mp其中,n是类 y j y_j yj中的实例总数, n c n_c nc表示类 y j y_j yj的训练样例中的取值 x i x_i xi的样例数,m是称为等价样本大小的参数,而p是用户指定的参数。如果n=0,则条件概率就就是p,因此p可以看做是类y中观察属性值x的先验概率。等价样本大小决定先验概率p与观测概率 n c / n n_c/n nc/n之间的平衡。
当先验概率不同时,决策边界朝着先验概率较小的类移动。
B a t e s e r r o r r a t e = ∫ 0 x ^ P ( Y 1 ∣ X ) d X + ∫ x ^ ∞ P ( Y 2 ∣ X ) d X Bates\ error \ rate =\int_0^{\hat{x}}P(Y_1|X)dX + \int_{\hat{x}}^{\infty}P(Y_2|X)dX Bates error rate=∫0x^P(Y1∣X)dX+∫x^∞P(Y2∣X)dX
该方法不需要给定类的所有属性都条件独立。
贝叶斯信念网络(Bayesian belief networks,BBN ),用图形表示一组随机变量之间的概率关系。它有两个组成部分
如图,D是C的父母,是A的祖先,B是C的子女,B是D的后代
性质1:贝叶斯网络中的一个结点,如果它的父母结点已知,则它的条件独立于它的所有非后代结点。
给定C,B独立于A和D。一条有向路径就是一条规则。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FLmm539Y-1582592758681)(http://image.sciencenet.cn/album/201211/26/15452104kqr04wbr9o66kz.png)]
为了简化模型的计算,我们可以把变量分为原因变量和结果变量,然后规定从原因变量向其对应的结果变量画弧。
1.用图形模型来捕获特定领域的先验知识,网络还可以用来对变量之间的因果依赖关系进行编码
2.构造网络费时费力,但一旦网络结构确定下来,添加新变量就很容易
3.BBN适合处理不完整的数据
4.因为数据和先验知识以概率的方式结合起来了,所以BBN对模型的的过拟合是很鲁棒的。
设计问题
支持向量机可以很好地应用于高维数据,避免了维灾难问题。它使用训练实例的一个子集来表示决策边界,该子集称作支持向量。
线性SVM寻找具有最大边缘的超平面,因此也被称为最大边缘分类器
1线性决策边界
KaTeX parse error: Expected & or \\ or \cr or \end at end of input: … \\ end{cases}
2线性分类器边缘
两个平行的超平面可以表示如下
y = 1 , 如 果 w ⋅ z + b > 0 y = − 1 , 如 果 w ⋅ z + b < 0 y=1 ,如果w·z+b>0\\ y=-1,如果w·z+b<0 y=1,如果w⋅z+b>0y=−1,如果w⋅z+b<0两个超平面可以表示为
b i 1 : w ∙ x + b = 1 b i 2 : w ∙ x + b = − 1 b_{i1}:w\bullet x+b=\ \ \ 1\\ b_{i2}:w\bullet x+b=-1 bi1:w∙x+b= 1bi2:w∙x+b=−1
d = 2 ∣ ∣ w ∣ ∣ d=\frac{2}{||w||} d=∣∣w∣∣2d表示边缘大小
3.学习线性SVM模型
为了学习出 w , b w,b w,b我们得到一个约束
y i ( w ⋅ x i + b ) ≥ 1 , i = 1 , 2 , ⋯ , N y_i(w·x_i+b)\ge 1,i=1,2,\cdots,N yi(w⋅xi+b)≥1,i=1,2,⋯,N
为了求最大边缘,要求 f ( w ) = ∣ ∣ w ∣ ∣ 2 2 f(w)=\frac{||w||^2}{2} f(w)=2∣∣w∣∣2的最小值
于是我们可以综合写成一个拉格朗日函数的形式
L p = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 N ( y i ( w ⋅ x i + b ) − 1 ) L_p=\frac{1}{2}{||w||}^2-\sum_{i=1}^N(y_i(w·x_i+b)-1) Lp=21∣∣w∣∣2−i=1∑N(yi(w⋅xi+b)−1)
通过对 w , b w,b w,b求偏导和KKT条以及把 L p L_p Lp写成对偶形式
决策边界可以表示成 ( ∑ i = 1 N λ i y i x i ⋅ x ) + b = 0 \left(\sum_{i=1}^N \lambda_iy_ix_i·x \right)+b=0 (i=1∑Nλiyixi⋅x)+b=0
b可以通过求解支持向量公式 λ i [ y i ( w ⋅ x i + b ) − 1 ] = 0 \lambda_i[y_i(w·x_i+b)-1]=0 λi[yi(w⋅xi+b)−1]=0得到,由于lambda通过数值计算得到,因此b可能不唯一,它取决于所使用的支持向量,实践中使用b的平均值做决策边界的参数。
类似
当我们遇到非线性的分类情况,很难用线性的超平面来划分。因此我们可以使用属性变换的方法变化坐标系,把非线性空间转换成线性空间,但这会导致维灾难。这个问题在后面的叙述中会提到解决办法
这个过程和学习线性SVM的过程完全相似,惟一的区别在于用 ϕ ( x ) \phi(x) ϕ(x)来替换一切x,其中 ϕ \phi ϕ是x的变换函数
在原属性中计算的相似度函数K称为核函数(ernel function).
在非线性SVM中使用的核函数必须满足Mercer定理。这样我们不必知道 ϕ \phi ϕ的具体形式,因为核函数可以用x与y的点积形式表示。
比如: K ( x , y ) = ( x ⋅ y + 1 ) p K(x,y)=(x·y+1)^p K(x,y)=(x⋅y+1)p、 K ( x , y ) = t a n h ( k x ⋅ y − σ ) K(x,y)=tanh(kx·y-\sigma) K(x,y)=tanh(kx⋅y−σ)
通过聚集多个分类器的预测来提高准确率。这些技术称为组合(ensemble).组合方法有训练数据构建一组基分类器,通过对每个基分类器的预测进行投票来进行分类。
如果基分类器实行互独立的(即他们的误差是不相关的),则仅当超过一半的基分类器都预测错误时,组合分类器才会做出错误预测。这种情况下,组合分类器的误差率为:
e e n s e m b l e = ∑ i = 12 25 C 25 i ε i ( 1 − ε ) ( 25 − i ) e_ensemble=\sum^{25}_{i=12}C_{25}^i\varepsilon^i(1-\varepsilon)^{(25-i)} eensemble=i=12∑25C25iεi(1−ε)(25−i)这里假设有一个25个分类器的组合,每一个基分类器的误差为 ε \varepsilon ε,当 ε > 0.5 \varepsilon\gt0.5 ε>0.5时组合分类器比不上基分类器。
实际上,基分类器很难做到相互独立,当然也不会完全相似,因此组合还是有优势的。
d ( 期 望 误 差 ) = B i a s + V a r i a n c e + N o i s e d(期望误差)=Bias+Variance+Noise d(期望误差)=Bias+Variance+Noise期望误差是一个分类器误分一个给定样本的概率。一般来说,分类器关于它的决策边界性质所做的假定越强,分类器的偏倚就越大。实际决策边界与平均决策边界之间的差反映了分类器的偏倚,决策边界的可变性反映了分类器的方差。
又称自助聚集(boot strap aggregating),是一种根据均匀概率分布从数据集中重复抽样(有放回)的技术。每个自主样本集都和原数据集一样大。一般来说每个自主样本 D i D_i Di大约包含63%的原训练数据。训练过k个分类器后,测试样本被指派到得票最高的类 C ( x ) = arg max y ∑ i δ ( C i ( x ) = y ) C^(x)=\argmax_y\sum_i\delta(C_i(x)=y) C(x)=yargmaxi∑δ(Ci(x)=y)如果参数为真则 δ ( . ) = 1 \delta(.)=1 δ(.)=1,否则等于0
决策树桩(decision stump):他是一个分类器,仅包含一层的二叉决策树,只有一个测试条件 x ≤ k x\le k x≤k,其中k是使得叶结点熵最小的分裂点。
装袋通过降低基分类器方差改善了泛化误差,而且对于噪声数据,装袋不太受过分拟合的影响。装袋的性能依赖于基分类器的稳定性。如果基分类器不稳定那很好,若是稳定的,则误差主要由偏倚产生,分类器达不到改善的效果。
提升是一个迭代过程,用来自适应的改变训练样本的分布,使得基分类器聚焦在那些很难分的样本上。它给每一个训练样本赋一个权值,而且可以在每一轮提升结束时自动的提升权值。权值可以用于
不同的提升算法的差别在于
本节将给出一些为处理不平衡类问题而开发的方法。
在不平衡数据集中,稀有类比多数类更有意义。对于二元分类,稀有类通常记为正类,而多数类被认为是负类。由此我们得到混淆矩阵
度量 | w 1 w_1 w1 | w 2 w_2 w2 | w 3 w_3 w3 | w 4 w_4 w4 |
---|---|---|---|---|
召回率 | 1 | 1 | 0 | 0 |
精度 | 1 | 0 | 1 | 0 |
F β 值 F_{\beta}值 Fβ值 | β 2 \beta^2 β2+1 | β 2 \beta^2 β2 | 1 | 0 |
准确率 | 1 | 1 | 1 | 1 |
其中
F β 值 F_{\beta}值 Fβ值表示召回率与精度之间的一个度量值
接受者操作特征(ROC)曲线是显示分类器真正率和假正率之间折中的一种图形化方法。在一个ROC曲线中,TPR沿y轴绘制,FPR沿x轴绘制。
ROC曲线下方的面积(AUC)提供了一个评价的方法
如果模型是完美的,那么AUC=1
如果模型是随机猜测的,那么AUC=0.5
AUC越大,模型越优。
ROC曲线的绘制是一个连续迭代的过程。
代价矩阵对讲一个类的记录分类到另一个类的惩罚进行编码。 C ( i , j ) C(i,j) C(i,j)表示把一个i类预测成为j的代价。在不平衡类问题中,不同的错误的代价也是不一样的,严重的错误代价更大。
代价信息可以用来:
抽样是处理不平衡问题的另一种方法。主要思想是改变实例的分布,从而帮助稀有类在训练数据集中很好地表示。
现有的技术包括,不充分抽样、过分抽样、和两种技术的混合。
考虑一个100个正例1000个负例的记录
本节给出一些将二类问题推广到多类的方法
基本思想是借助于代码字向传输信息中增加一些冗余,从而能使得接收方能发现接受信息中的一些错误,而且如果错误量少还可能回复原始信息。
对于多类学习,每个类yi用一个长度n的唯一位串来表示,称为它的代码字。然后训练n个二元分类器,预测每个代码字串的二进位。如果一个类的代码字与二元分类器的海明距离最近,那么这个类就是检验实例的预测类。海明距离是他们的不同二进位的数目。