什么会导致 PCA 恶化分类器的结果?

机器算法验证 分类 主成分分析 特征选择
2022-02-05 23:49:19

我有一个要进行交叉验证的分类器,以及一百个左右的特征,我正在对其进行前向选择以找到特征的最佳组合。我还将这与使用 PCA 运行相同的实验进行比较,在 PCA 中我获取潜在特征,应用 SVD,将原始信号转换到新的坐标空间,并在我的前向选择过程中k

我的直觉是 PCA 会改善结果,因为信号会比原始特征更“信息丰富”。我对 PCA 的幼稚理解是否会导致我陷入困境?谁能提出一些常见原因,为什么 PCA 在某些情况下可能会改善结果,但在其他情况下会使结果恶化?

4个回答

考虑一个简单的案例,取自一篇很棒但被低估的文章“回归中使用主成分的说明”

假设您只有两个(缩放和去平均化)特征,将它们表示为,正相关等于 0.5,在中对齐,以及您希望分类的第三个响应变量假设的分类完全由的符号决定。x1x2XYYx1x2

执行 PCA会产生新的(按方差排序)特征,因为因此,如果您将维度减少到 1,即第一个主成分,那么您将丢掉分类的精确解!X[x1+x2,x1x2]Var(x1+x2)=1+1+2ρ>Var(x1x2)=22ρ

无关不幸的是,也不能在 PCA 中包含,因为这会导致数据泄漏。YY


数据泄漏是指使用相关目标预测变量构建矩阵时,因此任何样本外的预测都是不可能的。X

例如:在金融时间序列中,试图预测发生在美国东部标准时间上午 11:00 的欧洲收盘价,使用美国东部标准时间下午 4:00 的收盘价,是自美国收盘以来的数据泄露数小时后发生的,已包含欧洲收盘价。

有一个简单的几何解释。在 R 中尝试以下示例,并回忆第一个主成分使方差最大化。

library(ggplot2)

n <- 400
z <- matrix(rnorm(n * 2), nrow = n, ncol = 2)
y <- sample(c(-1,1), size = n, replace = TRUE)

# PCA helps
df.good <- data.frame(
    y = as.factor(y), 
    x = z + tcrossprod(y, c(10, 0))
)
qplot(x.1, x.2, data = df.good, color = y) + coord_equal()

# PCA hurts
df.bad <- data.frame(
    y = as.factor(y), 
    x = z %*% diag(c(10, 1), 2, 2) + tcrossprod(y, c(0, 8))
)
qplot(x.1, x.2, data = df.bad, color = y) + coord_equal()

PCA 帮助 PCA 有帮助

最大方差的方向是水平的,并且类是水平分离的。

PCA 伤害 PCA 很痛

最大方差的方向是水平的,但类是垂直分离的

PCA 是线性的,当你想看到非线性依赖时会很痛苦。

图像上的 PCA 作为向量: 在此处输入图像描述

一种非线性算法 (NLDR),可将图像缩减为 2 维、旋转和缩放:

在此处输入图像描述

更多信息:http ://en.wikipedia.org/wiki/Nonlinear_dimensionality_reduction

假设一个具有 3 个自变量和输出的简单案例,现在假设,因此您应该能够得到一个 0 错误模型。x1,x2,x3yx3=y

现在假设在训练集中的变化也是如此yx3

现在,如果您运行 PCA 并决定仅选择 2 个变量,您将获得的组合。因此,唯一能够解释的信息丢失了。x1x2x3y