zoukankan      html  css  js  c++  java
  • 线性判别分析(Linear Discriminat Analysis)

    线性判别分析(Linear Discriminat Analysis)

    PCA找寻的投影向量力求找到使得特征点方差较大(也就是说散的比较开),与PCA所找寻的投影向量不同,LAD所找寻的投影向量具有下面两种特性:

    1. 映射后不同类数据之间的中心点(均值点)相距较远
    2. 映射后同类数据之间方差较小(分布比较集中)

    类似于一种聚类分析,但是却是一种监督学习算法。而PCA属于一种无监督学习算法。

    那么将LDA的主轴与PCA的主轴画出如下:

    在这里插入图片描述

    可以看出实际上数据在映射在 LDA 的主轴上可分性更高。

    在下面的正文中的一些数学符号的表示:

    [egin{aligned} L & : ext { number of classes } \ n _ { i } & : ext { number of samples in class } i \ n & : ext { number of all samples } \ x _ { ell } ^ { ( i ) } & : ext { the } ell ext { -th sample in class } i \ P _ { i } & : ext { the prior probability of class } i end{aligned} ]

    类间分散矩阵(Between-class Scatter Matrix)

    那么所有的样本点 (x _ { ell } ^ { ( i ) }) 在方向 (e) 上的投影为:

    [left{ e ^ { T } x _ { 1 } ^ { ( 1 ) } , ldots , e ^ { T } x _ { n _ { 1 } } ^ { ( 1 ) } , e ^ { T } x _ { 1 } ^ { ( 2 ) } , ldots , e ^ { T } x _ { n _ { 2 } } ^ { ( 2 ) } , ldots , e ^ { T } x _ { ell } ^ { ( i ) } , ldots , e ^ { T } x _ { 1 } ^ { ( L ) } , ldots , e ^ { T } x _ { n _ { L } } ^ { ( L ) } ight} ]

    投影之后的中心点为:

    [m _ { i } = frac { 1 } { n _ { i } } sum _ { ell = 1 } ^ { n _ { i } } oldsymbol { e } ^ { T } oldsymbol { x } _ { ell } ^ { ( i ) } = oldsymbol { e } ^ { T } left{ frac { 1 } { n _ { i } } sum _ { ell = 1 } ^ { n _ { i } } oldsymbol { x } _ { ell } ^ { ( i ) } ight} = oldsymbol { e } ^ { T } oldsymbol { m } _ { i } ]

    其中 (oldsymbol { m } _ { i } = frac { 1 } { n _ { i } } sum _ { ell = 1 } ^ { n _ { i } } oldsymbol { x } _ { ell } ^ { ( i ) }) 实际上就是投影之前的中心,所以投影之后的中心则是原数据中心得投影。

    那么不同类中心之间的平方距离(欧氏距离):

    [egin{aligned} &frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } left| kern-0.15em left| m _ { i } - m _ { j } ight| kern-0.15em ight| \ = &frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } (m _ { i } - m _ { j })(m _ { i } - m _ { j })^T \ = &frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } (e ^ { T } oldsymbol m _ { i } - e ^ { T } oldsymbol m _ { j })(e ^ { T } oldsymbol m _ { i } - e ^ { T } oldsymbol m _ { j })^T \ = &frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } e ^ { T } ( oldsymbol m _ { i } - oldsymbol m _ { j })(oldsymbol m _ { i } - oldsymbol m _ { j })^T e \ = &e ^ { T } underbrace{left( frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } left( oldsymbol { m } _ { i } - oldsymbol { m } _ { j } ight) left( oldsymbol { m } _ { i } - oldsymbol { m } _ { j } ight) ^ { T } ight)}_{S^{LDA}_b} e \ end{aligned} ]

    其中 (S^{LDA}_b) 代表了类间分散矩阵(Between-class Scatter Matrix),其中下标 (b) 代表的 between。

    加入每一类的比例是认为这个距离也就是说拉的有多开,跟这两类数据的占比有关。

    下面要证明:

    [S _ { b } ^ { L D A } = frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } left( oldsymbol { m } _ { i } - oldsymbol { m } _ { j } ight) left( oldsymbol { m } _ { i } - oldsymbol { m } _ { j } ight) ^ { T } = sum _ { i = 1 } ^ { L } P _ { i } left( oldsymbol { m } _ { i } - oldsymbol { m } ight) left( oldsymbol { m } _ { i } - oldsymbol { m } ight) ^ { T } ]

    其中 (oldsymbol { m }) 代表了全部样本点的中心(均值):

    [oldsymbol { m } = frac { 1 } { n } sum _ { i = 1 } ^ { L } sum _ { ell = 1 } ^ { n _ { i } } oldsymbol { x } _ { ell } ^ { ( i ) } ]

    直接换项不容易,所以这里将两边进行整理转换然后使得转换后等式相等。

    先进行左边的等式转换:

    [egin{aligned} S _ { b } ^ { L D A } & = frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } left( oldsymbol { m } _ { i } - oldsymbol { m } _ { j } ight) left( oldsymbol { m } _ { i } - oldsymbol { m } _ { j } ight) ^ { T } \ & = frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } left( oldsymbol { m } _ { i } oldsymbol { m } _ { i }^ { T } -oldsymbol { m } _ { i } oldsymbol { m } _ { j }^ { T } - oldsymbol { m } _ { j } oldsymbol { m } _ { i }^ { T } + oldsymbol { m } _ { j } oldsymbol { m } _ { j }^ { T } ight)\ & = frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } oldsymbol { m } _ { i } oldsymbol { m } _ { i }^ { T } - frac { 1 } { 2 }sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } oldsymbol { m } _ { i } oldsymbol { m } _ { j }^ { T } - frac { 1 } { 2 }sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } oldsymbol { m } _ { j } oldsymbol { m } _ { i }^ { T } + frac { 1 } { 2 }sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } oldsymbol { m } _ { j } oldsymbol { m } _ { j }^ { T } \ & = frac { 1 } { 2 } sum _ { i = 1 } ^ { L } P _ { i} oldsymbol { m } _ { i } oldsymbol { m } _ { i }^ { T } left( sum _ { j = 1 } ^ { L } P _ { j } ight) -frac { 1 } { 2 } left(sum _ { i = 1 } ^ { L } P _ { i} oldsymbol { m } _ { i } ight) left(sum _ { j = 1 } ^ { L } P _ { j } oldsymbol { m } _ { j }^ { T } ight) -frac { 1 } { 2 } left(sum _ { j = 1 } ^ { L } P _ { j } oldsymbol { m } _ { j } ight) left(sum _ { i = 1 } ^ { L } P _ { i} oldsymbol { m } _ { i } ^ { T } ight)+ frac { 1 } { 2 } left( sum _ { i = 1 } ^ { L } P _ { i } ight) sum _ { j = 1 } ^ { L } P _ { j} oldsymbol { m } _ { j } oldsymbol { m } _ { j }^ { T } end{aligned} ]

    其中所有概率相加为一:

    [ left( sum _ { j = 1 } ^ { L } P _ { j } ight) = left( sum _ { i = 1 } ^ { L } P _ { i } ight) = 1 ]

    同时:

    [egin{aligned} P _ { i } oldsymbol m _ { i } & = frac { n _ { i } } { n } frac { x ^ { ( i ) }_ { 1 } + x ^ { ( i ) } _ { 2 } + cdots + x _ { n _i } ^ { ( n ) } } { n _ { i } } \& = frac { 1 } { n } left{ x ^ { ( i ) }_ { 1 } + x ^ { ( i ) } _ { 2 } + cdots + x _ { n _i } ^ { ( n ) } ight} end{aligned} ]

    那么:

    [egin{aligned} sum _ { i = 1 } ^ { L } P _ { i } oldsymbol m _ { i } & = sum _ { i = 1 } ^ { L } frac { 1 } { n } left{ x ^ { ( i ) }_ { 1 } + x ^ { ( i ) } _ { 2 } + cdots + x _ { n _i } ^ { ( n ) } ight} \& = frac { 1 } { n } left{ x ^ { ( 1 ) }_ { 1 } + cdots + x _ { n _ { 1 } } ^ { ( 1 ) } + x ^ { ( 2 ) }_ { 1 }+ cdots + x _ { n _ { 2 } } ^ { ( 2 ) } + cdots + x _ { 1 } ^ { ( i ) } + cdots + x _ { n _ { i } } ^ { ( i ) } ight} \ &= frac { 1 } { n } sum _ { i = 1 } ^ { L } sum _ { ell = 1 } ^ { n _ { i } } oldsymbol { x } _ { ell } ^ { ( i ) } = oldsymbol { m } end{aligned} ]

    所以做如下改写:

    [egin{aligned} S _ { b } ^ { L D A } & = frac { 1 } { 2 } sum _ { i = 1 } ^ { L } P _ { i} oldsymbol { m } _ { i } oldsymbol { m } _ { i }^ { T } left( sum _ { j = 1 } ^ { L } P _ { j } ight) -frac { 1 } { 2 } left(sum _ { i = 1 } ^ { L } P _ { i} oldsymbol { m } _ { i } ight) left(sum _ { j = 1 } ^ { L } P _ { j } oldsymbol { m } _ { j }^ { T } ight) -frac { 1 } { 2 } left(sum _ { j = 1 } ^ { L } P _ { j } oldsymbol { m } _ { j } ight) left(sum _ { i = 1 } ^ { L } P _ { i} oldsymbol { m } _ { i } ^ { T } ight)+ frac { 1 } { 2 } left( sum _ { i = 1 } ^ { L } P _ { i } ight) sum _ { j = 1 } ^ { L } P _ { j} oldsymbol { m } _ { j } oldsymbol { m } _ { j }^ { T } \ & = frac { 1 } { 2 } sum _ { i = 1 } ^ { L } P _ { i} oldsymbol { m } _ { i } oldsymbol { m } _ { i }^ { T } -frac { 1 } { 2 } oldsymbol { m } oldsymbol { m } ^T -frac { 1 } { 2 } oldsymbol { m } oldsymbol { m } ^T+ frac { 1 } { 2 } sum _ { j = 1 } ^ { L } P _ { j} oldsymbol { m } _ { j } oldsymbol { m } _ { j }^ { T } \ & = sum _ { i = 1 } ^ { L } P _ { i} oldsymbol { m } _ { i } oldsymbol { m } _ { i }^ { T } -oldsymbol { m } oldsymbol { m } ^T end{aligned} ]

    现在进行右边的等式转换:

    [egin{aligned} & sum _ { i = 1 } ^ { L } P _ { i } left( oldsymbol { m } _ { i } - oldsymbol { m } ight) left( oldsymbol { m } _ { i } - oldsymbol { m } ight) ^ { T }\ = & sum _ { 1 = 1 } ^ { L } P _ { i } oldsymbol m _ { i } oldsymbol m _ { i } ^T- sum _ { i = 1 } ^ { L } P _ { i } oldsymbol m _ { i } oldsymbol m ^ T- sum _ { i = 1 } ^ { L } P _ { i } oldsymbol m oldsymbol m _ { i } ^T + sum _ { i = 1 } ^ { L } P _ { i } oldsymbol m oldsymbol m ^ T \ = & sum _ { i = 1 } ^ { L } P _ { i } oldsymbol m _ i oldsymbol m _ { i } ^T - left( sum _ { i = 1 } ^ { L } P _ { i } oldsymbol m _ { i } ight) oldsymbol m ^T- oldsymbol m left( sum _ { i = 1 } ^ { L } P _ { i } oldsymbol m _ { i } ^T ight) + left(sum _ { i = 1 } ^ { L } P _ { i } ight) oldsymbol m oldsymbol m ^ T \ = & sum _ { i = 1 } ^ { L } P _ { i } oldsymbol m _ i oldsymbol m _ { i } ^T - oldsymbol m oldsymbol m ^T- oldsymbol m oldsymbol m ^T + oldsymbol m oldsymbol m ^ T \ = & sum _ { i = 1 } ^ { L } P _ { i } oldsymbol m _ i oldsymbol m _ { i } ^T - oldsymbol m oldsymbol m ^T end{aligned} ]

    所以两者相等。即:

    [S _ { b } ^ { L D A } = frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } left( oldsymbol { m } _ { i } - oldsymbol { m } _ { j } ight) left( oldsymbol { m } _ { i } - oldsymbol { m } _ { j } ight) ^ { T } = sum _ { i = 1 } ^ { L } P _ { i } left( oldsymbol { m } _ { i } - oldsymbol { m } ight) left( oldsymbol { m } _ { i } - oldsymbol { m } ight) ^ { T } ]

    类内分散矩阵(Within-class Scatter Matrix)

    全部类的方差之和为:

    [egin{aligned} & sum _ { i = 1 } ^ { L } { P } _ { i } sum _ { ell = 1 } ^ { n _ { i } } left( e ^ { T } { x } _ { ell } ^ { ( i ) } - m _ { i } ight) ^ { 2 } \ = & sum _ { i = 1 } ^ { L } P _ { i } sum _ { l = 1 } ^ { n _ { i } } left( e ^ { T } x _ { l } ^ { ( i ) } - e ^ { T} oldsymbol m _ { i } ight) ^ { 2 } \ = & sum _ { i = 1 } ^ { L } P _ { i } sum _ { l = 1 } ^ { n _ { i } } left( e ^ { T} x _ { l } ^ { ( i ) } - e ^ { T} oldsymbol m _ { i } ight) left( e ^ { T} x _ { l } ^ { ( i ) } - e ^ { T} oldsymbol m _ { i } ight) ^ T \ = & e^ { T} left{ underbrace { sum _ { i = 1 } ^ { L } P _ { i } sum _ { l = 1 } ^ { n _ { i } } left( x _ { i } ^ { ( i ) } - oldsymbol m _ { i } ight) left( x _ { i } ^ { ( i ) } - oldsymbol m _ { i } ight) ^ { T } }_{oldsymbol { S } _ { w } ^ { L D A }} ight} e end{aligned} ]

    其中 (oldsymbol S^{LDA}_w) 代表了类间分散矩阵(Within-class Scatter Matrix),其中下标 (w) 代表的 within。

    [oldsymbol { S } _ { w } ^ { L D A } = sum _ { i = 1 } ^ { L } P _ { i } sum _ { ell = 1 } ^ { n _ { i } } left( oldsymbol { x } _ { ell } ^ { ( i ) } - oldsymbol { m } _ { i } ight) left( oldsymbol { x } _ { ell } ^ { ( i ) } - oldsymbol { m } _ { i } ight) ^ { T } ]

    希望类(组)间距离越大越好:

    [frac { 1 } { 2 } sum _ { i = 1 } ^ { L } sum _ { j = 1 } ^ { L } P _ { i } P _ { j } left( m _ { i } - m _ { j } ight) ^ { 2 } = e ^ { T } left( sum _ { i = 1 } ^ { L } P _ { i } left( oldsymbol { m } _ { i } - oldsymbol { m } ight) left( oldsymbol { m } _ { i } - oldsymbol { m } ight) ^ { T } ight) e = e^T oldsymbol { S } _ { b } ^ { L D A } e ]

    希望类(组)间距离越小越好:

    [sum _ { i = 1 } ^ { L } P _ { i } sum _ { ell = 1 } ^ { n _ { i } } left( e ^ { T } x _ { ell } ^ { ( i ) } - m _ { i } ight) ^ { 2 } = e ^ { T } { left( sum _ { i = 1 } ^ { L } P _ { i } sum _ { ell = 1 } ^ { n _ { i } } left( x _ { ell } ^ { ( i ) } - m _ { i } ight) left( x _ { ell } ^ { ( i ) } - m _ { i } ight) ^ { T } ight) } e = e^ T oldsymbol { S } _ { w } ^ { L D A } e ]

    所以两个不能分开来看,所以选择目标函数的表示为:

    [e = arg max _ { e in R ^ { d } } frac { e ^ { T } S _ { b } ^ { L D A } e } { e ^ { T } S _ { w } ^ { L D A } e } ]

    来保证分子最大,分母最小,也就是说 组间距离/组内距离 越大越好。

    现在引入一个概念:Rayleigh Quotient

    [r ( { e } ) = frac { { e } ^ { T } { S } _ { b } ^ { L D A } { e } } { { e } ^ { T } { S } _ { w } ^ { L D A } { e } } ]

    那么凸最优解,就是求导为零:

    [egin{aligned} abla r ( oldsymbol { e } ) & = frac { 1 } { left( oldsymbol { e } ^ { T } oldsymbol { S } _ { w } ^ { L D A } oldsymbol { e } ight) ^ { 2 } } left{ left( oldsymbol { e } ^ { T } oldsymbol { S } _ { w } ^ { L D A } oldsymbol { e } ight) left( 2 oldsymbol { S } _ { b } ^ { L D A } oldsymbol { e } ight) - left( oldsymbol { e } ^ { T } oldsymbol { S } _ { b } ^ { L D A } oldsymbol { e } ight) left( 2 oldsymbol { S } _ { w } ^ { L D A } oldsymbol { e } ight) ight} = 0\ & = frac { 1 } { e ^ { T } S _ { w } ^ { LDA } e } left{underbrace {1 cdot 2 S _ { b } ^ { L D A } e - frac { e ^ { T} S _ { b } ^ { L D A } e } { e ^ { T} S _ { w } ^ { L D A} e } 2 S _ { W } ^ { L D A } e}_{0} ight} end{aligned} ]

    也就是说

    [S _ { b } ^ { L D A } e = frac { e ^ { T} S _ { b } ^ { L D A } e } { e ^ { T} S _ { w } ^ { L D A} e } S _ { w } ^ { L D A } e = r(e) S _ { w } ^ { L D A } e ]

    这是一种广义特征值问题(generalized eigenvalue problem),即:

    [oldsymbol { S } _ { b } ^ { L D A } oldsymbol { e } = lambda oldsymbol { S } _ { w } ^ { L D A } oldsymbol { e } ]

    这里的特征向量不在是原来的特征向量而是原来的特征向量乘以一个矩阵,所以是在求 (oldsymbol { S } _ { b } ^ { L D A }) 的广义特征值 (lambda)

    工程上的解法是,做如下转换:

    [ ext{pinv} (oldsymbol { S } _ { w } ^ { L D A } )oldsymbol { S } _ { b } ^ { L D A } oldsymbol { e } = lambda oldsymbol { e } ]

    然后使用特征值求解方法。

    任世事无常,勿忘初心
  • 相关阅读:
    R语言学习——欧拉计划(11)Largest product in a grid
    R语言学习——欧拉计划(3)Largest prime factor 求最大质因数
    R语言学习——欧拉计划(3)Largest prime factor 求最大质因数
    python中matplotlib的颜色及线条控制
    python中matplotlib的颜色及线条控制
    R语言学习——欧拉计划(1)Multiples of 3 and 5
    R语言学习——欧拉计划(1)Multiples of 3 and 5
    R语言学习——循环判断语句
    R语言学习——循环判断语句
    R语言学习——数据框
  • 原文地址:https://www.cnblogs.com/FlameBlog/p/14715211.html
Copyright © 2011-2022 走看看