zoukankan      html  css  js  c++  java
  • LDA && NCA: 降维与度量学习

    已迁移到我新博客,阅读体验更佳LDA && NCA: 降维与度量学习
    代码实现放在我的github上:click me

    一、Linear Discriminant Analysis(LDA)

    1.1 Rationale

            线性判别分析(LDA)是一种监督学习的分类和降维的方法,但更多是被用来降维。LDA的原理是让投影后同一类中数据的投影点之间尽可能地靠近,而类不同类别中数据的类别中心之间的距离尽可能远,用一句话概括就是“投影后类内方差最小,类间方差最大”。

            假设我们的数据集D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本xixi为n维向量,yi(in){C1,C2,...,Ck}。我们定义Nj(j=1,2...k)为第j类样本的个数,Xj(j=1,2...k)为第j类样本的集合,而μj(j=1,2...k)为第j类样本的均值向量,定义Σj(j=1,2...k)为第j类样本的协方差矩阵。由于我们是多类向低维投影,则此时投影到的低维空间就不是一条直线,而是一个超平面了。假设我们投影到的低维空间的维度为d,对应的基向量为(w1,w2,...wd),基向量组成的矩阵为W, 它是一个n×d的矩阵。此时优化的目标变成

    [frac{W^TS_bW}{W^TS_wW} ]

    其中(S_b=sum_{j=1}^{k}N_{j}(mu_{j}-mu)(mu_j-mu)^T)(mu)为所有样本均值向量。(S_{mathcal{w}}=sum_{j=1}^{k}sum_{x in X_{j}}(x-mu_j)(x-mu_j)^T)。但是有一个问题,就是(W^TS_bW)(W^TS_{mathcal{w}}W)都是矩阵,不是标量,无法作为一个标量函数来优化。可以用如下的替代优化目标

    [egin{aligned} mathop{argmax_{mathrm{W}}} | mathrm{J}(mathrm{W})|&=frac{prod_{diag}W^TS_bW}{prod_{diag}W^TS_{mathcal{w}}W}\ & =prod_{i=1}^{d}frac{mathcal{w}_i^TS_bmathcal{w}_i}{mathcal{w}_i^TS_mathcal{w}mathcal{w}_i} end{aligned} ]

    其中(prod_{diag}A)为A的主对角线元素的乘积。利用广义瑞利商可知,最大值是(S_{w}^{-1}S_b)的最大特征值,而最大的d个值的乘积就是(S_{w}^{-1}S_b)最大的d个特征值的乘积,而W即为(S_{w}^{-1}S_b)最大的d个特征值对应的d个特征向量张成的矩阵,这样就得到用于降维的转换矩阵W。这里有一点需要注意的是W降维的大小不能超过k-1即数据类别数-1。因为矩阵的秩小于等于各个相加得到它的矩阵的秩的和,而累加得到(S_{b})((mu_{j}-mu)(mu_{j}-mu)^T)的秩为1,所以(S_{b})的秩不超过k,又因为第k个(mu_{k}-mu)可由前k-1个(mu_{j}-mu)线性表示,因此(S_b)秩最大为k-1,则不为0的特征值最多有k-1个。

    1.2 LDA vs PCA

    • Commonalities:
      • 两者均可以对数据进行降维。
      • 两者在降维时均使用了矩阵特征分解的思想。
      • 两者都假设数据符合高斯分布。
    • Differences:
      • LDA是有监督的降维方法,而PCA是无监督的降维方法
      • LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
      • LDA除了可以用于降维,还可以用于分类。
      • LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。

    二、Neighborhood Component Analysis(NCA)

    2.1 Rationale

            近邻成分分析(NCA)是由Jacob Goldberger和Geoff Hinton等大佬们在2005年发表于NIPS上的一项工作[1],属于度量学习(Metric Learning)和降维(Dimension Reduction)领域。NCA的原理是以马氏距离为距离度量的KNN为基础,通过不断优化KNN分类的准确率来学习转换矩阵,最终得到对原数据进行降维的转换矩阵。

            接下来对NCA学习转换矩阵的数学推导,设(x_i(1 le i le n))表示原数据的列向量表示,A是d*D的转换矩阵,其中D为原数据的维度,而d为降维后的维度,定义(p_{ij})映射空间中欧氏距离(相当于原空间中的马氏距离)的softmax概率值

    [p_{ij}=frac{exp(- |Ax_{i}-Ax_{j}|^{2})}{sum_{k e i}exp(-|Ax_{i}-A_{k}|)}, p_{ii}=0 ]

    (p_{i})为i能够被正确分类的概率,(C_{i})表示与i属于同一类的样本的集合,那么

    [p_{i}=sum_{j in C_{i}}p_{ij} ]

    优化目标就是最大化能被正确分类的点的数目

    [f(A)=sum_{i}sum_{j in C_{i}}p_{ij}=sum_{i}p_{i} ]

    f(A)对A求偏导,定义(x_{ij}=x_{i}-x_{j})

    [egin{aligned} f^{'}(A)=frac{partial f}{partial A}&=-2Asum_{i}sum_{j in C_{i}}p_{ij}(x_{ij}x_{ij}^{T}-sum_{k}p_{ik}x_{ik}x_{ik}^T)\ &=2Asum_{i}(p_{i}sum_{k}p_{ik}x_{ik}x_{ik}^T-sum_{j in C_{i}}p_{ij}x_{ij}x_{ij}^T) end{aligned} ]

    有了目标函数对A梯度之后就可以设定迭代次数和A的初始值(A_{0}),利用梯度下降法不断优化目标函数上限(当然也可以使用其它的优化方法比如拟牛顿法),设学习率为(alpha)(A_{0})通过下面公式迭代

    [A_{0}=A_{0}+alpha f^{'}(A_{0}) ]

    2.2 NCA vs PCA

    • commonalities:
      • 都可以用来降维
    • differences:
      • NCA除了降维还是一种度量学习的方法
      • NCA对数据分布没有假设,而PCA要求数据服从高斯分布
      • NCA基于KNN选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向

    1. http://www.cs.toronto.edu/~fritz/absps/nca.pdf ↩︎

  • 相关阅读:
    JZOJ 3034. 【NOIP2012模拟10.17】独立集
    JZOJ 3035. 【NOIP2012模拟10.17】铁轨
    JZOJ 1259. 牛棚安排
    数位DP JZOJ 3316. 非回文数字
    JZOJ 3046. 游戏
    JZOJ 3013. 填充棋盘
    debian 安装oracle提供的java8
    java 汉字转拼音 PinYin4j
    debian ssh设置root权限登陆 Permission denied, please try again
    java并发下订单生成策略
  • 原文地址:https://www.cnblogs.com/brooksj/p/10767443.html
Copyright © 2011-2022 走看看