分类法的例子:决策树分类法、基于规则的分类法、神经网络、支持向量机、朴素贝叶斯分类法
混淆矩阵 (confusion matrix):用 f i j f_{ij} fij表示实际类标号为类 i i i但却被预测为类 j j j的记录数。混淆矩阵用来衡量分类模型的性能
预测的类 | |||
---|---|---|---|
类=1 | 类=0 | ||
实际的类 | 类=1 | f 11 f_{11} f11 | f 10 f_{10} f10 |
– | 类=0 | f 10 f_{10} f10 | f 00 f_{00} f00 |
准 确 率 ( a c c u r a c y ) = 正 确 预 测 数 预 测 总 数 准确率(accuracy)=\frac{正确预测数}{预测总数} 准确率(accuracy)=预测总数正确预测数
三种结点的定义
非终结点都有一个属性测试条件,用来选择分支
最优决策树需要指数级的计算往往不可取,因此采取一系列局部最优决策来构造决策树。
设 D t D_t Dt是与结点t相关联的训练记录集, { y c } \{y_c\} {yc}是类标号,hunt算法定义如下:
设 p ( i ∣ t ) p(i|t) p(i∣t)表示给定结点 t t t中属于类 i i i的记录所占的比例,有时省略t,直接用 p ( i ) p(i) p(i)表示。选择最佳划分的度量通常根据划分后子女结点不纯性的程度。不纯性程度越低,类分布 ( p 1 , ⋯ , p i ) (p_1,\cdots,p_i) (p1,⋯,pi)就越倾斜。
不纯性度量的例子包括:
熵 E n t r o p y ( t ) = − ∑ i = 0 c − 1 p ( i ∣ t ) l o g 2 p ( i ∣ t ) G i n i ( t ) = 1 − ∑ i = 0 c − 1 [ p ( i ∣ t ) ] 2 C l a s s i f i c a t i o n e r r o r ( t ) = 1 − max i [ p ( i ∣ t ) ] 熵 Entropy(t)=-\sum_{i=0}^{c-1}p(i|t)log_2p(i|t)\\ \\ Gini(t)=1-\sum_{i=0}^{c-1}[p(i|t)]^2\\ Classification\quad error(t)=1-\max_i[p(i|t)] 熵Entropy(t)=−i=0∑c−1p(i∣t)log2p(i∣t)Gini(t)=1−i=0∑c−1[p(i∣t)]2Classificationerror(t)=1−imax[p(i∣t)]
其中c是类的个数,不同的度量变化趋势是一致的,但值不同。
父结点与子女结点的不纯程度之差越大,测试条件的效果就越好。增益 Δ \Delta Δ可以用来确定划分效果:
Δ = I ( p a r e n t ) − ∑ j = 1 k N ( v i ) N I ( v j ) \Delta=I(parent)-\sum_{j=1}^{k}\frac{N(v_i)}{N}I(v_j) Δ=I(parent)−j=1∑kNN(vi)I(vj)其中 I ( . ) I(.) I(.)是给定结点的不纯性度量, N N N是父结点上的记录总数,k是属性值个数, N ( v j ) N(v_j) N(vj) 是与子女结点 v j v_j vj相关联的记录个数。
I ( p a r e n t ) I(parent) I(parent)是不变的,所以最大化增益等价于最小化子女结点的不纯性度量的加权平均值。
当选择熵作为不纯性度量时,
熵的差就是信息增益(information gain) Δ i n f o \Delta_{info} Δinfo
数据划分的不纯性指标的加权平均值越小,数据划分越合适。多路划分往往比二元划分更合适,二元划分可以看做是多路划分合并了某些输出得到的。
在对连续性属性划分时,为了选取划分点,节约时间,我们不使用穷举法,而是先将所有属性值排序,把两个相邻的属性值的中间值作为候选划分点,进一步简化,我们不必考虑相同类标号之间的划分点。
对于像顾客ID这样的划分,每个样本在属性上的值都是唯一的,每个划分相关联的记录太少,以至于不能做出可靠的预测。解决这个问题的策略有两种。
Tree Growth
1:if stopping_cond(E,F)=ture then %判断是否终止决策树的增长,通过检查所有记录是否都属于同一类或者都具有相同的属性值或者记录数小于某个阈值
2: leaf=createNode() %创建一个结点,这个结点可能是一个测试条件,也可能是一个类标号
3: leaf.label=Classify(E) %为叶结点确定类标号leaf.label=argmax p(i|t)返回最大化p(i|t)的参数值i
4:else
6: root=creatNode() %创建一个根结点
7: root.test_cond=find_best_solit(E,F) %选择最适的属性最为测试条件
8: 令V={v|v是root.test_cond的一个可能的输出}
9: for 每个v∈V do
10: E_v={e|root.test_cond(e)=v,并且e∈E} %E是一个训练记录集,F表示属性集
11: child=TreeGrowth(E_v,F)
12: 将child作为root的派生结点添加到树中,,并将(root→child)标记为v
13: end for
14:end if
15:return root
允许测试条件涉及多个属性,如 x + y < 1 x+y<1 x+y<1,产生更紧凑的决策树到那时计算会变得很复杂
创建复合属性,代表已有属性的算术或逻辑组合。在决策树构造之前就增广到数据集里。花费很低,但会产生冗余属性。
10.树剪枝(tree—pruning)减少决策树规模,防止过拟合。
分类模型的误差分为两种,训练误差和泛化误差。训练误差随着模型复杂度升高而降低,泛化误差则先降低后升高。
当决策树的叶结点没有足够的代表性样本时,,很可能做出错误的预测,即错误的生成子女结点。
设 T 0 T_0 T0是初始决策树, T x T_x Tx是插入属性x的内部结点后的决策树。原则上,如果观察到 Δ ( T 0 , T x ) \Delta(T_0,T_x) Δ(T0,Tx)大于某个预先设定的阈值,就可以将x添加到树中。但是在实践中可能会有很多个x, { x 1 , ⋯ , x k } \{x_1, \cdots ,x_k\} {x1,⋯,xk},因此其实是在测试 Δ ( T 0 , T m a x ) \Delta(T_0,T_{max}) Δ(T0,Tmax)。随着候选个数k的增加, Δ > α \Delta>\alpha Δ>α的几率也在增大。除非根据k修改增益函数 Δ \Delta Δ或者 α \alpha α,否则算法会在不经意间增加一些欺骗性的结点导致过分拟合。
当选择属性 x m a x x_{max} xmax的训练记录很小时, Δ ( T 0 , T m a x ) \Delta(T_0,T_{max}) Δ(T0,Tmax)方差会很大。找到 Δ ( T 0 , T m a x ) > α \Delta(T_0,T_{max})>\alpha Δ(T0,Tmax)>α的几率也就增大了。决策树增长到一定深度时就会发生这种情况,降低结点所覆盖的记录数,提高了增加不必要结点的可能性。大量候选属性和少量训练记录都会导致过分拟合。
假设训练数据集可以很好的代表整体数据,即训练误差等于泛化误差
定义 奥卡姆剃刀:给定两个具有相同泛化误差的模型,较简单的模型比复杂的模型更可取
所有的事情都应该尽可能简单,但不是简化
\qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad ——爱因斯坦
下面介绍两种把模型复杂度与分类模型评估结合在一起的方法
悲观误差评估(pessimistic error estimate)
决策树T的悲观误差估计 e g ( T ) e_g(T) eg(T)表示为
e g ( T ) = ∑ i = 1 k [ e ( t i ) + Ω ( t i ) ] ∑ i = 1 k n ( t i ) = e ( T ) + Ω ( T ) N t e_g(T)=\frac{\sum_{i=1}^k[e(t_i)+\Omega(t_i)]}{\sum_{i=1}^kn(t_i)}=\frac{e(T)+\Omega(T)}{N_t} eg(T)=∑i=1kn(ti)∑i=1k[e(ti)+Ω(ti)]=Nte(T)+Ω(T)其中 n ( t ) n(t) n(t) 是结点t分类的训练记录数, e ( t ) e(t) e(t)是被误分类的记录数。k是决策树的叶结点数, e ( T ) e(T) e(T)是决策树的总训练误差, N t N_{t} Nt是训练记录数, Ω ( t i ) \Omega(t_i) Ω(ti)是每个结点 t i t_i ti对应的罚项。
对于二叉树来说,如果罚项为1,那么说明,除非增加一个结点能够减少一个以上的误分类,否则就不再增加结点。
最小描述长度原则(minimum description length MDL)
通过已知的A建模并传送类标号给B,传输的总代价是
总 代 价 = 模 型 编 码 的 开 销 + 误 分 类 记 录 编 码 的 开 销 总代价=模型编码的开销+误分类记录编码的开销 总代价=模型编码的开销+误分类记录编码的开销
具体开销方法不唯一,自查。
泛化误差也可以用训练误差的统计修正来估计。统计修正通常是计算训练误差的上界,考虑到达决策树一个特定叶结点的训练记录数。
在决策树算法C4.5中,假设每个叶结点上的错误服从二项分布。用正态分布近似二项分布 e u p p e r ( N , e , α ) = e + z α / 2 2 2 N + z α / 2 e ( 1 − e ) N + z α / 2 2 4 N 2 1 + z α / 2 2 N e_{upper}(N,e,\alpha)=\frac{e+\frac{z_{\alpha /2}^2}{2N}+z_{\alpha /2}\sqrt{\frac{e(1-e)}{N}+\frac{z_{\alpha /2}^2}{4N^2}}}{1+\frac{z_{\alpha /2}^2}{N}} eupper(N,e,α)=1+Nzα/22e+2Nzα/22+zα/2Ne(1−e)+4N2zα/22
其中 α \alpha α是置信水平, z α / 2 z_{\alpha /2} zα/2是标准正态分布的标准化值,N是计算e的训练记录总数
将训练集分成两个较小的子集,一个用于训练,另一个叫做确认集,用于估计泛化误差。
该方法通过控制参数得到不同的模型,直到达到最低的错误率。
前面介绍的是估计分类模型泛化误差的方法,来防止过拟合。下面介绍两种在决策树归纳上避免过分拟合的策略
先剪枝(提前终止规则):通过设定一些阈值来提前终止,但阈值往往很难确定,既不能太高也不能太低。
后剪枝:先生成最大规模的树,然后自下而上剪枝。剪枝有两种做法(1)子树提升(subtree rasing):用新的叶结点替换子树,该结点的类标号 由子树下记录中的多数类确定。 (2)子树替换(subtree replacement)用子树中最常使用的分支代替子树。后剪枝的结果优于先剪枝但会消耗较多的计算量,而且剪枝后,一部分计算量被浪费了。
这一节回顾了一些常用的评估分类器性能的方法
一部分训练,一部分检验。局限性在于:(1)训练样本减少,模型不如使用全部记录好(2)模型可能依赖训练集和检验集的构成,一方面训练集越小,方差越大,另一方面,在一个子集中超出比例的类在另一个子集中就低于比例,反之亦然。
即多次重复保持方法。缺陷在于训练集减少,和没有控制每个记录用于训练和检验的次数,因此有些用于训练的记录使用的频率可能比其他记录高得多
一分为多,每一个子集检验,剩下的训练。k折交叉检验.缺点是开销很大。
之前的方法都是不放回抽样,自助法(bootstrap)是有放回的抽样。
原始数据有N个记录,一个记录被抽到的概率是0.632,没有被抽到的做检验集,得到的自主样本准确率的一个估计 ε i \varepsilon_i εi.抽样b次,产生b个自主样本。总准确率计算如下
a c c b o o t = 1 b ∑ i = 1 b ( 0.632 × ε i + 0.368 × a c c s ) {acc}_{boot}=\frac{1}{b} \sum_{i=1}^{b}(0.632 \times \varepsilon_i+0.368\times acc_s) accboot=b1i=1∑b(0.632×εi+0.368×accs)
预测检验预测类标号的任务可以被看做二项式实验。给定一个N个记录的检验集。N充分大时用正态分布近似,推导出准确率的置信区间
P ( − Z α / 2 < = a c c − p p ( 1 − p ) / N < = Z 1 − α / 2 ) = 1 − α P(-Z_{\alpha /2}<=\frac{acc-p}{\sqrt{p(1-p)/N}}<=Z_{1-\alpha/2})=1-\alpha P(−Zα/2<=p(1−p)/Nacc−p<=Z1−α/2)=1−α
Z是在置信水平 ( 1 − α ) (1-\alpha) (1−α)下的置信界限,acc表示准确率,p表示检验正确的概率。通过查表可知不同置信水平下的 Z α / 2 Z_{\alpha/2} Zα/2
考虑一对模型 M 1 M_1 M1、 M 2 M_2 M2,他们两个独立的检验集 D 1 D_1 D1和 D 2 D_2 D2上进行评估,令 n i n_i ni是 D i D_i Di中的记录数, M 1 M_1 M1在 D 1 D_1 D1的错误率为 e 1 e_1 e1,目标是检验 e 1 e_1 e1和 e 2 e_2 e2 的观测差是否统计显著。
设检验集充分大,可以用正态分布近似,,令 d = e 1 − e 2 d=e_1-e_2 d=e1−e2.d的方差为
σ d 2 ≈ σ ^ d 2 = e 1 ( 1 − e 1 ) n 1 + e 2 ( 1 − e 2 ) n 2 \sigma^2_d\approx \hat{\sigma}^2_d=\frac{e_1(1-e_1)}{n_1}+\frac{e_2(1-e_2)}{n_2} σd2≈σ^d2=n1e1(1−e1)+n2e2(1−e2)
最后在置信水平 ( 1 − α ) % (1-\alpha)\% (1−α)%下, d t d_t dt的置信区间由下式: d t = d ± z α / 2 σ ^ d 2 d_t=d\pm z_{\alpha/2}\hat{\sigma}^2_d dt=d±zα/2σ^d2
假设我们想用k折交叉验证的方法比较两种分类法的性能。 M i j M_{ij} Mij表示分类计数 L i L_i Li在第j次迭代产生的模型,观察的差的总方差用下式进行估计:
σ ^ d c v 2 = ∑ j = 1 k ( d j − d ˉ ) k ( k − 1 ) \hat{\sigma}^2_{d^{cv}}=\frac{\sum_{j=1}^{k}(d_j-\bar{d})}{k(k-1)} σ^dcv2=k(k−1)∑j=1k(dj−dˉ)
其中 d ˉ \bar{d} dˉ是平均差。对于这个方法我们需要用 t t t分布计算 d c v d^{cv} dcv的置信区间:
d c v = d ˉ ± t ( 1 − α ) , k − 1 σ ^ d c v 2 d^{cv}=\bar{d}\pm t_{(1-\alpha),k-1}\hat{\sigma}^2_{d^{cv}} dcv=dˉ±t(1−α),k−1σ^dcv2
系数 t ( 1 − α ) , k − 1 t_{(1-\alpha),k-1} t(1−α),k−1可以通过两个参数(置信水平(1-a)和自由度k-1)查概率表得到