• PCA和LDA数据降维计算(含数学例子推导过程)


    PCA算法和LDA算法可以用于对数据进行降维,例如可以把一个2维的数据降低维度到一维,本文通过举例子来对PCA算法和LDA算法的计算过程进行教学展示。

    PCA算法计算过程(文字版,想看具体计算下面有例子)

    1.将原始数据排列成n行m列的矩阵,n为数据的维度,m为数据的个数,即将每个数据竖着展示每个维度的值,然后将他们合成一个矩阵x
    2.将x的每一行进行零均值化处理,即每一行的数据全部加起来,然后除以m,然后得到一个常数a,将这一行的每个数据都进行-a处理,其余的每一行以此类推。
    3.求出协方差矩阵,c = X X X X T X^\mathrm T XT / m ;其中x和xt已经是进行零均值化处理过后的举证了
    4.求出c的特征值以及对应的特征值向量,同时对特征向量进行单位化处理(一定要做,切记不能忘了)
    5.特征向量按照特征值的大小从上到下按行排列成举证,取前k行组成矩阵p(k表示我们需要降低到的维度,例如如果我们要把数据降低到1维,我们取第一行就可以了)
    6.Y =px,Y即为我们所求的的矩阵

    LDA算法计算过程(文字版,想看具体计算下面有例子)

    1.计算类内散度矩阵Sw
    Sw求法,首先按照类别分别进行计算u,即1类计算u1,2类计算u2
    u的计算方法为每行为每一类别的总和除以数量(即同类别的每一行全部加起来,除以个数),
    然后Sw = Σ u \Sigma_u Σu Σ \Sigma Σ = Σ x 0 \Sigma_{x_0} Σx0(x-u0)(x-u0)T+ Σ x 1 \Sigma_{x_1} Σx1(x-u1)(x-u1)T,其中前面的x为u0类别里面的数据,x1为u1类别里面的数据,即各自处理各自的数据
    2.计算类间散度矩阵Sb
    Sb=(u0-u1)(u0-u1)T
    3.求c = Sw-1Sb
    4.计算c的特征值和特征向量,按特征值的大小把特征向量从左到右按列进行排序,取前k列组成矩阵p
    5.Y=PT*X,Y即为我们所求的矩阵

    例子:

    我们给予两个种类的二维数据(拿竖线进行划分,左边的种类为1类,右边的种类为2类),求PCA和LDA将其进行降一维后的结果,即降低为一维数据
    [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] (例子) \left[ 1102020011

    \right] \tag{例子} [1210002101](例子)

    PCA:

    我们可以看到数据为2维5项数据,求出他的均值u0
    u0第一行为(-1-1+0+2+0)/5= 0;
    u0第二行为(-2 + 0 +0 + 1 +1)/5 = 0;
    所以 u 0 = [ 0 0 ] (1) u_0=\left [ 00

    \right] \tag{1} u0=[00](1)
    将五个数据分别减去u得到了新的X,因为这题比较特殊,经过0均值化处理后数据没有改变,所以x还是原来的数值没有发生改变
    c = [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] ∗ [ − 1 − 2 − 1 0 0 0 2 1 0 1 ] / 5 = [ 6 / 5 4 / 5 4 / 5 6 / 5 ] c=\left [ 1102020011
    \right] * \left [ 1210002101
    \right] /5=\left [ 6/54/54/56/5
    \right]
    c=[1210002101] 1102020011 /5=[6/54/54/56/5]

    求出c的特征值和单位特征向量(这一步不会的可以移步考研数学李永乐,因为markdown写latex太难写了,题主就直接给出求得之后的答案了)
    所求得的特征值为: λ 1 \lambda_1 λ1=2, λ 2 \lambda_2 λ2=2/5
    然后我们求得对应的单位向量矩阵为(通过特征值的大小对特征向量进行按行排序)
    p = 1 2 [ 1 1 − 1 1 ] p=\frac{1}{\sqrt[]{2}}\left [ 1111
    \right]
    p=2 1[1111]

    因为我们要将数据从2维降低到1维,所以我们选择P的第一行数据进行降维度,p的第一行我们记作m,注意,此时的x为进行过0均值化后的数据
    y = m ∗ x = 1 2 [ 1 1 ] ∗ [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] = 1 2 [ − 3 − 1 0 3 1 ] y=m*x=\frac{1}{\sqrt[]{2}}\left [ 11
    \right]* \left [ 1102020011
    \right]=\frac{1}{\sqrt[]{2}}\left [ 31031
    \right]
    y=mx=2 1[11][1210002101]=2 1[31031]

    我们所得到的y即为我们所求的结果

    LDA:

    [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] (例子) \left[ 1102020011

    \right] \tag{例子} [1210002101](例子)
    本题已知前三个数据为一个种类,后两个数据为一个种类

    所以u0第一行为(-1-1+0)/3 = -2/3
    u0第二行为(-2+0+0)/3 = -2/3;
    u1第一行为(2+0)/2=1
    u1第二行为(1+1)/2=1
    所求得的u0u1如下所示:
    u 0 = [ − 2 3 − 2 3 ] u 1 = [ 1 1 ] u_0=\left [ 2323

    \right] u_1=\left [ 11
    \right] u0=[3232]u1=[11]
    然后我们选择套公式进行Sw的计算,将前三个值带入到前面的x0中,后面的两个值带入到后面的x1中,求得的Sw
    Sw = Σ u \Sigma_u Σu Σ \Sigma Σ = Σ x 0 \Sigma_{x_0} Σx0(x-u0)(x-u0)T+ Σ x 1 \Sigma_{x_1} Σx1(x-u1)(x-u1)T
    Sw的结果为:
    S w = [ 2 3 2 3 2 3 8 3 ] + [ 2 0 0 0 ] = [ 8 3 2 3 2 3 8 3 ] S_w=\left [ 23232383
    \right]+\left[ 2000
    \right] =\left[ 83232383
    \right]
    Sw=[32323238]+[2000]=[38323238]

    然后我们求出Sw-1,求逆矩阵的方法也可以参照考研数学,求出来之后的值为:
    S w − 1 = [ 2 5 − 1 10 − 1 10 2 5 ] S_w^{-1}=\left [ 2511011025

    \right] Sw1=[5210110152]
    计算类间散度矩阵Sb
    Sb=(u0-u1)(u0-u1)T
    求出Sb的值为:
    S b = [ 25 9 25 9 25 9 25 9 ] S_b=\left [ 259259259259
    \right]
    Sb=[925925925925]

    然后我们计算c=Sw-1*Sb
    求得c为:
    c = [ 6 5 6 5 6 5 6 5 ] c=\left [ 65656565
    \right]
    c=[56565656]

    求出c的特征值和单位特征向量,将单位特征向量按列排序(按照特征值大小进行排序),得到的单位特征向量为:
    特征向量为 = 1 2 [ 1 − 1 1 − 1 ] 特征向量为=\frac{1}{\sqrt[]{2}}\left [ 1111
    \right]
    特征向量为=2 1[1111]

    取出第一列组成矩阵p,然后
    y =pT*x,y即为我们所需要的降维之后的数据
    y = 1 2 [ 1 1 ] ∗ [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] = 1 2 [ − 3 − 1 0 3 1 ] y=\frac{1}{\sqrt[]{2}}\left [ 11
    \right] * \left[ 1102020011
    \right] =\frac{1}{\sqrt[]{2}}\left[ 31031
    \right]
    y=2 1[11][1210002101]=2 1[31031]

    可以看到 PCA与LDA降维所得到的答案是一样的,证明了我们计算的正确性

    码字不易,主要是写latex的语法的矩阵实在是太复杂了,写的十分折磨,点个赞再走把!

  • 相关阅读:
    9月16日,每日信息差
    《windows 程序设计》读书笔记 二
    爬虫机试题-爬取新闻网站
    php组件漏洞
    6.19-MyBatis源码—体系介绍和配置文件解析源码剖析
    java计算机毕业设计高校教师教学业绩考核系统2021MyBatis+系统+LW文档+源码+调试部署
    用于远程医疗的无创、无袖带血压测量【翻译】
    模板引擎Thymeleaf和监听器
    搭建 3D 智慧农场可视化
    blender建立一个适合three.js中使用杯子/花瓶 反细分减小体积
  • 原文地址:https://blog.csdn.net/bigkaimyc/article/details/134015265