1 - 利用线性模型进行二分类
1.1 - 线性模型
这一部分主要是为了证明为什么可以使用线性回归和逻辑斯蒂回归来做二元分类问题。
我们想要将已知的线性模型应用到二分类甚至是多分类的问题。我们已知的线性模型有如下的三种,它们有一个共同的地方是都会利用输入的特征计算一个加权和
s=wTx
s
=
w
T
x
。
线性分类 linear classification linear classification 不好解, 因为想要最小化 E0/1(w) E 0 / 1 ( w ) (被分错的点的个数)被证明是一个 NP NP 难问题。但相比之下,线性回归和逻辑斯蒂回归很方便就可以最小化 Ein E i n :线性回归使用平方误差 square error square error 时有解析解 (closed-form solution) (closed-form solution) ;逻辑斯蒂回归由于目标函数是凸函数所以可以使用梯度下降法来求解。所以我们想要做的是:因为 linear classification linear classification 不好做,而看起来 linear regression linear regression 或者是 logistic regression logistic regression 在最小化 Ein E i n 这件事情上还是比较简单的。所以我们想要使用线性回归或者是逻辑斯蒂回归作为线性分类的一个替代工具。也就是现在将所有的方法都用在分类问题上,这样的话输出都会被限制在集合 {+1,−1} { + 1 , − 1 } 里面。
1.2 - 损失函数(error function)
首先对三种 error function error function 进行整理, 得到从 s s 到的计算公式, 其中 s=wTx s = w T x 。
- 线性分类
h(x)err(h,x,y)err0/1(s,y)=sign(s)=|[h(x)≠y]|↓=|[sign(s)≠y]|=|[sign(ys)≠1]|(2577)(2578)(2579)(2580)(2581) (2577) h ( x ) = s i g n ( s ) (2578) e r r ( h , x , y ) = | [ h ( x ) ≠ y ] | (2579) ↓ (2580) e r r 0 / 1 ( s , y ) = | [ s i g n ( s ) ≠ y ] | (2581) = | [ s i g n ( y s ) ≠ 1 ] | - 线性回归
h(x)err(h,x,y)errSQR(s,y)=s=(h(x)−y)2↓=(s−y)2=(s−y)2y2=(sy−y2)2=(sy−1)2(2582)(2583)(2584)(2585)(2586)(2587)(2588) (2582) h ( x ) = s (2583) e r r ( h , x , y ) = ( h ( x ) − y ) 2 (2584) ↓ (2585) e r r S Q R ( s , y ) = ( s − y ) 2 (2586) = ( s − y ) 2 y 2 (2587) = ( s y − y 2 ) 2 (2588) = ( s y − 1 ) 2 - 逻辑斯蒂回归
h(x)err(h,x,y)errCE(s,y)=11+exp(−wTx)=θ(wTx)=θ(s)=−lnh(yx)↓=ln(1+exp(−ys))(2589)(2590)(2591)(2592) (2589) h ( x ) = 1 1 + e x p ( − w T x ) = θ ( w T x ) = θ ( s ) (2590) e r r ( h , x , y ) = − l n h ( y x ) (2591) ↓ (2592) e r r C E ( s , y ) = l n ( 1 + e x p ( − y s ) )
通过上面的这些操作,每一个模型的 error error 的计算方法中都出现了 ys ys ,我们接下来要做的就是看看这些 error error 和 ys ys 的关系。
为什么要关注
ys
ys
这个量呢?我们简单的看看
ys
ys
的物理意义:对于分类来说,我们希望
ys
ys
越大越好, 首先如果该值是正的, 说明起码分类正确了, 如果这个值还很大,那么说明置信度很高。
可视化一下我们得到了三个
error funciton
error funciton
:横轴是
ys
ys
的值,纵轴是
err
err
的值。
- 0/1: err0/1(s,y)=|[sign(sy≠1)]| 0 / 1 : e r r 0 / 1 ( s , y ) = | [ s i g n ( s y ≠ 1 ) ] |
- sqr: errsqr(s,y)=(ys−1)2 s q r : e r r s q r ( s , y ) = ( y s − 1 ) 2
- ce: errce(s,y)=ln(1+exp(−ys)) c e : e r r c e ( s , y ) = l n ( 1 + e x p ( − y s ) )
三个error function
通过比较在x = 1附近的 0/1 error 0/1 error 和 square error square error 可以得到:如果有一个样本在 square error square error 上的值很低的话,那么这个样本在 0/1 error 0/1 error 上也会得到比较低的值。但是如果样本在 square error square error 上的值比较大, 很左边或者是很右边, 那么我们是没有办法判别这个样本的 0/1 error 0/1 error 是小还是大的。所以当能把样本的 square error square error 做到很低的时候,可以在一定的程度上保证 0/1 error 0/1 error 也很低。
通过比较 0/1 error 0/1 error 和 corss entropy error corss entropy error 的函数我们可以得到:当 corss entropy error corss entropy error 小的时候, 0/1 error 0/1 error 也是很小的; 0/1 error 0/1 error 比较小的时候, corss entropy error corss entropy error 也是很小的。
将 corss entropy error corss entropy error 换底之后得到下面的 scaled ce error:errsce(s,y)=log2(1+exp(−sy)) scaled ce error : e r r s c e ( s , y ) = l o g 2 ( 1 + e x p ( − s y ) ) ,这样一来, corss entropy error corss entropy error 就一定会是 0/1 error 0 / 1 e r r o r 的上界。我们得到的新的图像如下:
上述是通过函数图像的直观理解,接下来开始利用以上提到的 error function error function 来说明为什么 linear regression l i n e a r r e g r e s s i o n 或者是 logistics regression l o g i s t i c s r e g r e s s i o n 可以是一个好的二分类的方法。
如果想做要计算分类的错误的话,它的上限如下:
那么我们就可以得到:(err是E的平均)
同样也可以得到:
根据VC维的理论我们可以得到:
所以如果我们能够把逻辑斯蒂回归中的 cross entropy error c r o s s e n t r o p y e r r o r 做到最小的话,从某种角度上来说也就是把 0/1 error 0 / 1 e r r o r 做到了最小。或者说把 square error s q u a r e e r r o r 最小化也是在间接的最小化 0/1 error 0 / 1 e r r o r , 只不过从图中可以看得出来, square error s q u a r e e r r o r 是 0/1error 0 / 1 e r r o r 的一个更为宽松的上界,这就表示也可以把 linear regression l i n e a r r e g r e s s i o n 用在 linear classification l i n e a r c l a s s i f i c a t i o n 上。我们称之为 regression for classification。 r e g r e s s i o n f o r c l a s s i f i c a t i o n 。
Regression for Classification Regression for Classification
- run logisitic/linear regression on D with yn∈{+1,−1} to get wreg run logisitic/linear regression on D with y n ∈ { + 1 , − 1 } to get w r e g
- return g(x)=sign(wTregx) return g ( x ) = s i g n ( w r e g T x )
1.3 - 小结
- 如果我们有一个二分类的问题, linear regression l i n e a r r e g r e s s i o n 计算非常的方便,但是太为宽松(从图中可以得到),所以我们通常是使用 linear regression l i n e a r r e g r e s s i o n 的结果作为 PLA/pocket/logistic regression P L A / p o c k e t / l o g i s t i c r e g r e s s i o n 的初始的 w0 w 0 值。 linear regression sometimes used to set w0 for PLA/pocket/logistic regression linear regression sometimes used to set w 0 for PLA/pocket/logistic regression
- 对于二分类这个其实比较困难的问题,在每一轮中 logistic regression l o g i s t i c r e g r e s s i o n 和 pocket p o c k e t 的时间复杂度其实是差不多的,所以我们通常选用 logistic regression l o g i s t i c r e g r e s s i o n 而不使用 pocket p o c k e t 来做 binary classification b i n a r y c l a s s i f i c a t i o n , 由于它比较好的 optimization o p t i m i z a t i o n 性质
2 - 随机梯度下降算法(SGD)
PLA P L A 算法和 gradient descent g r a d i e n t d e s c e n t 算法都可以看成是 iterative optimization i t e r a t i v e o p t i m i z a t i o n (一步一步的接近最佳的 wOPT w O P T )。不同的是: PLA P L A 算法每一次只看一个数据点来更新来 w w (如果这个点被划分错误了);而在中的 gradient descent g r a d i e n t d e s c e n t 算法每一次对 w w 的更新都要扫描所有的样本。这一小节我们想要做的是优化梯度下降算法。让和 PLA P L A 一样快。目前来说, logistic regression l o g i s t i c r e g r e s s i o n 是和 pocket p o c k e t 算法差不多快的。
2.1 - 逻辑斯蒂回归中的梯度下降算法
逻辑斯蒂回归使用梯度下降算法更新权重的规则:
我们看到在更新的时候有 1N∑Nn=1 1 N ∑ n = 1 N 这样的操作,那么我们可以随机的抽取一个样本替代这个加和取平均的操作(比如这里有1w个数字,我们把这1w个数字求和取平均的值应该差不多等于我们只抽取几个数字来求和取平均的值,应该也差不多等于我们随机抽取一个数字的值)。只在这一个样本点上求取梯度值,即只针对一个点的 error error 求取偏微分,这个值称为随机梯度 stochastic gradient stochastic gradient 。这样的话整体的梯度可以看成是这个随机梯度的期望值。
2.2 - 随机梯度下降算法(stochastic gradient descent)
使用随机的梯度取代真正的梯度:
算法的优点:
- 如果迭代足够多次的话, 真实的梯度和随机的梯度应该是会差不多接近的。
- 简单,不再需要对所有的点计算梯度,而只计算一个点的梯度。在大数据的背景下这样的方式会很有用。
- 当资料本身就是一笔一笔的来的时候( online learning o n l i n e l e a r n i n g ), stochastic gradient descent s t o c h a s t i c g r a d i e n t d e s c e n t 会很适合这样的场景。
算法的缺点:
- 算法在性质上可能会不稳定。特别是当步长很大的时候。
公式 (1) ( 1 ) 和我们之前看到过的 PLA P L A 算法的更新规则非常的相似。
PLA P L A :
wt+1⟵wt+1⋅|[yn≠sign(wTtxn)]| (ynxn) w t + 1 ⟵ w t + 1 ⋅ | [ y n ≠ s i g n ( w t T x n ) ] | ( y n x n )其中如果 ◯ ◯ 成立, |[◯]|=1 | [ ◯ ] | = 1 , 否则 |[◯]|=0 | [ ◯ ] | = 0
SGD logistic regression S G D l o g i s t i c r e g r e s s i o n :
wt+1⟵wt+η⋅θ(−ynwTtxn)(ynxn) w t + 1 ⟵ w t + η ⋅ θ ( − y n w t T x n ) ( y n x n )
SGD logistic regression ≈'soft' PLA
SGD logistic regression
≈
'soft' PLA
即使用
SGD
S
G
D
算法的
logistic regression
l
o
g
i
s
t
i
c
r
e
g
r
e
s
s
i
o
n
可以看成是‘软’的
PLA
P
L
A
,因为不同于
PLA
P
L
A
,不再只是看错了没有, 而是看看错了多少, 错的多就更新的多一点, 错的少就更新的少一点。
- 当 ynwTtxn≪0 y n w t T x n ≪ 0 ,说明样本 (xn,yn) ( x n , y n ) 被划分错了, 此时 θ(−ynwTtxn)≈1 θ ( − y n w t T x n ) ≈ 1 ,也就是说,错的多,更新的多。
- 当 ynwTtxn≫0 y n w t T x n ≫ 0 ,说明样本 (xn,yn) ( x n , y n ) 被划分对了, 此时 θ(−ynwTtxn)≈0 θ ( − y n w t T x n ) ≈ 0 ,也就是说,错的少,基本不用更新。
通过比对上面的两个式子我们可以得到
- 逻辑斯蒂回归使用随机梯度下降算法大概相当于是一个 soft s o f t 的 PLA P L A 算法。在 PLA P L A 算法中 |[yn≠sign(wTtxn)]| | [ y n ≠ s i g n ( w t T x n ) ] | 的取值是0或者1,而在 SGD logistic regression S G D l o g i s t i c r e g r e s s i o n 中 θ(−ynwTtxn) θ ( − y n w t T x n ) 的取值在0和1之间。
- 当 η=1 η = 1 并且 wTtxn w t T x n 非常大的时候(这是 θ=0/1 θ = 0 / 1 ), PLA P L A 算法和 SGD logistic regression S G D l o g i s t i c r e g r e s s i o n 算法几乎是一样的。
现在有两个问题:
- 如何决定停止条件:因为不再扫描所有的点,所以不知道是不是已经梯度为0了,所以一般的停止条件是根据预先设定的迭代次数。
- 如何设置步长 η η :如果X的范围不是很糟糕的话,0.1还不错,不过这只是个经验值,会有专门的方法来帮助我们选择参数,我们之后也会介绍到。
- 如果把
SGD
S
G
D
使用在
linear regression
l
i
n
e
a
r
r
e
g
r
e
s
s
i
o
n
上, 更新的方向如下:
2(yn−wTtxn)xn 2 ( y n − w t T x n ) x n
SGD linear regression SGD linear regression
wt+1=wt+η(yn−wTtxn)xn w t + 1 = w t + η ( y n − w t T x n ) x n
也是朝着 x x 的方更新,真实值和预测值的差异越大,更新的越大。
3 - 利用逻辑斯蒂回归解决多分类问题
之前的内容只能用来解决是非题,即分类问题,现在我们想要做的是多选题。即判断一个样本属于多个类别中的哪一个,接下来我们想要做的是将二元分类的方法延伸到可以帮助我们求解多分类的问题。
具体的思想就是,将多元分类转化为多个二元分类问题, 每一次只识别一个类型。
我们可以把这个问题转换为一个二分类的问题,即首先我们关心数据是 或不是
□
◻
,是的话其label记为1, 不是的话其label记为0。 (对应到我们熟悉的二分类问题就是将
□
◻
记为
◯
◯
, 将其他的记为
×
×
), 得到如下图所示的一个新的二分类问题,这个时候就可以使用
binary classification
b
i
n
a
r
y
c
l
a
s
s
i
f
i
c
a
t
i
o
n
算法来解决。
使用相同的方法解决以下的三个二分类问题,即针对每一个类别做一个该类别和其他的类别的二元分类问题,把该类和其他的类别分开。
通过这样的步骤我们就得到了如下的四个分类器:
将4次二元分类的结果综合起来得到如下图所示的多分类器:这个多远的分类器告诉我们一些结果:
- 在黑色圈起来的部分中的数据点可以很明确的知道自己属于哪一个类别;
- 在红色区域中的数据点会同时属于两个类别;
- 在蓝色区域中的数据点没有类别。
缺点:所以这样的分类器对于蓝色区域和红色区域中的样本是不确定的。
3.1 - 利用逻辑斯蒂回归进行改进
同样是上面的任务, 同样是每一次划分一个类别,但是不再是给出“是”或者“不是”的结果,而是使用
logistic regression
logistic regression
给出一个模糊的边界。即给出每个数据点属于某个类别的概率(下图中颜色越蓝表示概率越接近1(正例),颜色越红表明概率越接近0(负例),颜色越白表明概率越接近0.5(难以辨别))。同样是进行4次二元分类分别得到如下的结果:
综合上述的结果,得到最后的一个多元的分类器如下:因为在每一个数据点(这个例子中是二维平面上的每一个点),上述的四个二元分类器都会给出该点属于某一个类别的一个概率,选取4个概率中值最高的分类器对该数据点的划分结果作为该点的类别就可以了。
分类器的表达式:
在上述的例子中k = 4, 或者不需要使用 θ θ , 因为该函数是单调的。
3.2 - 多元分类算法OVA Decomposition
One-Versus-All(OVA) Decomposition
- 对于每一个类别
k
k
,通过在数据集上使用逻辑斯蒂回归得到
wk
w
k
,
其中 Dk={(xn,y′n=2|[yn=k]|−1)}Nn=1 D k = { ( x n , y n ′ = 2 | [ y n = k ] | − 1 ) } n = 1 N (是这个类的其 y y 为,不是这个类的其 y y 为) - 得到多元分类器 : g(x)=argmaxk∈y wTkx g ( x ) = a r g m a x k ∈ y w k T x
Decomposition
Decomposition
:是指将原来的多分类问题拆成多个二分类问题
OVA
OVA
:是指每次对一个类别和其他的所有的类别进行分类
优点:
- 有效率,可以使用任何和逻辑斯蒂回归相似的算法来进行计算,只要是分类的结果输出的也是可以比大小的实数值就行。
- 当面对的是一个K分类的问题的时候,我们其实要做的是 K K 个,每一个 logistic regression l o g i s t i c r e g r e s s i o n 所用的资料和原来的资料其实并没有差太远,只是将 label l a b e l 换掉了而已。值得一提的是, 这 K K 个不同问题我们是可以分布在 K K 个不同的机器上运行的。所以这是一个很容易并行处理的算法。
缺点:
- 当很大,即类别很多的时候,会有数据不平衡的问题,
4 - 利用二元分类解决多分类问题
上一小节讲到使用 OVA(One-Versus-All) OVA(One-Versus-All) 进行多元分类的时候,当 K K 的数量很大的时候,很有可能会出现数据不平衡的问题。 也就是只有很少量的为 1 1 的数据, 其余的都是为 0 0 的数据。这样就会造成分类的结果不好。 为了避免这种情况的发生,我们采用的方法是:每一次只选择两个类别进行分类(例如对于猫, 狗,汽车这样的三分类问题,分别对(猫, 狗),(猫, 汽车),(狗, 汽车)做一次二元分类;而在每一次分类中所有的类都参与, 同样是上面的问题, OVA OVA 要做的是(猫, (狗,汽车)), (狗, (猫, 汽车)), (汽车, (猫, 狗))这样的三个二分类问题)。在如下的四个类别的分类问题中,按照上述的思路,一共需要进行6次二元分类问题的求解。(每次选两个类进行划分 C24=4!2!(4−2)!=6 C 4 2 = 4 ! 2 ! ( 4 − 2 ) ! = 6 )
6次二元分类问题的求解结果
将这些二元分类的结果进行合并得到如下最终的4元分类器,
得到了分类器之后怎么对新样本进行分类?
对于一个新的样本,分别使用这个6个分类器进行计算,计算得到的结果中,类别最多的类就该样本的类。具体的细节是,对于任意一个给定的数据点,分别使用上面得到的6个二元的分类器来进行类别的划分,选择6个划分结果中出现次数最多的作为该类的类别。例如6个分类器的分类结果分别是:
□,□,□,◊,★,★
◻
,
◻
,
◻
,
◊
,
★
,
★
, 那么我们判断该点的最终的类别是
□
◻
。
4.1 - 多元分类算法OVO
One-versus-one(OVO) Decomposition One-versus-one(OVO) Decomposition
- 对于数据集中的任意两个类别
k,l
k
,
l
, 通过在数据集
Dk,l
D
k
,
l
上使用任一种二元分类算法来得到
wk,l
w
k
,
l
。
其中数据集如下:
Dk,l={(xn,y′n=2|[yn=k]|−1):yn=k or yn=l} D k , l = { ( x n , y n ′ = 2 | [ y n = k ] | − 1 ) : y n = k o r y n = l } 。(是 k k 类的样本其设置为 1 1 ,是类的样本其 label l a b e l 设置为 0 0 ) - 在得到了所有的分类器之后,通过一个投票函数来决定一个新的数据的属类: g(x)=vote(wTk,lx) g ( x ) = v o t e ( w k , l T x )
优点:
- 虽然如果共有4个类别,却要做
C42=6
C
2
4
=
6
次二元分类,但是每一次二元分类涉及到的数据量很少(只包括两个类的数据)。
- 可以使用任意的 binary classification b i n a r y c l a s s i f i c a t i o n 的方法。
- 可以并行计算
缺点:
- 预测的时间比较长:因为要使用得到的6个分类器来进行投票决定。
- 需要更多的存储:同样是因为有更多的 w w ,所以需要占用更多的空间。
5 - 小结
首先声明了三个都可以用来做 binary classification b i n a r y c l a s s i f i c a t i o n 。然后将解决 logistics regression l o g i s t i c s r e g r e s s i o n 的方法从 GD G D 算法改进到了 SGD S G D 算法,然后发现这样的话 logistics regression l o g i s t i c s r e g r e s s i o n 和 PLA P L A 算法看起来原理差不多。第三部分和第四部分给出了两种不同的做多类别分类的方法 OVA O V A 和 OVO O V O 。