引入
主成分分析(Principal components analysis,简称PCA)是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。一般我们提到降维最容易想到的算法就是PCA。
PCA算法主要用于(1)高维数据集的探索与可视化。2)数据压缩。3)数据预处理。4)图象、语音、通信的分析处理。5)降维(最主要),去除数据冗余与噪声。
1 PCA的思想
PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。具体的,假如我们的数据集是n维的,共有m个数据。
我们希望将这m个数据的维度从n维降到n’维,希望这m个n’维的数据集尽可能的代表原始数据集。我们知道数据从n维降到n’维肯定会有损失,但是我们希望损失尽可能的小。那么如何让这n’维的数据尽可能表示原来的数据呢?
PCA本质上是将方差最大的方向作为主要特征,并且在各个正交方向上将数据“离相关”,也就是让它们在不同正交方向上没有相关性。数据从原来的坐标系转换到新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复,重复次数为原始数据中特征的数目。我们会发现,大部分方差都包含在最前面的几个新坐标轴中。因此,我们可以忽略余下的坐标轴,即对数据进行降维处理。
2 PCA的算法流程
- 去平均值,即每一位特征减去各自的平均值;
- 计算协方差矩阵;
- 计算协方差矩阵的特征值与特征向量;
- 对特征值从大到小排序;
- 保留最大的个特征向量;
- 将数据转换到个特征向量构建的新空间中。
3 PCA算法实现一般流程:
- 对数据进行归一化处理;
- 计算归一化后的数据集的协方差矩阵;
- 计算协方差矩阵的特征值和特征向量;
- 保留最重要的k个特征(通常k要小于n);
- 找出k个特征值相应的特征向量
- 将m * n的数据集乘以k个n维的特征向量的特征向量(n * k),得到最后降维的数据。
PCA降维准则:
- 最近重构性:样本集中所有点,重构后的点距离原来的点的误差之和最小。
- 最大可分性:样本在低维空间的投影尽可能分开。
PCA算法优点:
- 使得数据集更易使用;
- 降低算法的计算开销;
- 去除噪声;
- 使得结果容易理解;
- 完全无参数限制。
PCA算法缺点:
- 如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,却无法通过参数化等方法对处理过程进行干预,可能会得不到预期的效果,效率也不高;
- 特征值分解有一些局限性,比如变换的矩阵必须是方阵;
- 在非高斯分布情况下,PCA方法得出的主元可能并不是最优的。
算法核心
# 定义PCA算法
def PCA(data, r):
data = np.float32(np.mat(data))
rows, cols = np.shape(data)
data_mean = np.mean(data, 0) # 对列求平均值
A = data - np.tile(data_mean, (rows, 1)) # 将所有样例减去对应均值得到A
C = A * A.T # 得到协方差矩阵
D, V = np.linalg.eig(C) # 求协方差矩阵的特征值和特征向量
V_r = V[:, 0:r] # 按列取前r个特征向量
V_r = A.T * V_r # 小矩阵特征向量向大矩阵特征向量过渡
for i in range(r):
V_r[:, i] = V_r[:, i] / np.linalg.norm(V_r[:, i]) # 特征向量归一化
final_data = A * V_r
return final_data, data_mean, V_r
参考
https://zhuanlan.zhihu.com/p/33191810
今天的文章PCA算法的学习分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/11163.html