pca matlab

本文详细介绍了主成分分析(PCA)算法的原理与实现步骤。PCA是一种常用的数据降维方法,能够将高维数据映射到低维空间,同时尽可能保留原始数据的结构信息。文章首先解释了如何利用归一化处理数据,接着介绍了如何通过奇异值分解(SVD)计算协方差矩阵的特征向量,最后给出了基于Matlab实现PCA的具体代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UPD:2017.2.26
理解PCA:http://blog.codinglabs.org/articles/pca-tutorial.html

pca是一个借助于matlab的svd函数写起来非常简单,但是理论条条是道的算法。

pca解决的问题常常是将n维数据降至k维,目标是找到向量 u(1),u(2),...,u(k) 使得总的投射误差最小。
这个算法最大的优点是完全无参限制,不需要人为的设定参数或者根据任何经验模型对计算进行干预,最后的结果只与数据相关。同时这也是缺点,如果用户对观测对象有一定的先验知识,掌握了数据的一些特征,可是无法通过参数化的方法对处理过程进行干预,可能会得不到预期的效果,效率也不高。

常见的使用错误有:
用pca来进行解决过拟合(减少了特征的数量)。这样做不如尝试归一化来处理。pca只是近似的丢掉一些特征,并不考虑任何与结果变量有关的信息,因此可能会丢失非常重要的特征。而归一化处理会考虑到结果变量,不会丢掉重要的数据。
另一个常见的错误是默认地将pca作为学习过程中的一部分。虽然这样做在很多时候有效果,但是还是最好从原有特征开始,只在必要的时候(算法运行过慢,内存占用太多)才考虑采用pca。

Normalization

pca第一步先将特征进行归一化处理。
bsxfun函数可以简化代码。

function [X_norm, mu, sigma] = featureNormalize(X)
    mu = mean(X);
    X_norm = bsxfun(@minus, X, mu);

    sigma = std(X_norm);
    X_norm = bsxfun(@rdivide, X_norm, sigma);
end

Singular value decomposition

第二步是计算原特征的协方差矩阵
=1mni=1(x(i))(x(i))T
第三步时计算协方差矩阵的特征向量,在matlab中,直接调用svd来分解奇异值,[U, S, V] = svd( )。其中U就是协方差矩阵的特征向量了,是具有与数据之间最小投射误差的方向向量构成的矩阵。我们希望将数据从n维降到k维,只需要从U中选取前k个向量,获得一个n*k的矩阵,表示为 Ureduce ,然后通过如下计算获得新的特征向量: z(i)=UTreducex(i)

function [U, S] = pca(X)
    [m, n] = size(X);
    U = zeros(n);
    S = zeros(n);
    sigma = 1 / m * X' * X;
    [U, S, V] = svd(sigma);
end

Pca

[X_norm, mu, sigma] = featureNormalize(X);
[U, S] = pca(X_norm);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值