【matlab】pca函数使用方法

以下关于函数的内容可在官网查到,本文档对其进行解释与说明。

关于pca原理的说明,可见文档【数据处理方法】主成分分析(PCA)原理分析

语法:

coeff = pca(X)

coeff = pca(X,Name,Value)

[coeff,score,latent] = pca(_)

[coeff,score,latent,tsquared] = pca(_)

[coeff,score,latent,tsquared,explained,mu] = pca(_)

说明:

coeff = pca(X)

X是n*p的数据矩阵,n代表个数,p代表维度。得到的coeff是p*p的系数矩阵,也即特征向量矩阵,coeff的每个列向量代表一个主成分,并且这些主成分按照成分方差的降序排列,也就是说,越往前的主成分,成分方差越大,保留的数据信息越多,越有价值。默认情况下,pca将数据中心化,并使用奇异值分解(SVD)算法。

coeff = pca(X,Name,Value)

可以使用一个或多个Name,Value对组参数,来指定用于计算和处理特殊数据类型的附加选项。

例如,可以指定pca返回的主成分数量,或者使用SVD以外的其他算法。

[coeff,score,latent] = pca(_)

除返回系数矩阵coeff外,还可以返回score,和latent,其中score为主成分分数,即数据在各主成分上的坐标(横向),latent返回主成分方差。

[coeff,score,latent,tsquared] = pca(_)

还返回X中每个观测值的Hotelling T方统计量。

[coeff,score,latent,tsquared,explained,mu] = pca(_)

还返回explaiend(每个主成分方差占所有方差总和的百分比)和mu(X中每个变量的估计均值)。

示例:

求数据集的主成分

加载样本数据集

load hald

原料数据有4个变量的13个观测值。

找出原料数据的主成分。

coeff = pca(ingredients)
coeff = 4×4

   -0.0678   -0.6460    0.5673    0.5062
   -0.6785   -0.0200   -0.5440    0.4933
    0.0290    0.7553    0.4036    0.5156
    0.7309   -0.1085   -0.4684    0.4844

 coeff的行包含四个变量的系数,列对应四个主成分。

主成分系数、分数和方差:

计算主成分的系数、分数和方差。

加载样本数据集。

load hald

原料数据有 4 个变量的 13 个观测值。

计算原料数据的成分的主成分系数、分数和方差。

coeff = pca(ingredients)

coeff = 4×4

   -0.0678   -0.6460    0.5673    0.5062
   -0.6785   -0.0200   -0.5440    0.4933
    0.0290    0.7553    0.4036    0.5156
    0.7309   -0.1085   -0.4684    0.4844
score = 13×4

   36.8218   -6.8709   -4.5909    0.3967
   29.6073    4.6109   -2.2476   -0.3958
  -12.9818   -4.2049    0.9022   -1.1261
   23.7147   -6.6341    1.8547   -0.3786
   -0.5532   -4.4617   -6.0874    0.1424
  -10.8125   -3.6466    0.9130   -0.1350
  -32.5882    8.9798   -1.6063    0.0818
   22.6064   10.7259    3.2365    0.3243
   -9.2626    8.9854   -0.0169   -0.5437
   -3.2840  -14.1573    7.0465    0.3405
      ⋮
latent = 4×1

  517.7969
   67.4964
   12.4054
    0.2372

score 的每列对应一个主成分。向量 latent 存储四个主成分的方差。

重新构造中心化的原料数据。

Xcentered = score*coeff'

Xcentered = 13×4

   -0.4615  -22.1538   -5.7692   30.0000
   -6.4615  -19.1538    3.2308   22.0000
    3.5385    7.8462   -3.7692  -10.0000
    3.5385  -17.1538   -3.7692   17.0000
   -0.4615    3.8462   -5.7692    3.0000
    3.5385    6.8462   -2.7692   -8.0000
   -4.4615   22.8462    5.2308  -24.0000
   -6.4615  -17.1538   10.2308   14.0000
   -5.4615    5.8462    6.2308   -8.0000
   13.5385   -1.1538   -7.7692   -4.0000
      ⋮

 Xcentered 中的新数据是将原始原料数据对应列减去列均值进行中心化后所得的结果。

以上为pca函数的主要使用方法,想了解更多细节,可以进入官网细看。

### 解决MATLABPCA函数调用时出现的错误 当尝试使用`transmittanceDataStandardized`作为输入参数调用MATLAB中的PCA函数出现问题时,可能的原因涉及数据预处理不当或维度不匹配等问题。 #### 数据准备与加载 为了确保数据被正确加载并标准化,在执行主成分分析之前应验证数据矩阵的形式和内容。这包括确认`transmittanceDataStandardized`是一个数值型数组,并且每一列代表一个变量而每行对应不同的观测样本[^2]。 如果遇到特定类型的错误消息,则可以根据提示进一步排查问题所在。常见的几个方面如下: - **检查NaNs/Infs**: 输入数据不应含有任何非数字(`NaN`)或无穷大(`Inf`)值。 - **中心化与缩放**: PCA通常假设数据已经过均值去除(centering)和方差调整(scaling),因此建议先通过`zscore()`或其他方法对原始数据集做适当变换再传递给PCA函数。 - **尺寸兼容性**: 确认传入的数据表结构适合进行降维操作;例如,对于m×n大小的数据框来说,其中m表示观察次数,n则是特征数量。 下面给出一段用于调试目的的小脚本片段,可以帮助定位潜在的问题源码位置: ```matlab % 加载数据文件 load('your_data_file.mat'); % 替换为实际路径名 % 显示基本信息 disp(['Size of transmittanceDataStandardized:', num2str(size(transmittanceDataStandardized))]); % 查找异常值 if any(isnan(transmittanceDataStandardized(:))) || any(isinf(transmittanceDataStandardized(:))) warning('Input contains NaN or Inf values.'); end % 应用标准正态分布转换 transmittanceDataNormalized = zscore(transmittanceDataStandardized); % 执行PCA分析 coeff = pca(transmittanceDataNormalized); ``` 这段代码首先展示了如何读取外部存储的数据集,接着打印出有关其形状的信息以便直观判断是否符合预期规格。之后会检测是否存在非法数值,并最终应用零均值单位方差规范化处理措施以满足大多数情况下PCA算法的要求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值