Matlab:如何在Matlab中使用PCA从数据集中找出哪些变量可以丢弃?
我使用PCA来找出数据集中的哪些变量是冗余的,因为它们与其他变量高度相关。我正在使用princomp matlab函数对之前使用zscore标准化的数据进行处理:Matlab:如何在Matlab中使用PCA从数据集中找出哪些变量可以丢弃?,matlab,pca,princomp,Matlab,Pca,Princomp,我使用PCA来找出数据集中的哪些变量是冗余的,因为它们与其他变量高度相关。我正在使用princomp matlab函数对之前使用zscore标准化的数据进行处理: [coeff, PC, eigenvalues] = princomp(zscore(x)) 我知道特征值告诉我数据集的变化有多少覆盖了每个主成分,而系数告诉我第I个原始变量有多少位于第j个主成分中(其中I-行,j-列) 所以我假设要找出原始数据集中哪些变量最重要,哪些变量最少,我应该用特征值乘以系数矩阵——系数值表示每个分量有多少
[coeff, PC, eigenvalues] = princomp(zscore(x))
我知道特征值告诉我数据集的变化有多少覆盖了每个主成分,而系数告诉我第I个原始变量有多少位于第j个主成分中(其中I-行,j-列)
所以我假设要找出原始数据集中哪些变量最重要,哪些变量最少,我应该用特征值乘以系数矩阵——系数值表示每个分量有多少变量,特征值告诉我们这个分量有多重要。
这是我的全部代码:
[coeff, PC, eigenvalues] = princomp(zscore(x));
e = eigenvalues./sum(eigenvalues);
abs(coeff)/e
但这并没有真正显示任何东西-我在以下集合中尝试过,其中变量1与变量2完全相关(v2=v1+2):
但我的计算结果如下:
v1 0.5525
v2 0.5525
v3 0.5264
这并没有显示出什么。我希望变量2的结果显示它远没有v1或v3重要。
我的假设中哪一个是错误的?编辑我已经完全修改了答案,因为我知道哪些假设是错误的 在解释OP中不起作用的内容之前,让我确保我们使用相同的术语。在主成分分析中,目标是获得能够很好地分离观测值的坐标变换,这使得在低维空间中描述数据(即不同的多维观测值)变得容易。当观测值由多个测量值组成时,它们是多维的。如果线性独立观测值少于测量值,我们预计至少有一个特征值为零,因为例如,三维空间中的两个线性独立观测向量可以用二维平面来描述 如果我们有一个数组
x = [ 1 3 4
2 4 -1
4 6 9
3 5 -2];
由四个观测值和三个测量值组成,princomp(x)
将找到四个观测值所跨越的低维空间。由于有两个相互依赖的测量值,其中一个特征值将接近零,因为测量空间只有2D而不是3D,这可能是您想要找到的结果。事实上,如果你检查特征向量(coeff
),你会发现前两个分量非常明显地共线
coeff = princomp(x)
coeff =
0.10124 0.69982 0.70711
0.10124 0.69982 -0.70711
0.9897 -0.14317 1.1102e-16
由于前两个分量实际上指向相反的方向,因此转换观测值的前两个分量的值本身就没有意义:[1 1 25]
相当于[1000 1000 25]
现在,如果我们想知道任何测量值是否是线性相关的,如果我们真的想使用主成分,因为在现实生活中,测量值不是完全共线的,我们想为机器学习应用找到良好的描述符向量,将三个测量值视为“观测值”,并运行<代码> PRIMCOMP(X′)< /代码>,这是非常有意义的。由于只有三个“观测”,但有四个“测量”,因此第四个特征向量将为零。然而,由于存在两个线性相关的观测值,我们只剩下两个非零特征值:
eigenvalues =
24.263
3.7368
0
0
要找出哪些测量值高度相关(如果使用特征向量转换的测量值作为输入,例如机器学习,则实际上不需要),最好的方法是查看测量值之间的相关性:
corr(x)
ans =
1 1 0.35675
1 1 0.35675
0.35675 0.35675 1
毫不奇怪,每个测量值都与自身完全相关,v1
与v2
完全相关
EDIT2
但特征值告诉我们在新空间中哪些向量最重要(覆盖变化最多),系数也告诉我们每个变量在每个分量中的数量。因此,我假设我们可以使用这些数据来找出哪些原始变量拥有最多的方差,因此是最重要的(并去掉那些代表少量的变量)
如果您的观察结果显示一个测量变量的方差非常小(例如,x=[1 2 3;1 4 22;1 25-25;1 11 100];
,因此第一个变量对方差没有贡献),则此方法有效。然而,对于共线测量,两个向量都具有相同的信息,并且对方差的贡献相等。因此,特征向量(系数)可能彼此相似
为了让@agnieszka的评论保持有意义,我在下面留下了我答案的原始点1-4。注意#3是对特征向量除以特征值的响应,这对我来说没有太多意义
coeff
返回主体的基向量
组件,其顺序与原始输入几乎没有关系特征值/和(特征值)
norm
等于1)向量调用unique
李>
2.错;与主成分相对应的系数列的顺序是递减的,但行与变量的顺序是正确的,这是我唯一的假设(PC1的系数在第1列,第1行与v1、第2行与v2等相对应)3有什么问题?特征值告诉我们主成分方差覆盖,使其成为特征值。
corr(x)
ans =
1 1 0.35675
1 1 0.35675
0.35675 0.35675 1