我是特征选择的新手,我想知道您将如何使用 PCA 来执行特征选择。PCA 是否为每个输入变量计算一个相对分数,您可以使用它来过滤掉非信息性输入变量?基本上,我希望能够通过方差或包含的信息量对数据中的原始特征进行排序。
使用主成分分析 (PCA) 进行特征选择
使用 PCA 作为特征选择工具时的基本思想是根据变量系数(负荷)的大小(绝对值从最大到最小)来选择变量。您可能还记得 PCA 试图用原始变量个(或多或少相关)变量。让我们忽略如何为手头的问题选择最佳。这个主成分通过其解释方差按重要性排序,并且每个变量对每个成分的贡献程度不同。使用最大方差标准类似于特征提取 ,其中主成分用作新特征,而不是原始变量。但是,我们可以决定只保留第一个分量并选择具有最高绝对系数的变量;数字可能基于变量数量的比例(例如,仅保留个变量的前 10%),或固定截止值(例如,考虑归一化系数的阈值)。这种方法与惩罚回归(或PLS回归)中的Lasso算子有一些相似之处。的值和要保留的组件数量都不是显而易见的选择。
使用 PCA 的问题是(1)所有原始变量的测量值都用于投影到低维空间,(2)只考虑线性关系,以及(3)基于 PCA 或 SVD 的方法作为单变量筛选方法(t 检验、相关性等),不考虑数据结构的潜在多变量性质(例如,变量之间的高阶交互)。
关于第1点,已经提出了一些更精细的筛选方法,例如主要特征分析或逐步方法,如基因表达研究中用于“基因剃须”的方法。此外,稀疏 PCA可用于根据生成的变量负载执行降维和变量选择。关于第 2 点,如果需要将非线性关系嵌入到低维空间中,则可以使用核 PCA(使用核技巧)。决策树,或者更好的随机森林算法,可能更能解决第 3 点。后者允许推导出基于基尼系数或排列的变量重要性度量。
最后一点:如果您打算在应用分类或回归模型之前执行特征选择,请务必对整个过程进行交叉验证(参见《统计学习要素》或Ambroise 和 McLachlan,2002的第 7.10.2 节)。
由于您似乎对 R 解决方案感兴趣,我建议您查看caret包,其中包含许多方便的函数,用于在分类或回归上下文中进行数据预处理和变量选择。
给定一组 N 个特征,PCA 分析将产生(1)具有最高方差(第一个 PCA 分量)的特征的线性组合,(2)与第一个 PCA 分量正交的子空间中具有最高方差的线性组合等等(在组合的系数形成具有单位范数的向量的约束下)具有最大方差的线性组合是否是“好”特征实际上取决于您要预测的内容。出于这个原因,我会说作为 PCA 组件和作为“好”功能是(通常)两个不相关的概念。
PCA 告诉我们哪些特征更重要,如何?
简而言之:我们找到了第一个主成分(PC1)。现在 PC1 是变量(特征)的线性组合。线性方程中权重(系数)(加载分数)最高的变量是最重要的特征。
不要错过来自 StatQuest 的精彩视频。
我浏览了上面的评论,我相信很多人已经指出 PCA 不是一个很好的特征选择方法。PCA 提供了降维,但它经常被误解为特征选择(因为两者都倾向于在某种意义上减少特征空间)。我想指出我觉得两者之间的主要区别(对此绝对开放):
PCA 实际上是一种转换坐标系以捕获数据变化的方法。这并不意味着数据在任何方面都比其他数据更重要。在某些情况下可能是正确的,而在某些情况下可能没有意义。PCA 仅在具有最大变化的特征实际上对您的问题陈述最重要并且必须事先知道的情况下才相关。您确实对试图减少此问题的数据进行了规范化,但 PCA 仍然不是用于特征选择的好方法。我将列出 scikit-learn 用于特征选择的一些特征,以提供一些方向:
- 移除高度相关的特征(使用 Pearson 的相关矩阵)
- 递归特征消除 (sklearn.feature_selection.RFE)
- SelectFromModel (sklearn.feature_selection.SelectFromBest)
(1) 上面删除了彼此之间高度相关的特征(除了 1)。(2) 和 (3) 运行不同的算法来识别特征的组合并检查哪个集合给出了最好的准确性,同时相应地对特征的重要性进行排序。
我不确定您要使用哪种语言,但可能有与这些类似的库。
谢谢!