机器学习之TensorFlow

PCA 随笔

2020-04-01  本文已影响0人  zidea
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 的特征向量

上一篇下一篇

猜你喜欢

热点阅读