首先搞清楚什么叫判别分析?Discriminant Analysis就是根据研究对象的各种特征值判别其类型归属问题的一种多变量统计分析方法。
根据判别标准不同,可以分为距离判别、Fisher判别、Bayes判别法等。比如在KNN中用的就是距离判别,当然这里的“距离”又有好几种:欧氏距离、街区距离、甚至可以用皮尔森相关系数等。朴素贝叶斯分类用的就是Bayes判别法。本文要讲的线性判别分析就是用是Fisher判别式。
根据判别函数的形式,可以分为线性判别和非线性判别。
LDA和PCA比较
两者都是为了在对原始数据降维之后进行分类。PCA是无监督的方式,它没有分类标签,降维之后需要采用K-Means或自组织映射网络等无监督的算法进行分类。LDA是有监督的方式,它先对训练数据进行降维,然后找出一个线性判别函数。
两类线性判别分析
给定N个特征为d维的样例$x^{(i)}\{x_1^{(i)},x_2^{(i)},...,x_d^{(i)}\}$,其中有N1个样例属于类别w1,另外N2个样例属于类别w2。现在我们要将原始数据降低到只有一维,降维函数(或者叫投影函数)是:$y=w^Tx$,最后我们就依靠每个样例对应的y值来判别它属于哪一类。
形象的图求如下
我们就是要找到这个最佳的w,使得样例映射到y后最易于区分。
定义每类样例的均值点:$u_i=\frac{1}{N_i}\sum_{x\in{w_i}}x$
样例投影到y后有均值点为:$\tilde{u_i}=\frac{1}{N_i}\sum_{x\in{w_i}}{w^Tx}=w^Tu_i$
我们希望投影后两类样例中心尽量地分离,即
$|\tilde{u_1}-\tilde{u_2}|=|w^T(u_1-u_2)|$越大越好。
同时我们希望投影之后类内部的方差$\tilde{s_i}^2=\sum_{y\in{w_i}}(y-\tilde{u_i})^2$越小越好。
由于得到我们的目标函数:
$$max\qquad{J(w)}=\frac{|\tilde{u_1}-\tilde{u_2}|^2}{\tilde{s_1}^2+\tilde{s_2}^2}\qquad(1)$$
又是个最优化问题。最终解得
$w=(s_1+s_2)^{-1}(u_1-u_2)$,s1和s2分别中原始样例的方差。
这就是Fisher在1936年提出的线性判别分析。
如果$y=w^Tx-w^Tu>0$(u是所有样本的均值),就属于类别C1,否则就属于类别C2。
实际上使用线性回归得到的直线方向就是二值分类中LDA求得的直线方向。
多类线性判别分析
假设有C个类别,降以一维已经不能满足分类要求了,我们需要k个基向量来做投影,W=[w1|w2|...|wk] 。样本点在这k维投影后的结果为[y1,y2,...,yk],且有$y_i=w_i^Tx\qquad{y}=W^Tx$。
$S_w=\sum_{i=1}^C{S_{wi}}$
$S_{wi}=\sum_{x\in{w_i}}(x-u_i)(x-u_i)^T$
$S_B=\sum_{i=1}^C{N_i(u_i-u)(u_i-u)^T}$
$u=\frac{1}{N}\sum_{\forall{x}}x=\frac{1}{N}\sum_{x\in{w_i}}N_iu_i$
同样是求一个类似于(1)式的最优化问题,我们得到
$S_w^{-1}S_Bw_i=\lambda{w_i}$
即wi是矩阵$S_w^{-1}S_B$的特征向量。首先求出$S_w^{-1}S_B$的特征值,然后取其前k个特征向量组成W即可,因为特征值大的对应的特征向量分割性好。另外SB的秩至多为C-1,所以$S_w^{-1}S_B$不为0的特征值至多有C-1个,所以k最大为C-1。
由于$S_w^{-1}S_B$不一定是对称矩阵,因此k个特征向量不一定正交,这也是与PCA不同的地方。求$S_w^{-1}S_B$的特征向量不能采用奇异值分解的方式,而因该采用更通用的求一般方阵特征向量的方式。特征值的求法有很多,求一个D * D的矩阵的时间复杂度是$O(D^3)$, 也有一些求Top k的方法,比如说幂法,它的时间复杂度是$O(D^2 * k)$。
那降维之后又如何根据y值来判别分类呢?取[y1,y2,...,yk]中最大的那个就是所属的分类。这么说对于有C个类别的分类问题,我们最多只能分出C-1个类别来?
使用LDA的限制
- LDA至多可生成C-1维子空间
- LDA不适合对非高斯分布的样本进行降维
- LDA在样本分类信息依赖方差而不是均值时,效果不好。
- LDA可能过度拟合数据。
本文来自博客园,作者:高性能golang,转载请注明原文链接:https://www.cnblogs.com/zhangchaoyang/articles/2644095.html