PCA(Principal Component Analysis)是一种经典的线性降维方法,其基本思想是将高维数据映射到低维空间中,使得映射后的数据具有更好的可解释性。
PCA 的核心思想是将原始数据投影到一个新的坐标系中,使得投影后的数据方差最大。在这个新的坐标系中,第一个主成分是数据方差最大的方向,第二个主成分则是与第一个主成分不相关的方向,以此类推,直到所有主成分都被选出为止。
在 MATLAB 中,可以使用 pca 函数来计算主成分。下面是一个示例代码,假设我们有一个包含 1000 个样本和 10 个特征的数据集:
%生成随机数据 data=randn(1000,10); %计算主成分 [coeff,score,latent]=pca(data);
其中,coeff 是一个 10x10 的矩阵,每列对应一个主成分,score 是一个 1000x10 的矩阵,表示每个样本在新坐标系中的投影,latent 则是一个包含每个主成分的方差的向量。
我们可以使用这些结果来对数据进行降维。例如,如果我们希望将数据降到 3 维,可以将前三个主成分相加,得到每个样本在新空间中的坐标:
new_data=data*coeff(:,1:3);
这将返回一个 1000x3 的矩阵,表示每个样本在新空间中的坐标。
综上所述,PCA 是一种非常有效的降维方法,可以在不丢失太多信息的情况下将高维数据降到低维空间中。在 MATLAB 中,可以使用 pca 函数来计算主成分,并使用结果来对数据进行降维。
PCA并通过python实现
PCA(Principal Component Analysis)是一种常用的数据降维技术,它可以通过对数据进行主成分分析,将高维数据映射到低维空间,从而使得数据在保留尽量多信息的前提下,减少特征维度,简化问题。下面是一个用Python实现PCA的示例:
假设我们有一组二维数据,可以通过以下代码来生成:
importnumpyasnp np.random.seed(1)#设置随机数种子,这样每次运行程序生成的数据都是相同的 X=np.dot(np.random.rand(2,2),np.random.randn(2,200)).T
这里我们使用np.dot()函数来进行矩阵乘法运算,其中第一个矩阵是2x2的随机矩阵,第二个矩阵是2x200的随机矩阵,最终得到的是2x200的矩阵,这就是我们的原始数据。
接下来我们通过sklearn中的PCA来实现二维数据的降维和可视化:
fromsklearn.decompositionimportPCA importmatplotlib.pyplotasplt pca=PCA(n_components=1)#创建一个PCA对象,设置降维后的维度为1 X_new=pca.fit_transform(X)#对原始数据进行降维 plt.scatter(X[:,0],X[:,1],alpha=0.5)#绘制原始数据 plt.scatter(X_new[:,0],np.zeros(X_new.shape),alpha=0.5)#绘制降维后的数据 plt.show()
这里我们指定降维后的维度为1,即将二维数据降到一维。通过fit_transform()函数可以得到降维后的结果,最后通过可视化来展示原始数据和降维后的结果。
完整的代码如下:
importnumpyasnp fromsklearn.decompositionimportPCA importmatplotlib.pyplotasplt np.random.seed(1) X=np.dot(np.random.rand(2,2),np.random.randn(2,200)).T pca=PCA(n_components=1) X_new=pca.fit_transform(X) plt.scatter(X[:,0],X[:,1],alpha=0.5) plt.scatter(X_new[:,0],np.zeros(X_new.shape),alpha=0.5) plt.show()
运行结果会得到一个散点图,其中蓝色的点表示原始数据,橙色的点表示经过PCA降维后的数据。可以看出,经过降维后,数据呈一个直线状分布。
注意:上面的示例中的数据是人为生成的,实际应用中的数据通常是更加复杂的,需要进行更多的数据预处理和参数调整才能得到较好的降维效果。
责任编辑:彭菁
-
matlab
+关注
关注
185文章
2974浏览量
230405 -
数据
+关注
关注
8文章
7006浏览量
88947 -
PCA
+关注
关注
0文章
89浏览量
29594
原文标题:详解PCA主成分分析算法
文章出处:【微信号:嵌入式职场,微信公众号:嵌入式职场】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论