0%

PCA(主成分分析法)

Hey

Machine Learning notes

PCA(主成分分析法)

  1. 一个非监督的机器学习算法
  2. 主要用于数据的降维
  3. 通过降维,可以发现更便于人类理解的特征
  4. 可视化,去噪

注意pca只能demean,而不能使用数据标准化(StandardScaler),使用后会出现var为相等的情况

确定主成分—主方向是某个方向的数据的方差最大—实质上求的是特征向量—-拉格朗日余子式
one-hot编码—就是将变量变成01的形式方便处理

PCA(Principal Component Analysis)数据降维的方法

  1. 他可以通过线性变换将原始数据变换为一组各维度线性无关的表示,以此来提取数据的主要线性成分
  2. 线性无关是因为构建的特征轴是正交的
  3. 主要线性分量,
  4. PCA解释方差,对离群点很敏感,少量原远离中心的点对方差有很大的影响,从而也对特征向量有很大的影响

PCA实现

  1. 去除平均值(demean)
    每组数据都减去每组数据的平均值
  2. 计算协方差矩阵(也可以通过梯度上升法)
    矩阵的对角线是每组数据的方差,协方差是衡量两个变量同时变化的变化程度,协方差大于0表示x和y变化相同,小于0,表示一个增加,另一个减少。如果x和y是统计独立的,那么二者之间的协方差就是0;但是协方差是0,并不能说明x和y是独立的。协方差绝对值越大,两者对彼此的影响越大,反之越小。协方差是没有单位的量
    保留最重要的k个特征(通常k要小于n),也可以自己制定,也可以选择一个阈值,然后通过前k个特征值之和减去后面n-k个特征值之和大于这个阈值,则选择这个k
  3. 计算协方差矩阵的特征值和特征向量

  4. 将特征值排序
    将特征值按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵

  5. 保留前N个最大的特征值对应的特征向量
    将数据转换到上面得到的N个特征向量构建的新空间中(实现了特征压缩)

PCA原理

其实PCA的本质就是对角化协方差矩阵。有必要解释下为什么将特征值按从大到小排序后再选。首先,要明白特征值表示的是什么?在线性代数里面我们求过无数次了,那么它具体有什么意义呢?对一个n*n的对称矩阵进行分解,我们可以求出它的特征值和特征向量,就会产生n个n维的正交基,每个正交基会对应一个特征值。然后把矩阵投影到这N个基上,此时特征值的模就表示矩阵在该基的投影长度。特征值越大,说明矩阵在对应的特征向量上的方差越大,样本点越离散,越容易区分,信息量也就越多。因此,特征值最大的对应的特征向量方向上所包含的信息量就越多,如果某几个特征值很小,那么就说明在该方向的信息量非常少,我们就可以删除小特征值对应方向的数据,只保留大特征值方向对应的数据,这样做以后数据量减小,但有用的信息量都保留下来了。PCA就是这个原理

https://blog.csdn.net/u012162613/article/details/42177327?utm_source=blogxgwz2
http://www.cnblogs.com/zhangchaoyang/articles/2222048.html
https://blog.csdn.net/u013719780/article/details/78352262?utm_source=blogxgwz1
https://blog.csdn.net/watkinsong/article/details/38536463?utm_source=blogxgwz1
https://blog.csdn.net/bon_mot/article/details/76889559?utm_source=blogxgwz4
https://blog.csdn.net/u013082989/article/details/53792010?utm_source=blogxgwz3
https://www.cnblogs.com/zy230530/p/7074215.html

pca从高维数据向低维数据映射

X(mn) . W(kn).T

pca降维后肯定会损失一定的信息的

PCA的sklearn的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from sklearn.decomposition import PCA
# 参数的含义是将数据降维几维
pca = PCA(n_components=1)
pca.fit(x)
# 获取pca降维坐标
print(pca.components_)
# 获取降维之后的数据
X_prediction = pca.transform(x)
# 将数据恢复到原来的特征数目(注意pca的降维是不可逆的,就算恢复也是会造成信息损失的)
x_restore = pca.inverse_transform(X_prediction)
# 表示数据降维之后各个降维后的特征能表示的原来数据信息的比例
pca.explained_variance_ratio_
# 参数0.95表示的是原特征中信息的0.95
pca = PCA(0.95)

PCA也可以用于降噪和特征的提取

降噪

先用pca降维,然后在inverse_transform(),这样虽然特征信息损失了部分,但是也可以去噪

特征提取