1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > PCA(主成分分析)降维方法

PCA(主成分分析)降维方法

时间:2018-09-23 16:08:16

相关推荐

PCA(主成分分析)降维方法

一、降维

1)首先我们可以将数据以矩阵的形式表示出来,例如Xmxn,即m个数据样本,每个数据样本有n维度的特征(这个特征就是数字,n维特征就是n个数字表示了这个样本)。降维的目的就是减小n,比如降低维度到k(k<n)。

2)在二维上举例:我们用我们常用的坐标系,即(1,0)、(0,1)为基的坐标系,选取一组数据[ (-2,-2),(-1,-1)、(0,0)、(1,1)、(2,2)],我们发现这组数据在坐标系上都处于一条直线上,就是y=x上。此时他的维度是二维的,但是我们把X、Y坐标轴逆时针旋转45度,即X轴与之前的y=x直线重合,我们得到X’、Y’,此时数据全部在X’轴上,点的y坐标全变为0,Y‘轴似乎没有什么作用,这样就把维度降低一维了。

3)我们需要明确的是,某点在不同的基下,坐标是不同的,但是该点距离原点的距离不变。这个距离通过勾股定理计算得来,因此在X轴上的投影越大,那么相应在Y轴上的投影就会变小,极端情况下,全部分配给了X轴,y=0,这就舍弃了Y轴,达到了降维的目的。

4)如下图,当点集中在Y轴分布的范围很广,在X轴分布的范围很小,因此我们可以认为用X轴描述数据集的特征必要不大,因此我们可以舍弃X轴的维度,从而达到降维的目的。这就提醒我们应该把数据集投影到范围比较广的范围里,比如下图中的Y轴,即尽可能的扩大数据集的离散程度。

5)降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为应用非常广泛的数据预处理方法。

降维具有如下一些优点:

使得数据集更易使用。降低算法的计算开销。去除噪声。使得结果容易理解。

降维的算法有很多,比如奇异值分解(SVD)、主成分分析(PCA)、因子分析(FA)、独立成分分析(ICA)。

二、PCA简介

1、PCA,即主成分分析,提取数据的主要成分,剔除数据中相对次要的成分,换句话说PCA的目标是降维,就是剔除数据次要成分的维度。在很多应用领域的数据是多个变量存在的,而且要求收集数据量是很大的,这将增加数据分析工作的难度。因此,我们想能不能剔除数据中相对次要的成分,一次来压缩数据量的大小、降低数据变量的复杂度。

2、 高维数据中变量之间的关系是不可见的,因此我们应该找到一个合理的方法,在降低维度的同时,尽量的减少数据信息的损失,这样对于数据的处理是可以接受的。

三、PCA的目标

1、总结一下 PCA 的算法步骤:

设有 m 个n 维数据。

1)将原始数据按列组成 m行 n 列矩阵 X;

2)将 X 的每一行减去这一行的均值;

3)求出协方差矩阵

4)求出协方差矩阵的特征值及对应的特征向量;(此处求解协方差矩阵的特征值和特征向量有两种方法:特征值分解方法和SVD分解方法)

5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k 行组成矩阵 P;

6)Y=PX即为降维到 k 维后的数据

:A、特征值分解矩阵

B、SVD分解矩阵原理

2、基的选择标准

我们知道同样的一组数据选用不同的基,其表示也会不同。基的数量也就是维的数量,当基的数量小于数据的数据的维数,就是降维。假如我们从n维降到k维,那么这k个基怎么选择呢?也就是说怎么选择k个基才能使得降维的效果最好,保存原始信息最多。

这里给出两种理解,均是PCA最大方差理论(就是数据投影到特定基后的方差越大,降维的效果越好)

1)在信号处理中认为信号具有较大的方差,噪声有较小的方差。如果样本在X上的投影方差较大,在Y上的投影方差较小,那么可认为Y上的投影是由噪声引起的。

2)方差越大,数据越分散,也就意味着信息量越多,信号越强,也可以说熵越大,该特征越有区分度。协方差代表维度x和维度y之间的相关程度,协方差越大,也就意味着噪声越大,信息的冗余程度越高。

因此n维的数据降低到k维,在k维上的每一维的样本方差都很大。

注:数据投影到基上的分散程度越大,越好。因此衡量标准可以变为所有点的投影绝对值之和最大。下图是计算投影的方法,即某一点到原点的向量与基的内积。

(图片来自其他人的博客)

3、多维

在一维空间中我们可以用方差来表示数据的分散程度。而对于高维数据,我们用协方差进行约束,协方差可以表示两个变量的相关性。为了让两个变量尽可能表示更多的原始信息,我们希望它们之间不存在线性相关性,因为相关性意味着两个变量不是完全独立,必然存在重复表示的信息。

因此问题转化为:将一组 N 维向量降为 K 维,其目标是选择 K 个单位正交基,使得原始数据变换到这组基上后,各变量两两间协方差为 0,而变量方差则尽可能大(在正交的约束下,取最大的 K 个方差)。

四、实现PCA的Python代码

在这里插入代码片##Python实现PCAimport numpy as npdef pca(X, k): # k is the components you want# mean of each featuren_samples, n_features = X.shapemean = np.array([np.mean(X[:, i]) for i in range(n_features)])# normalization# 去平均值,即每一位特征减去各自的平均值。norm_X = X - mean# scatter matrix# 计算协方差矩阵scatter_matrix = np.dot(np.transpose(norm_X), norm_X)# Calculate the eigenvectors and eigenvalues# 求特征值和特征向量eig_val, eig_vec = np.linalg.eig(scatter_matrix)eig_pairs = [(np.abs(eig_val[i]), eig_vec[:, i]) for i in range(n_features)]# sort eig_vec based on eig_val from highest to lowest# 对特征值从大到小排序,eig_pairs.sort(reverse=True)# select the top k eig_vec# 选择其中最大的k个。然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。feature = np.array([ele[1] for ele in eig_pairs[:k]])# get new data# 将数据转换到k个特征向量构建的新空间中。data = np.dot(norm_X, np.transpose(feature))return dataX = np.array([[-1, 1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])print(pca(X, 1))

五、本文参考博客

/question/41120789?sort=created

/luoluonuoyasuolong/article/details/90711318

/p/77151308

/program_developer/article/details/80632779

本文使用到了这些博客的图、代码等

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。