MATLAB实现PCA算法

描述

MATLAB实现PCA算法

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的示例:

假设我们有一组二维数据,可以通过以下代码来生成:

 

import numpy as np

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来实现二维数据的降维和可视化:

 

from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

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()函数可以得到降维后的结果,最后通过可视化来展示原始数据和降维后的结果。

完整的代码如下:

 

import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt

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降维后的数据。可以看出,经过降维后,数据呈一个直线状分布。

注意:上面的示例中的数据是人为生成的,实际应用中的数据通常是更加复杂的,需要进行更多的数据预处理和参数调整才能得到较好的降维效果。
        责任编辑:彭菁

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分