有关Pca的使用:样本数目和降维数目的关系

本文讨论PCA降维过程中样本数与降维数目的关系。结论指出,降维后的维数应小于数据样本数。作者通过Matlab示例说明,无论是内置PCA函数还是其他机器学习工具箱,都要求降维后的维度小于等于样本数。文章还提到一篇被广泛引用的博客可能存在误解,并解释了降维后数据特征数小于样本数的原因,以确保降维过程有意义。
摘要由CSDN通过智能技术生成

先说我的结论:降维后维数一定要小于数据样本数

最近在做扭曲图形的识别,思路是用使用一幅静态图像,建立扭曲方程,生成一系列不同形态的扭曲图像,再做Pca降维,生成10个特征基向量,任何一幅扭曲图像都向基向量投影,产生10个特征系数,根据特征系数做识别,其实就是特征脸的过程。


写这篇文章的主要原因是我在网上搜索Pca,发现有一篇文章很火:PCA降维算法总结以及matlab实现PCA(个人的一点理解),被很多人转载,至于我也搞不清原创到底是谁;但不得不说,经过我的思考,我认为这篇文章中有些内容(即样本数目和降维数目关系)是有问题的,特在此讨论一下,希望得到更多人的意见和看法。


首先还是从Matlab中的Pca函数说起

之前自以为对Pca的原理比较清楚,但使用Matlab自带的pca函数时,有些问题困扰了我。下面先介绍一下matlab中pca函数的基本使用:

  • 26
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
PCA降维和K-means聚类的代码示例(MATLAB)如下所示: PCA降维代码示例: ```matlab % 假设我们有一个数据矩阵X,其中每一行是一个样本,每一列是一个特征 X = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]; % 对据进行均值中心化 mean_X = mean(X); X_centered = X - mean_X; % 计算协方差矩阵 cov_X = cov(X_centered); % 对协方差矩阵进行特征值分解 [eigen_vectors, eigen_values] = eig(cov_X); % 按特征值降序排列特征向量 [~, idx] = sort(diag(eigen_values), 'descend'); eigen_vectors_sorted = eigen_vectors(:, idx); % 取前k个特征向量作为主成分 k = 2; principal_components = eigen_vectors_sorted(:, 1:k); % 将据投影到低维空间 X_reduced = X_centered * principal_components; disp(X_reduced); ``` K-means聚类代码示例: ```matlab % 假设我们有一个数据矩阵X,其中每一行是一个样本,每一列是一个特征 X = [1, 2; 1.5, 1.8; 5, 8; 8, 8; 1, 0.6; 9, 11]; % 设置聚类数目 k = 2; % 随机初始化聚类中心 centroids = X(randperm(size(X, 1), k), :); % 迭代更新聚类中心直到收敛 max_iters = 10; for iter = 1:max_iters % 计算每个样本点到各个聚类中心的距离 distances = pdist2(X, centroids); % 将每个样本点分配到距离最近的聚类中心 [~, labels] = min(distances, [], 2); % 更新聚类中心为各个簇的平均值 for i = 1:k centroids(i, :) = mean(X(labels == i, :)); end end disp(labels); disp(centroids); ``` 这些代码示例可以帮助你在MATLAB中实现PCA降维和K-means聚类算法。请根据你的需求修改据矩阵X和其他参

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值