LDA 降维原理
前面对 LDA 作为作为分类器 有详细推导, 其核心就是 贝叶斯公式, 已知全概率, 求(条件概率)最大先验概率, 类似的问题. 而 LDA 如果作为 降维 的原理是:
a. 将带上标签的数据点, 通过投影, 投影到维度更低的空间中,
b. 使得投影后的点, **同类别会"内聚", 不同类别会 "分隔开", **
类似写代码的"高内聚, 低耦合". 注意是要 带标签的点, 不同于 PCA 值考虑 X 降维, y 不考虑. 直观上来理解还是比较容易的, 但怎么去确定投影方向, 这就不好弄了.
假设, 先计算不同类别数据的中心 (这里假设2维, 方便可视化). 如果将数据直接投影到连接中心的向量 w 上(降维), 会发现有重叠, (脑补吧, 不想贴图).
最近我有个奇怪的观点: 理解一个抽象概念, "数形结合" 在某种程度上, 反而不利于直观理解.
比如, 多维下, 是很难可视化的, 而此时的脑图像, 可能还是停留在 2维度, 因而总感觉, "很抽象"
其实,
我认为,
最好理解抽象概念的方式
是
回到抽象概念自身, 从规则, 从内部结构, 从定义去理解, "而非画个图", 低维可以, 高维凉凉了.
比如, 理解 "向量空间", 就不要画什么坐标性, 箭头之类的, "技术层", 多花心思去理解内部结构 加和数乘, 这样的 思想层.
这样就会导致,原来可以线性分割的的数据, 降维后无法分割了. 因此, 类别中心点连线作为 投影线, 是不行的哦.
那么, 最优的投影线要如何确定, 这就是接下来的求解问题
LDA 降维推导
Fisher's 线性降维
- 不同类别, 降维后, 类与类之间, 差异大
- 同一类别, 降维后, 类中数据点, 差异小
自然语言是很好描述的, 如何转为数学语言, 这其实是很有趣味的问题, 突然想到一句很有感触的一句话:
"相比于解决问题, 最难的其实是发现(定义)问题"
不扯了, 直接来吧, 宝贝~ 假设 样本 X 有大 K 个类别, 各个类别(矩阵)的中心 (均值向量) 为 (mu_1, mu_2, ...mu_k)
首先,
来描述, 不同类别的 均值 和全局的 均值 之间的 "差异总量" 有多大, 得到一个矩阵
(S_B = sum limits_{k=1}^K(mu_k - ar x) (mu_k - ar x)^T)
都是列向量哦, 最后得到一个矩阵, B: 类别间 Between
然后,
来描述, 同一类别中, 各样本点 与 该类的 "中心点" , "距离" 有多大, 同样得到一个矩阵
(sum limits_{i =1}^{n} (x_i - mu_k)(x_i -mu_k)^T)
注: 我这里 n 表示 类别为 k 的 样本数, 是动态变化的哈,非 总体样本数哈
考虑所有类别, 各类之间的样本点差异 "总量", 就再 外层对 k求和, 即:
(S_W = sum limits _{i=1}^K sum limits_{i =1}^n (x_i - mu_k)(x_i -mu_k)^T)
W: 同类间的样本点, Within
目标: 其实就是想 找到一个 最优的 投影方向, 即一个向量
又理解了一波向量: 大小即其长度(模), 方向即, 与基坐标原点的连线方向. 二维下即可用 与某轴 的 "夹角" 衡量
(max _w J(w) = frac {w'S_Bw}{w'S_Ww})
(w') 也表示 (w^T). 对应向量/矩阵来说, ' 表示转置, 对应函数来说表示 求导
w 的不同数值, 即表示了不同方向的 投影线 (向量的方向)
"组间大,组内小" , 即上式的 分母要尽可能大,分子相对下, 则总体是以最大化问题 ,关于投影线(向量) w 的函数 J(w).
w 向量是可以任意取值的, 为了尽快求解, 可以对 w 做一个条件约束:
(w'S_ww =1)
为啥要分子 为1 而不出2,3,4 呢? 其实也可以, 1感觉比较好看 嗯.
为啥能对w约束? (S_w) 是已知的嘛, 如果 (S_w) 很大, 那 w 必然很小, 瞧, 约束上了
约束的是在干啥? 控制 w 的大致方向范围, 不要人生, 没有方向
转为带约束的最小值问题 ( - 最大 = 最小 )
(min_w J(w) =- frac{1}{2} w'S_Bw)
(s.t. w'S_ww = 1)
引入拉格朗日函数
(L(w) = - frac {1}{2} w'S_B w+ frac {1}{2} lambda (w'S_ww-1))
后面的 (frac {1}{2}) 是为了求导后形式更好看一点, 没啥实际意义
对 w 求偏导, 让其值 为0
( abla_w = 0 = -S_Bw + lambda S_ww)
矩阵求导, 网查的, 具体也不太理解和会
即: (S_Bw = lambda S_ww)
等号两边同时 左乘 (S_w^{-1}) 即:
(S_w^{-1} S_B w = lambda w)
兄弟们, 这个形式, 形如 "(Ax = lambda x)" 不就是特征分解嘛 (方向平行, 做拉伸变换对向量), 严格来说,
如果 (S_w^{-1} S_B) 是对称矩阵, 则 求解 w 则是一个特征分解问题, 但如果 不是对称矩阵呢, 问题就变为了广义特征向量问题了哦.
由于 (S_B) 是正交正定矩阵, (先不证明了哈) , 对 (S_B) 做特征分解, 可得:
S_B 跟协方差差不多的, 这里证明下协方差是半正定的
协方差阵定义为: (Sigma = E[(X-mu)(X-mu)^T])
只需证明对于任意非零向量 z, 满足:
(z^TSigma z ge 0 即可)
(z'Sigma z = z' E[(X-mu)(X-mu)^T]z)
(= E[z'(X-mu)(z'(X-mu))^T])
(=E[z'(X-mu)]^2 ge 0)
期望必然是非负, 即证协方差是 半正定
(S_B = S land S^{-1} = Q land Q')
矩阵性质: if X 是正交的
(S_B ^{frac {1}{2}} = Q land ^{frac {1}{2}}Q'), (land) 是一个对角阵, 就是只有主对角线有值的矩阵.
因此,
(S_B = S_B^{frac {1}{2}} S_B^{frac {1}{2}})
现在, 再定义 (v = S_B ^{frac{1}{2}} w) 则对于之前的等式: (S_w^{-1} S_B w = lambda w) 可写为
(S_w ^{-1} S_B^{frac {1}{2}} S_B^{frac {1}{2}} w = lambda w)
将 v 代入得:
(S_w^{-1} S_B ^{frac {1}{2}} v = lambda w)
再两边 左乘 (S_B^{frac {1}{2}}) 得:
(S_B^{frac {1}{2}} S_w^{-1} S_B ^{frac {1}{2}} v = S_B^{frac {1}{2}} lambda w = lambda v)
简写一波, 令 (A = S_B^{frac {1}{2}} S_w^{-1} S_B ^{frac {1}{2}}) 其实 A 也是正定矩阵, 此时的形式, 又变为咱熟悉的形式:
(Av = lambda v, 其中 v = S_B^{frac {1}{2}}w)
为啥要弄一通转换? 就是为了求解 w 啊
然后对 A 进行特征分解, 找到 (lambda_k 和 v_k) 后, (回得到很多配对的 (lambda_k, v_k) 取几个大的不就行了吗)
对应的求解 w, 即找到了最佳的投影方向, 能满足 "高内聚, 低耦合"
(w = (S_B^{frac {1}{2}})^{-1}v_k)
LDA vs PCA
-
PCA 的 投影线(方向) 是 使得数据点在只上的方差最大, 该投影线的垂直方向可作为类分割线, 不关注标签值
-
LDA 的 投影线(方向) 是 使得不同标签的点, 类别之间距离大, 同类之间的点距离小, 标签必须考虑
小结
连推了这两波LDA, 嗯...
作为, 线性分类器, 其核心思想, 就是 贝叶斯
作为, 降维工具, 其原理就是写代码风格的 高内聚, 低耦合
想想, 接下来, 扩展一波, 嗯 综合 LDA 先升维, 在分类 + 核函数技巧 , 琢磨一波....