机器学习之线性判别(算法详细推导)

线性判别法LDA——P60

主要思想

需要找一条直线,希望各点投影在该直线上后,希望同一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。量化这两点感官,则需满足异类点的中心距离远,同类点的方差小.

模型建立

假设我们有数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),\dots,(x_m,y_m)\} D={(x1,y1),(x2,y2),,(xm,ym)},其中任意样本 x i x_i xi为n为向量, y i ∈ { 0 , 1 } y_i\in\{0,1\} yi{0,1},我们定义

  • X i ( i = 0 , 1 ) X_i(i=0,1) Xi(i=0,1)为第 i i i类样本的集合,
  • # X i ( i = 0 , 1 ) \#X_i(i=0,1) #Xi(i=0,1)为第 i i i类样本的个数,
  • a i ( i = 0 , 1 ) a_i(i=0,1) ai(i=0,1)为第 i i i类样本的投影中心点(是一个向量),
  • μ i ( i = 0 , 1 ) \mu_i(i=0,1) μi(i=0,1)为第 i i i类样本的中心点
  • S i ( i = 0 , 1 ) S_i(i=0,1) Si(i=0,1)为第 i i i类样本的方差
  • Σ i ( i = 0 , 1 ) \Sigma_i(i=0,1) Σi(i=0,1)为第 i i i类样本的协方差矩阵

根据投影的知识可得

( x i 1 , x i 2 ) (x_{i1},x_{i2}) (xi1,xi2)在直线 w 1 x 1 + w 2 x 2 = 0 w_1x_1+w_2x_2=0 w1x1+w2x2=0上的投影相当于向量 ( x i 1 , x i 2 ) (x_{i1},x_{i2}) (xi1,xi2)在向量 ( w 1 , w 2 ) (w_1,w_2) (w1,w2)上的投影,即为向量 ( x i 1 , x i 2 ) (x_{i1},x_{i2}) (xi1,xi2)与向量 ( w 1 , w 2 ) (w_1,w_2) (w1,w2)的点积 ( x i ) T w (x_i)^Tw (xi)Tw

则有

a i = 1 # X i ∑ j ∈ X i ( x j ) T w          = ( 1 # X i ∑ j ∈ X i ( x j ) T ) w = μ i w           ( i = 0 , 1 ) a_i=\frac{1}{\#X_i}\sum_{j\in X_i}(x_j)^Tw~~~~~~~~\\ =(\frac{1}{\#X_i}\sum_{j\in X_i}(x_j)^T)w\\ =\mu_iw~~~~~~~~~(i=0,1) ai=#Xi1jXi(xj)Tw        =(#Xi1jXi(xj)T)w=μiw         (i=0,1)

S i = ∑ j ∈ X i ( ( x j ) T w − a i ) 2                                    = ∑ j ∈ X i ( ( ( x j ) T − μ i ) w ) 2                 ( 1 ) = ∑ j ∈ X i ( ( x j − μ i ) T w ) 2                     ( 2 ) = ∑ j ∈ X i w T ( x j − μ i ) ( x j − μ i T ) w     ( 3 ) = w T ( ∑ j ∈ X i ( x j − μ i ) ( x j − μ i ) T ) w           = w T Σ i w .       ( i = 0 , 1 )                             S_i=\sum_{j\in X_i}((x_j)^Tw-a_i)^2~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \\ =\sum_{j\in X_i}(((x_j)^T-\mu_i)w)^2~~~~~~~~~~~~~~~(1)\\ =\sum_{j\in X_i}((x_j-\mu_i)^Tw)^2~~~~~~~~~~~~~~~~~~~(2)\\ =\sum_{j\in X_i}w^T(x_j-\mu_i)(x_j-\mu_i^T)w~~~(3)\\ =w^T(\sum_{j\in X_i}(x_j-\mu_i)(x_j-\mu_i)^T)w~~~~~~~~~\\ =w^T\Sigma_iw.~~~~~(i=0,1)~~~~~~~~~~~~~~~~~~~~~~~~~~~ Si=jXi((xj)Twai)2                                  =jXi(((xj)Tμi)w)2               1=jXi((xjμi)Tw)2                   2=jXiwT(xjμi)(xjμiT)w   3=wT(jXi(xjμi)(xjμi)T)w         =wTΣiw.     (i=0,1)                           

  • 其中(1)由 a i a_i ai的表达式代入得到
  • (2)由于 μ i \mu_i μi是数,一个数点转置还是它本身
  • (3)根据 ( x T y ) 2 = ( x T y ) ( x T y ) = ( x T y ) T ( x T y ) = y T x x T y (x^Ty)^2=(x^Ty)(x^Ty)=(x^Ty)^T(x^Ty)=y^Txx^Ty (xTy)2=(xTy)(xTy)=(xTy)T(xTy)=yTxxTy其中 x T y x^Ty xTy为一个数

根据主要思想,我们建立以下目标函数

由于我们希望| a 1 − a 2 a_1-a_2 a1a2|尽可能大, S 1 + S 2 S_1+S_2 S1+S2尽可能小,即可建立目标函数

由 于 min ⁡    ∣ a 1 − a 2 ∣ = > min ⁡    ( a 1 − a 2 ) 2 max ⁡ w ( a 1 − a 2 ) 2 S 1 + S 2 由于\min~~ |a_1-a_2|=>\min ~~(a_1-a_2)^2\\ \max\limits_{w}\frac{(a_1-a_2)^2}{S_1+S_2} min  a1a2=>min  (a1a2)2wmaxS1+S2(a1a2)2

下面求解 ( a 1 − a 2 ) 2 (a_1-a_2)^2 (a1a2)2 S 1 + S 2 S_1+S_2 S1+S2

( a 1 − a 2 ) 2 = ( ( μ 1 − μ 2 ) w ) 2 = w T ( μ 1 − μ 2 ) ( μ 1 − μ 2 ) T w S 1 + S 2 = w T ( Σ 1 + Σ 2 ) w (a_1-a_2)^2=((\mu_1-\mu_2)w)^2=w^T(\mu_1-\mu_2)(\mu_1-\mu_2)^Tw\\ S_1+S_2=w^T(\Sigma_1+\Sigma_2)w (a1a2)2=((μ1μ2)w)2=wT(μ1μ2)(μ1μ2)TwS1+S2=wT(Σ1+Σ2)w

最终确立目标函数为

max ⁡ w = w T ( μ 1 − μ 2 ) ( μ 1 − μ 2 ) T w w T ( Σ 1 + Σ 2 ) w \max\limits_w=\frac{w^T(\mu_1-\mu_2)(\mu_1-\mu_2)^Tw}{w^T(\Sigma_1+\Sigma_2)w} wmax=wT(Σ1+Σ2)wwT(μ1μ2)(μ1μ2)Tw

根据拉格朗日乘子法得到最优权重为

w ∗ = ( Σ 1 + Σ 2 ) − 1 ( μ 1 − μ 2 ) w^*=(\Sigma_1+\Sigma_2)^{-1}(\mu_1-\mu_2) w=(Σ1+Σ2)1(μ1μ2)

Σ 1 + Σ 2 \Sigma_1+\Sigma_2 Σ1+Σ2不可逆的时候采用 w ∗ = ( Σ 1 + Σ 2 + λ I ) − 1 ( μ 1 − μ 2 ) w^*=(\Sigma_1+\Sigma_2+\lambda I)^{-1}(\mu_1-\mu_2) w=(Σ1+Σ2+λI)1(μ1μ2)

二分类

  1. 计算每个类别点集的中心点 μ i \mu_i μi
  2. 计算每个类别点集的协方差矩阵 Σ i \Sigma_i Σi
  3. 计算类间散度矩阵 S w = Σ 1 + Σ 2 S_w=\Sigma_1+\Sigma_2 Sw=Σ1+Σ2
  4. 判断 S w S_w Sw是否可逆(在python中用np.linalg.det()求解矩阵A的行列式|A|,如果行列式为0,不可逆,否则可逆。)
    • 若可逆,则 w ∗ = S w − 1 ( μ 1 − μ 2 ) w^*=S_w^{-1}(\mu_1-\mu_2) w=Sw1(μ1μ2)
    • 若不可逆,则 w ∗ = ( S w + λ I ) − 1 ( μ 1 − μ 2 ) w^*=(S_w+\lambda I)^{-1}(\mu_1-\mu_2) w=(Sw+λI)1(μ1μ2)

多分类

  1. 计算整个样本点集的中心点 μ \mu μ

  2. 计算每个类别点集的中心点 μ i \mu_i μi

  3. 计算每个类别点集的协方差矩阵 Σ i \Sigma_i Σi

  4. 计算全局散度矩阵 S t = ∑ i = 1 m ( x i − μ ) ( x i − μ ) T S_t=\sum_{i=1}^m (x_i-\mu)(x_i-\mu)^T St=i=1m(xiμ)(xiμ)T

  5. 计算类内散度矩阵 S w = ∑ j = 1 k Σ j S_w=\sum_{j=1}^k\Sigma_j Sw=j=1kΣj

  6. 计算类间散度矩阵 S b = ∑ j = 1 k m j ( μ j − μ ) ( μ j − μ ) T S_b=\sum_{j=1}^k m_j(\mu_j-\mu)(\mu_j-\mu)^T Sb=j=1kmj(μjμ)(μjμ)T

    其中 m j m_j mj表示第 j j j类的样本数

  7. 计算 S w − 1 S b S_w^{-1}S_b Sw1Sb的特征根和特征向量,选取前k个

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值