PCA 随笔

作者: zidea | 来源:发表于2020-04-01 21:04 被阅读0次
    machine_learning.jpg

    在今天硬件条件下,我们无需考虑存储成本,大量高维数据提供机器学习再次崛起的条件,同时维度泛滥也给我们带来困惑。当然要首先澄清一下我们认为用处不大的维度并不等于他真的没有价值。可能我们看到的只是表面...

    PCA

    数据分布中心点,我们可以通过线性变换将数据平移到的数据分布中心,为了简化 PCA 推导过程,我们要做的就是先中心化数据,也就是让数据平均值就是在(0,0)点

    • 中心化数据
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
    from numpy.linalg import cholesky
    %matplotlib inline
    
    np.random.seed(10)
    sampleNumber = 20
    mu = np.array([[1, 5]])
    Sigma = np.array([[1, 0.5], [1.5, 3]])
    R = cholesky(Sigma)
    plt.axhline(y=0,color='y',linestyle="dashed")
    plt.axvline(x=0,color='y',linestyle="dashed")
    plt.xlim(-5,10)
    plt.ylim(-5,10)
    plt.grid()
    s = np.dot(np.random.randn(sampleNumber, 2), R) + mu
    plt.scatter(s[:,0],s[:,1])
    plt.axhline(y=np.mean(s[:,1]))
    plt.axvline(x=np.mean(s[:,0]))
    plt.show()
    

    那么找到数据一个分量,然后数据在这个分量上分的最开,那么我们如何找到这个分量,我们如何衡量数据分散的程度,投影后数据的方差变大代表数据分布比较开,
    我们就是要找到最大方差,当投影后,
    \begin{aligned} x^{(1)} \rightarrow l^{(1)}\\ x^{(2)} \rightarrow l^{(2)}\\ \vdots\\ x^{(N)} \rightarrow l^{(N)}\\ \end{aligned}
    l^{(i)} 表示x^{(1)} 在某一个分量上的投影,然后

    \frac{1}{N}\sum_{i=1}^N (l^{(i)} - 0)^2

    x^{(1)} \rightarrow l^{(1)}

    我们假设要投影的方向为单位向量\vec{u},表示一个方向

    l^{(i)} = x^{(i)}\vec{u}

    目标函数
    \frac{1}{N} \sum_{i=1}^N (x^{(i)}\vec{u})^2

    \max_{\vec{u}}\frac{1}{N} \sum_{i=1}^N (x^{(i)}\vec{u})^2
    标量做转置还是标量
    \begin{aligned} \max_{\vec{u}}\frac{1}{N} \sum_{i=1}^N (x^{(i)}\vec{u})^T(x^{(i)}\vec{u})\\ \max_{\vec{u}}\frac{1}{N} \sum_{i=1}^N ( (x^{(i)})^T\vec{u})^T( (x^{(i)})T\vec{u})\\ \max_{\vec{u}}\frac{1}{N} \sum_{i=1}^N \vec{u}^Tx^{(i)}(x^{(i)})^T\vec{u}\\ \max_{\vec{u}} \vec{u}^T \frac{1}{N} \sum_{i=1}^N ( x^{(i)}(x^{(i)})^T)\vec{u} \end{aligned}

    \frac{1}{N} \sum_{i=1}^N ( x^{(i)}(x^{(i)})^T) 就是 \vec{u}= 0 时的协方差矩阵。

    \max_{\vec{u}} \vec{u}^T \Sigma \vec{u}
    假设最大值是\lambda,我们能够看到\vec{u}\vec{u}_1

    \vec{u}_1^T \Sigma \vec{u}_1 = \lambda
    \vec{u}_1 \vec{u}_1 \Sigma \vec{u}_1 = \lambda \vec{u}_1
    \vec{u}_1 \vec{u}_1^T \Sigma \vec{u}_1 = \lambda \vec{u}_1
    \Sigma \vec{u}_1 = \lambda \vec{u}_1

    \lambda\Sigma 的特征值,\vec{u}就是\Sigma 的特征向量

    相关文章

      网友评论

        本文标题:PCA 随笔

        本文链接:https://www.haomeiwen.com/subject/mldbuhtx.html