【问题标题】:How to select top 100 features(a subset) which are most relevant after pca?如何选择 pca 之后最相关的前 100 个特征(一个子集)?
【发布时间】:2013-03-29 17:20:42
【问题描述】:

我对一个 63*2308 的矩阵进行了 PCA,得到了一个分数和一个系数矩阵。得分矩阵为63*2308,系数矩阵为2308*2308维度。

如何提取最重要的前 100 个特征的列名,以便对它们执行回归?

【问题讨论】:

  • 你能展示一个关于你想要表演的简短研究案例吗?这会让你的问题更清楚。
  • 我有一个基因数据集,包含 63 名患者的 2308 个基因。我正在执行 PCA 以减小尺寸。减少维度后,我想选择前 100 个特征对其执行逻辑回归。这有意义吗?
  • 如果我正确理解了top features 的含义,我尝试给出答案。
  • 排名靠前的特征是那些具有高数据方差的特征(列)

标签: matlab data-mining


【解决方案1】:

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));

【讨论】:

  • 我得到了特征值。有没有办法找到这些特征值对应的原始数据中的哪些列?这将有助于从 2308 个特征中选择列并对数据执行回归。
  • 在进行 PCA 时,您会转换数据,以便您不再使用原始特征,而是通过组合它们组成的新特征。当您进行功能选择时,您可以从这些新功能中进行选择。虽然可以使用特征向量将新特征映射回旧特征,但这样做并非易事,而且 - 除非您有不同的理由这样做 - 这可能不是您想要做的。我已经修改了我的答案,以包含一些用于选择回归的前 100 个投影特征的示例 matlab 代码,以防这就是您所追求的。
【解决方案2】:

你试过了吗

B = sort(your_matrix,2,'descend');
C = B(:,1:100);

【讨论】:

  • your_matrix 代表什么?是指分数矩阵吗?
  • 我还有一个问题。变量 C 将检索 100 个维度。有没有办法知道这 100 个维度到底是什么?我使用 B = sort(score,2,'descend') 对分数矩阵进行排序,然后使用 C = B(:,1:100) 根据分数为我提供前 100 列。如何从原始矩阵中选择 100 个维度?
【解决方案3】:

小心!

只有 63 个观察值和 2308 个变量,您的 PCA 结果将毫无意义,因为数据未充分说明。您应该至少有(经验法则)维度*3 的观察结果。

使用 63 个观测值,您最多可以定义一个 62 维的超空间!

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 2021-04-06
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2022-07-05
    • 2018-07-31
    • 2021-06-08
    相关资源
    最近更新 更多