线性分类-思维导图
线性回归 f ( w , b ) = w T x + b , x ∈ R p f(w,b)=w^{T}x+b, x \in {R^p} f(w,b)=wTx+b,x∈Rp是机器学习的核心。线性回归有三个属性:线性
、全局性
、数据未加工
。其他机器学习的方式都是打破这三个属性的某一个或某几个而提出的。这这些和线性回归共同构成了机器学习方法。
线性分类是打破了线性回归的全局非线性,线性回归一般是通过线性回归函数得出结论后直接输出,而线性分类是将线性回归得到的函数输入激活函数,激活函数是非线性的。
线性分类分为硬分类和软分类。其中硬分类是输出结果就一个集合,集合元素仅有两个0和1。而软分类输出结果则是0-1的一个区间,概率。软分类可以分为生成式和判别式。其中大名鼎鼎的logistic regression就是软分类,大家不要被它的名字误导了,虽然它叫回归,实际上它是用来处理分类问题的。
另外,我们还可以从降维的角度来考虑,原本是多维,然后降维或投影到0,1上来了
Background
线性回归是机器学习的核心。线性回归有三个属性:线性
、全局性
、数据未加工
。其他机器学习的方式都是打破这三个属性的某一个或某几个而提出的。这这些和线性回归共同构成了机器学习方法。
线性分类打破的是非线性,将得到的线性回归函数 f ( w , b ) = w T x + b , x ∈ R p f(w,b)=w^{T}x+b, x \in {R^p} f(w,b)=wTx+b,x∈Rp作为激活函数的输入,输出分类结果。分类又可以分为硬分类和软分类。
另外,我们还可以从降维的角度来考虑,原本是多维,然后降维或投影到0,1上来了.
perceptron
属于,线性分类,硬分类方法
思想:错误驱动
策略:Loss Function: 被错误分类点的个数
分类成+1 -1
两类
模型:
f ( x ) = s i g n ( w T x ) x ∈ R p , w ∈ R p f(x) = sign(w^{T}x) \\x \in R^{p}, w \in R^{p} f(x)=sign(wTx)x∈Rp,w∈Rp
一般使用感知机算法有个前提,那就是数据线性可分,如果数据线性不可分,那就可以用pocket algorithm
,它允许错误分类存在。
感知机是线性分类硬输出的一种方法,其思想为错误驱动
,就是使得被错误分类的样本点数
最少。是一个很简单的算法,其实现算法使用随机梯度算法SGD进行,通过SGD确定 Δ w \Delta w Δw的大小。
需要实践下这个算法才有感觉,现在还没有感觉。主要问题出现在不理解 y i w T x i y _{i} w^{T} x _{i} yiwTxi的具体含义,需要一个实际的例子来说明。
Fisher
属于,线性分类,硬分类方法
类内小、类间大
,高内聚、低耦合
,降维
从降维角度出发,将样本点投影到一维空间上去。
向量 x i x _{i} xi在向量 w w w上的投影,可以写成数学式子:
w T x i w^{T}x _{i} wTxi
思想:类内小、类间大
投影后的目标函数 J ( w ) J(w) J(w),根据思想类内小、类间大
可写出投影后目标函数 J ( w ) J(w) J(w):
目标函数:
J ( w ) = ( z ˉ 1 − z ˉ 2 ) 2 s 1 + s 2 J(w) = \frac{ { { {({ {\bar z}_1} - { {\bar z}_2})}^2}}}{ { {s_1} + {s_2}}} J(w)=s1+s2(zˉ1−zˉ2)2
w ^ = arg max w J ( w ) \hat w = \mathop {\arg \max }\limits_w J(w) w^=wargmaxJ(w)
z ˉ \bar z zˉ是样本点投影均值,均值反映类间距离,类间距离越大,均值越大
s ˉ \bar s sˉ是样本点投影方差,方差反映类内距离,类内距离越小,方差越小
得出投影前最终 J ( w ) J(w) J(w)模型为:
J ( w ) = w T ( x ˉ c 1 − x ˉ c 2 ) ( x ˉ c 1 − x ˉ c 2 ) T w w T ( s c 1 + s c 2 ) w J(w) = \frac{ { {w^T}({ {\bar x}_{c1}} - { {\bar x}_{c2}}){ {({ {\bar x}_{c1}} - { {\bar x}_{c2}})}^T}w}}{ { {w^T}({s_{c1}} + {s_{c2}})w}} J(w)=wT(sc1+sc2)wwT(xˉc1−xˉc2)(xˉc1−xˉc2)Tw
J ( w ) = w T ( x ˉ c 1 − x ˉ c 2 ) ( x ˉ c 1 − x ˉ c 2 ) T w w T ( s c 1 + s c 2 ) w = w T S b w w T S w w J(w) = \frac{ { {w^T}({ {\bar x}_{c1}} - { {\bar x}_{c2}}){ {({ {\bar x}_{c1}} - { {\bar x}_{c2}})}^T}w}}{ { {w^T}({s_{c1}} + {s_{c2}})w}}{\rm{ = }}\frac{ { {w^T}{S_b}w}}{ { {w^T}{S_w}w}} J(w)=wT(sc1+sc2)wwT(xˉc1−xˉc2)(xˉc1−xˉc2)Tw=wTSwwwTSbw
S b S_{b} Sb:between-class 类间方差 p ∗ p 维 p*p维 p∗p维
S w S_{w} Sw:between-class 类内方差 p ∗ p 维 p*p维 p∗p维
w ^ = arg max w J ( w ) \hat w = \mathop {\arg \max }\limits_w J(w) w^=wargmaxJ(w)
J ( w ) = w T S b w w T S w w = w T S b w ⋅ ( w T S w w ) − 1 J(w) = \frac{ { {w^T}{S_b}w}}{ { {w^T}{S_w}w}} = {w^T}{S_b}w \cdot {({w^T}{S_w}w)^{ {\rm{ - }}1}} J(w)=wTSwwwTSbw=wTSbw⋅(wTSww)−1
其中,
S b = ( x ˉ c 1 − x ˉ c 2 ) ( x ˉ c 1 − x ˉ c 2 ) T S w = s c 1 + s c 2 \begin{array}{l} {S_b} = ({ {\bar x}_{c1}} - { {\bar x}_{c2}}){({ {\bar x}_{c1}} - { {\bar x}_{c2}})^T}\\ {S_w} = {s_{c1}} + {s_{c2}} \end{array} Sb=(xˉc1−xˉc2)(xˉc1−xˉc2)TSw=sc1+sc2
为什么只关注w的方向,不关心大小呢?
因为线性判别分析在应用中存在很大局限性,只需要理解下它的思想即可。
从维数可以看出 w T S w w w^{T}S_{w}w wTSww和 w T S b w w^{T}S_{b}w wTSbw 都是一个 1 ∗ 1 1*1 1∗1 的实数
最后参数 w w w的结果表明, w w w的方向与:不同类内方差和 S w S_w Sw 、不同类的均值差 x ˉ c 1 − x ˉ c 2 \bar x_{c1} - \bar x_{c2} xˉc1−xˉc2有关。若 S w S_w Sw为对角阵,各向同性,那么 w w w 的方向仅与 x ˉ c 1 − x ˉ c 2 \bar x_{c1} - \bar x_{c2} xˉc1−xˉc2有关。
线性判别分析属于线性分类硬输出的一种方式,线性判别分析的思想就是,将样本点投影到一维方向上去,使得投影之后的结果类内小、类间大
。
Logistic Regression
属于,线性分类,软分类,判别式方法
软分类之判别式方法,就是对 P ( Y ∣ X ) P(Y|X) P(Y∣X)直接进行建模求解,求出 P ( Y = 1 ∣ X ) 和 P ( Y = 0 ∣ X ) P(Y=1|X)和P(Y=0|X) P(Y=1∣X)和P(Y=0∣X),其中 X X X为输入数据, Y Y Y为输出分类。
有时候我们只要得到一个类别的概率,那么我们需要一种能输出 [ 0 , 1 ] [0,1] [0,1] 区间的值的函数。考虑两分类模型,我们利用判别模型,希望对 p ( C ∣ x ) p(C|x) p(C∣x) 建模,利用贝叶斯定理:
p ( C 1 ∣ x ) = p ( x ∣ C 1 ) p ( C 1 ) p ( x ∣ C 1 ) p ( C 1 ) + p ( x ∣ C 2 ) p ( C 2 ) p(C_1|x)=\frac{p(x|C_1)p(C_1)}{p(x|C_1)p(C_1)+p(x|C_2)p(C_2)} p(C1∣x)=p(x∣C1)p(C1)+p(x∣C2)p(C2)p(x∣C1)p(C1)
取 a = ln p ( x ∣ C 1 ) p ( C 1 ) p ( x ∣ C 2 ) p ( C 2 ) a=\ln\frac{p(x|C_1)p(C_1)}{p(x|C_2)p(C_2)} a=lnp(x∣C2)p(C2)p(x∣C1)p(C1),于是:
p ( C 1 ∣ x ) = 1 1 + exp ( − a ) p(C_1|x)=\frac{1}{1+\exp(-a)} p(C1∣x)=1+exp(−a)1
上面的式子叫 Logistic Sigmoid 函数,其参数表示了两类联合概率比值的对数。在判别式中,不关心这个参数的具体值,模型假设直接对 a a a 进行。
Logistic 回归的模型假设是:
a = w T x a=w^Tx a=wTx
于是,通过寻找 $ w$ 的最佳值可以得到在这个模型假设下的最佳模型。概率判别模型常用最大似然估计的方式来确定参数。
D a t a : { ( x i , y i ) } i = 1 N x i ∈ R p , y i ∈ { 0 , 1 } \begin{array}{l} Data:\{ ({x_i},{y_i})\} _{i = 1}^N\\ {x_i} \in {R^p},{y_i} \in \{ 0,1\} \end{array} Data:{(xi,yi)}i=1Nxi∈Rp,yi∈{0,1}
引入sigmoid函数
σ ( z ) = 1 1 + e − z \sigma (z) = \frac{1}{ {1 + {e^{ - z}}}} σ(z)=1+e−z1
w ^ = arg max w P ( Y ∣ X ) \hat w = \mathop {\arg \max }\limits_w P(Y|X) w^=wargmaxP(Y∣X)
w ^ = a r g m a x w J ( w ) = a r g m a x w ∑ i = 1 N ( y i log p 1 + ( 1 − y i ) log p 0 ) \hat{w}=\mathop{argmax}_wJ(w)=\mathop{argmax}_w\sum\limits_{i=1}^N(y_i\log p_1+(1-y_i)\log p_0) w^=argmaxwJ(w)=argmaxwi=1∑N(yilogp1+(1−yi)logp0)
注意到,这个表达式是交叉熵表达式的相反数乘 N N N,MLE 中的对数也保证了可以和指数函数相匹配,从而在大的区间汇总获取稳定的梯度。
对这个函数求导数,注意到:
p 1 ′ = ( 1 1 + exp ( − a ) ) ′ = p 1 ( 1 − p 1 ) p_1'=(\frac{1}{1+\exp(-a)})'=p_1(1-p_1) p1′=(1+exp(−a)1)′=p1(1−p1)
则:
J ′ ( w ) = ∑ i = 1 N y i ( 1 − p 1 ) x i − p 1 x i + y i p 1 x i = ∑ i = 1 N ( y i − p 1 ) x i J'(w)=\sum\limits_{i=1}^Ny_i(1-p_1)x_i-p_1x_i+y_ip_1x_i=\sum\limits_{i=1}^N(y_i-p_1)x_i J′(w)=i=1∑Nyi(1−p1)xi−p1xi+yip1xi=i=1∑N(yi−p1)xi
由于概率值的非线性,放在求和符号中时,这个式子无法直接求解。于是在实际训练的时候,和感知机类似,也可以使用不同大小的批量随机梯度上升(对于最小化就是梯度下降)来获得这个函数的极大值。
在解算过程中,有一个式子 P 1 = P ( y = 1 ∣ x ) = σ ( w T x ) = 1 1 + exp ( − w T x ) , y = 1 P_{1} = P(y=1|x)=\sigma(w^{T}x)=\frac{1}{1+\exp(-w^{T}x)},y=1 P1=P(y=1∣x)=σ(wTx)=1+exp(−wTx)1,y=1,为什么能这么写呢?因为一个关于x的函数,得出的结果就认为是y=1的概率
Gaussian Discriminant Analysis
属于,线性分类,软分类,生成式方法
概率的生成模型,是对联合概率分布进行建模,然后利用MAP来获得参数的最佳值。不像判别模型直接求解 P ( Y ∣ X ) P(Y|X) P(Y∣X)的值,生成模型更关心哪个值大,不关心具体值。
D a t a : { ( x i , y i ) } i = 1 N x i ∈ R p , y i ∈ { 0 , 1 } \begin{array}{l} Data:\{ ({x_i},{y_i})\} _{i = 1}^N\\ {x_i} \in {R^p},{y_i} \in \{ 0,1\} \end{array} Data:{(xi,yi)}i=1Nxi∈Rp,yi∈{0,1}
P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) ∝ P ( X ∣ Y ) P ( Y ) P(Y|X) = \frac{ {P(X|Y)P(Y)}}{ {P(X)}} \propto P(X|Y)P(Y) P(Y∣X)=P(X)P(X∣Y)P(Y)∝P(X∣Y)P(Y)
y ^ = arg max y ∈ { 0 , 1 } P ( y ∣ x ) = arg max y P ( y ) P ( x ∣ y ) \hat y = \mathop {\arg \max }\limits_{y \in \{ 0,1\} } P(y|x) = \mathop {\arg \max }\limits_y P(y)P(x|y) y^=y∈{0,1}argmaxP(y∣x)=yargmaxP(y)P(x∣y)
那么独立全同的数据集最大后验概率MAP可以表示为:
草稿上x|y=0 ~ N(u2, Σ),实际上是x|y=0 ~ N(u0, Σ)
由于:
求微分左边乘以 Σ \Sigma Σ 可以得到:
最为困难的是求解 Σ \Sigma Σ
最为困难的是求解 Σ \Sigma Σ,我们的模型假设对正反例采用相同的协方差矩阵,当然从上面的求解中我们可以看到,即使采用不同的矩阵也不会影响之前的三个参数。首先我们有:
在这个表达式中,我们在标量上加入迹从而可以交换矩阵的顺序,对于包含绝对值和迹的表达式的导数,我们有:
因此:
其中, S 1 , S 2 S_1,S_2 S1,S2 分别为两个类数据内部的协方差矩阵,于是:
这里应用了类协方差矩阵的对称性。
于是我们就利用最大后验的方法求得了我们模型假设里面的所有参数,根据模型,可以得到联合分布,也就可以得到用于推断的条件分布了。
naive Bayes Classifer
属于,线性分类,软分类,判别式方法
思想:朴素贝叶斯假设
->条件独立性假设
->最简单的概率图(有向图)模型
做假设的动机: 简化运算
P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) ∝ P ( X ∣ Y ) P ( Y ) P(Y|X) = \frac{ {P(X|Y)P(Y)}}{ {P(X)}} \propto P(X|Y)P(Y) P(Y∣X)=P(X)P(X∣Y)P(Y)∝P(X∣Y)P(Y)
主要是简化 P ( X ∣ Y ) P(X|Y) P(X∣Y)
上面的高斯判别分析的是对数据集的分布作出了高斯分布的假设,同时引入伯努利分布作为类先验,从而利用最大后验求得这些假设中的参数。
朴素贝叶斯对数据的属性之间的关系作出了假设,一般地,我们有需要得到 p ( x ∣ y ) p(x|y) p(x∣y) 这个概率值,由于 x x x 有 p p p 个维度,因此需要对这么多的维度的联合概率进行采样,但是我们知道这么高维度的空间中采样需要的样本数量非常大才能获得较为准确的概率近似。
简化 P ( X ∣ Y ) P(X|Y) P(X∣Y)
在一般的有向概率图模型中,对各个属性维度之间的条件独立关系作出了不同的假设,其中最为简单的一个假设就是在朴素贝叶斯模型描述中的条件独立性假设。
p ( x ∣ y ) = ∏ i = 1 p p ( x i ∣ y ) p(x|y)=\prod\limits_{i=1}^pp(x_i|y) p(x∣y)=i=1∏pp(xi∣y)
即:
x i ⊥ x j ∣ y , ∀ i ≠ j x_i\perp x_j|y,\forall\ i\ne j xi⊥xj∣y,∀ i=j
于是利用贝叶斯定理,对于单次观测:
p ( y ∣ x ) = p ( x ∣ y ) p ( y ) p ( x ) = ∏ i = 1 p p ( x i ∣ y ) p ( y ) p ( x ) p(y|x)=\frac{p(x|y)p(y)}{p(x)}=\frac{\prod\limits_{i=1}^pp(x_i|y)p(y)}{p(x)} p(y∣x)=p(x)p(x∣y)p(y)=p(x)i=1∏pp(xi∣y)p(y)
对于单个维度的条件概率以及类先验作出进一步的假设:
1. x i x_i xi为连续变量: p ( x i ∣ y ) = N ( μ i , σ i 2 ) p(x_i|y)=\mathcal{N}(\mu_i,\sigma_i^2) p(xi∣y)=N(μi,σi2)
2. x i x_i xi为离散变量:类别分布(Categorical): p ( x i = i ∣ y ) = θ i , ∑ i = 1 K θ i = 1 p(x_i=i|y)=\theta_i,\sum\limits_{i=1}^K\theta_i=1 p(xi=i∣y)=θi,i=1∑Kθi=1
3. p ( y ) = ϕ y ( 1 − ϕ ) 1 − y p(y)=\phi^y(1-\phi)^{1-y} p(y)=ϕy(1−ϕ)1−y
对这些参数的估计,常用 MLE 的方法直接在数据集上估计,由于不需要知道各个维度之间的关系,因此,所需数据量大大减少了。估算完这些参数,再代入贝叶斯定理中得到类别的后验分布。
判别式,是直接对 P ( Y ∣ X ) P(Y|X) P(Y∣X)进行求解,通过直接对 P ( Y ∣ X ) P(Y|X) P(Y∣X)建模,求解出 P ( Y = 1 ∣ X ) 和 P ( Y = 0 ∣ X ) P(Y=1|X)和P(Y=0|X) P(Y=1∣X)和P(Y=0∣X)的值。即,判别式更关心值的大小
生成式,不直接对 P ( Y ∣ X ) P(Y|X) P(Y∣X)进行求解,而是利用贝叶斯公式, P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) P(Y|X){\rm{ = }}\frac{ {P(X|Y)P(Y)}}{ {P(X)}} P(Y∣X)=P(X)P(X∣Y)P(Y),通过计算 P ( Y ∣ X ) P ( Y ) P(Y|X)P(Y) P(Y∣X)P(Y)来得到 P ( Y ∣ X ) P(Y|X) P(Y∣X)。生成式更关心 P ( Y = 1 ∣ X ) 和 P ( Y = 0 ∣ X ) P(Y=1|X)和P(Y=0|X) P(Y=1∣X)和P(Y=0∣X)谁大,不关心具体值。
分类的本质核心任务:对于给定的x,输出y属于0类,还是属于1类。用数学描述就是求 P ( y ∣ x ) P(y|x) P(y∣x)。
以下来自
tsyw
的github库笔记
分类任务分为两类,对于需要直接输出类别的任务,感知机算法中我们在线性模型的基础上加入符号函数作为激活函数,那么就能得到这个类别,但是符号函数不光滑,于是我们采用错误驱动的方式,引入 ∑ x i ∈ D w r o n g − y i w T x i \sum\limits_{x_i\in\mathcal{D}_{wrong}}-y_iw^Tx_i xi∈Dwrong∑−yiwTxi 作为损失函数,然后最小化这个误差,采用批量随机梯度下降的方法来获取最佳的参数值。而在线性判别分析中,我们将线性模型看作是数据点在某一个方向的投影,采用类内小,类间大的思路来定义损失函数,其中类内小定义为两类数据的方差之和,类间大定义为两类数据中心点的间距,对损失函数求导得到参数的方向,这个方向就是 S w − 1 ( x ‾ c 1 − x ‾ c 2 ) S_w^{-1}(\overline x_{c1}-\overline x_{c2}) Sw−1(xc1−xc2) ,其中 S w S_w Sw 为原数据集两类的方差之和。
另一种任务是输出分类的概率,对于概率模型,我们有两种方案,第一种是判别模型,也就是直接对类别的条件概率建模,将线性模型套入 Logistic 函数中,我们就得到了 Logistic 回归模型,这里的概率解释是两类的联合概率比值的对数是线性的,我们定义的损失函数是交叉熵(等价于 MLE),对这个函数求导得到 1 N ∑ i = 1 N ( y i − p 1 ) x i \frac{1}{N}\sum\limits_{i=1}^N(y_i-p_1)x_i N1i=1∑N(yi−p1)xi ,同样利用批量随机梯度(上升)的方法进行优化。第二种是生成模型,生成模型引入了类别的先验,在高斯判别分析中,我们对数据集的数据分布作出了假设,其中类先验是二项分布,而每一类的似然是高斯分布,对这个联合分布的对数似然进行最大化就得到了参数, ∑ i = 1 N y i x i N 1 , ∑ i = 1 N ( 1 − y i ) x i N 0 , N 1 S 1 + N 2 S 2 N , N 1 N \frac{\sum\limits_{i=1}^Ny_ix_i}{N_1},\frac{\sum\limits_{i=1}^N(1-y_i)x_i}{N_0},\frac{N_1S_1+N_2S_2}{N},\frac{N_1}{N} N1i=1∑Nyixi,N0i=1∑N(1−yi)xi,NN1S1+N2S2,NN1 。在朴素贝叶斯中,我们进一步对属性的各个维度之间的依赖关系作出假设,条件独立性假设大大减少了数据量的需求。
[1] shuhuai008. 【机器学习】【白板推导系列】【合集 1~23】. bilibili. 2019.
https://www.bilibili.com/video/BV1aE411o7qd?p=13
[2] tsyw. https://github.com/tsyw/MachineLearningNotes