我在一个 63*2308 的矩阵上进行了 PCA,得到了一个分数和一个系数矩阵。得分矩阵为 63*2308,系数矩阵为 2308*2308 维度。
如何提取最重要的前 100 个特征的列名,以便我可以对它们执行回归?
我在一个 63*2308 的矩阵上进行了 PCA,得到了一个分数和一个系数矩阵。得分矩阵为 63*2308,系数矩阵为 2308*2308 维度。
如何提取最重要的前 100 个特征的列名,以便我可以对它们执行回归?
PCA 应该为您提供一组特征向量(您的系数矩阵)和一个特征值向量 (1*2308),通常称为 lambda)。您可能在 matlab 中使用不同的 PCA 函数来获取它们。
特征值表示每个特征向量解释了多少数据。选择特征的一种简单方法是选择具有最高特征值的 100 个特征。这为您提供了一组特征,可以解释数据中的大部分差异。
如果你需要证明你的写作方法是合理的,你实际上可以计算每个特征向量解释的方差量,并在例如解释 95% 的方差时进行切割。
请记住,仅基于特征值进行选择可能与对回归最重要的特征集不对应,因此如果您没有获得预期的性能,您可能需要尝试不同的特征选择方法,例如递归特征选择. 我建议使用谷歌学者找到几篇做类似事情的论文,看看他们使用了什么方法。
使用 PCA 获取前 100 个主要组件的快速 matlab 示例。
[eigenvectors, projected_data, eigenvalues] = princomp(X);
[foo, feature_idx] = sort(eigenvalues, 'descend');
selected_projected_data = projected(:, feature_idx(1:100));
当心!
只有 63 个观察值和 2308 个变量,您的 PCA 结果将毫无意义,因为数据未指定。您应该至少有(经验法则)维度*3 的观察结果。
使用 63 个观测值,您最多可以定义一个 62 维的超空间!
Have you tried with
B = sort(your_matrix,2,'descend');
C = B(:,1:100);