DLA起源之解
考虑一个样本集合X=[x1,x2...xN],每个样本属于C个类中的一个。我们可以使用类似于PCA,LDA的线性降维方法将x由m维降至d维(m>d)。但是线性降维方法存在一些问题,例如LDA中的求逆运算,经常可能因为矩阵的奇异性是降维结果恶化。而这里介绍的DLA方法可以避免这个问题。对了忘了给DLA一个'名正言顺'的名字,全名就是'Discriminative Locality Alignment'。名字不是我取的,就不要取笑博主说取了这么难懂的名字了。
DLA三部曲
DLA的降维矩阵计算分为3个步骤:
- 为数据集中的每个样本 建立一个patch,这个patch主要是本样本及其neighbors构成,既有本类还有其它类的样本。可以这样认为,每个patch都包含了局部判别信息,称这个步骤为'part optimization'。
- margin degree可以看成是该样本在正确分类的贡献的多少的衡量尺度,贡献越大,重要性越高,称这个步骤为'sample weighting'。
- 最后一步称为'whole alignment',是将所有的patch整合起来,求其最优化结果,得到降维矩阵。
Part Optimization
对于某个样本xi,我们选择k1个同类的最近邻样本[xi1,xi2,...xik1],选择k2个非同类的最近邻样本[xi1,xi2,...xik2],这样我们就构建了样本xi的patch:Xi=[xi,xi1,xi2,...xik1,xi1,xi2,...xik2],对这个patch的降维结果,我们可以记为Yi=[yi,yi1,yi2,...yik1,yi1,yi2,...yik2]。讲到这里,突然想起了降维的目的,简化运算复杂度是其一,还有就是可以将不同的类分离这也是一个目的!!!所以这里我们也是希望,降维后Y中同类样本更近些,而与xi不同类样本离之远些。写成公式就是
argminyi∑j=1k1||yi−yij||2
argmaxyi∑p=1k2||yi−yip||2
将上面的两个公式整合在一起就得到了下面的公式
argminyi(∑j=1k1||yi−yij||2−β∑p=1k2||yi−yip||2)
其中的
β是一个尺度因子,取值范围
[0,1]将同类样本的系数
1和异类样本的系数
β构成一个系数向量
ω=[1,...1,−β,..−β],于是上面那个公式可以用矩阵运算表示:
其中
ek1+k2=[1,...1]T的
k1+k2维列向量,
I是一个单位矩阵
所以最后可以计算出
Li矩阵如下:
Margin Degree
为了衡量一个样本的重要性,我们使用了margin degree这一概念。通常在机器学习中,一个样本的重要性并不是它能否更为正确的区分,相反是它的难分程度,越难区分则越重要。
在此处,我们通过在样本xi的周围画一个半径ξ大小的圈,圈中的非同类样本数为ni,则margin degree可以定义为
mi=exp(−1ni+δ)t
加入
mi后,前面的公式转为:
Whole Alignment
定义一个值为0-1的N∗(k1+k2+1)的矩阵Si,它用于从样本全集Y中找出Yi,即Yi=YSi,其中,(Si)pq=1ifp=Fiq
这样上面的式子又可以写成:
最终,整个数据集的优化变为了:
而对L矩阵的求解,可以用如下方法,(L初始化为N*N的0矩阵):
最终我们的优化问题变为:求降维矩阵
U,使下式最小:
解决方法是求XLXTu=λu的前d个最小特征根对应的特征向量
最后推荐在使用DLA降维前,先使用PCA去除一些噪声。