在使用 PCA 降维之后,PCA 是否保留了任何线性可分集的线性可分性?转换后数据是否仍然是线性可分的?我认为它确实保留了线性可分离性,因为 PCA 只是减少了维度,而不是在可分离性方面降低了点之间的关系。我的思路是否正确?
PCA 是否为每个线性可分集保留线性可分性?
机器算法验证
主成分分析
2022-03-27 00:19:44
3个回答
不,可能是判别信息是在一个主成分的方向上,它解释了相对少量的总方差,因此被丢弃了。
考虑一个二维数据集,其中两个类位于长平行雪茄形细长高斯簇中,它们之间有一个小间隙。大多数方差位于集群的长轴上,因此第一个 PC 将位于该方向,第二个 PC 将与其正交。数据与第一个组件无法区分,因此如果您丢弃第二个组件,数据将不再是可分离的。
不,使用 PCA 降低维度只会最大化方差,这可能会或可能不会转化为线性可分性。
这是对立的方差和可分离性的两个可视化。在这两种情况下,判别信息主要位于低方差轴上,这将被死记硬背的降维丢弃。
三个数据点的最小示例(改编自whuber 的评论)
平行、拉长的高斯簇的示例(改编自Dikran 的回答)
import numpy as np
from sklearn.decomposition import PCA
# generate gaussian samples (n by 2)
rng = np.random.default_rng(4)
n = 100
X = rng.standard_normal((n, 2)) @ rng.random((2, 2))
# peel classes apart (+1 and -1 vertically)
y = 2 * np.arange(X.shape[0]) // n
X[:, 1] = np.where(y, X[:, 1] - 1, X[:, 1] + 1)
# project X
mu = X.mean(axis=0)
X -= mu
pca = PCA(n_components=2).fit(X) # explained variance ratios: [0.83267962, 0.16732038]
X_pca = pca.transform(X)
# reduce dimensionality via PC1
X_pc1 = X_pca[:, [0]] @ pca.components_[[0], :] + mu
# reduce dimensionality via PC2
X_pc2 = X_pca[:, [1]] @ pca.components_[[1], :] + mu
不是。PCA 的目标不同于线性判别分析 (LDA)。它们实际上都提供了线性变换,但是(粗略的解释如下):
- PCA 会将输出空间的第一轴的方向设置为输入数据最大方差的方向(它本身不知道类的概念,所有样本都一视同仁)
- LDA 将输出空间的第一个轴的方向设置为具有(大致)类间方差与类内方差的最佳比率的方向。为此,它需要一个类的概念。