主成分分析

问题描述 投票:0回答:1

我必须编写一个用于人类动作识别的分类器(高斯混合模型)。 我有 4 个视频数据集。我选择其中 3 个作为训练集,其中 1 个作为测试集。 在将 gmm 模型应用于训练集之前,我在其上运行 pca。

pca_coeff=princomp(trainig_data);
score = training_data * pca_coeff;
training_data = score(:,1:min(size(score,2),numDimension));

在测试步骤中我应该做什么?我应该对测试数据执行新的princomp吗

new_pca_coeff=princomp(testing_data);
score = testing_data * new_pca_coeff;
testing_data = score(:,1:min(size(score,2),numDimension));

或者我应该使用我为训练数据计算的

pca_coeff

score = testing_data * pca_coeff;
testing_data = score(:,1:min(size(score,2),numDimension));
matlab machine-learning pca
1个回答
8
投票

分类器正在训练数据的主要组成部分定义的空间中的数据进行训练。在不同的空间中评估它是没有意义的 - 因此,您应该对测试数据应用与训练数据相同的转换,因此不要计算不同的

pca_coef

顺便说一句,如果您的测试数据是从与训练数据相同的分布中独立抽取的,那么对于足够大的训练和测试集,主成分应该大致相同。

选择使用多少主成分的一种方法是检查 PCA 分解的特征值。您可以从 princomp 函数中获取这些内容,如下所示:

[pca_coeff score eigenvalues] = princomp(data);

eigenvalues
变量将是一个数组,其中每个元素描述相应主成分所占的方差量。如果你这样做:

plot(eigenvalues);

您应该看到第一个特征值将是最大的,并且它们将快速减小(这称为“屏幕图”,应如下所示:http://www.ats.ucla.edu/stat/SPSS /output/spss_output_pca_5.gif,尽管您的点数可能最多为 800 点,而不是 12)。

具有较小对应特征值的主成分不太可能有用,因为这些维度上的数据方差非常小。许多人选择一个阈值,然后选择特征值高于该阈值的所有主成分。选择阈值的一种非正式方法是查看碎石图,并将阈值选择在“趋于平稳”线之后 - 在我之前链接的图像中,一个好的值可能是 ~0.8,选择 3 或 4 个主成分.

IIRC,你可以这样做:

proportion_of_variance = sum(eigenvalues(1:k)) ./ sum(eigenvalues);

计算“低维数据描述的方差比例”。

但是,由于您正在使用分类任务的主要组件,因此您无法真正确定任何特定数量的 PC 都是最佳的;特征的方差并不一定能告诉你它对于分类有多大用处。使用碎石图选择 PC 的另一种方法是尝试使用不同数量的主成分进行分类,并根据经验查看最佳数量是多少。

© www.soinside.com 2019 - 2024. All rights reserved.