PCA算法的学习
引入
主成分分析(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
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfkfga
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01