【统计方法】降维方式;pca, t-sne, mds
PCA 维度降维
高维数据
高维数据指的是特征(变量)数量 ppp 远大于观测数 nnn 的数据集。例如,在基因数据中,我们可以测量 50 万个 DNA 突变(人类基因组有约 30 亿个碱基对),但实验通常仅涉及不到 1000 人,即:
p≈500k,n≈1000
挑战:
- 高维数据很难可视化
- 许多算法在高维空间中表现不佳
- 线性回归在 p≫n 时会导致 欠定问题
欠定问题(Underdetermined Problem) 是指在数学和统计建模中,未知数的数量 多于 约束条件(方程)的情况。这种情况下,无法唯一确定解,因为可能存在无穷多个解,甚至没有解。
欠定问题的数学定义
如果一个线性方程组:
Ax=b
其中:
- A 是 m×n 维矩阵(m 行,n 列)
- x 是 n 维的未知变量向量
- b 是 m 维的已知向量
如果 未知数的个数 nnn 大于方程个数 mmm(即 n>m),那么这个方程组就是 欠定的。
欠定问题的特点
-
可能有无穷多个解:
-
因为方程个数不足以唯一确定所有未知数,可能存在多个解满足方程组。
-
例如,2 个方程 3 个未知数:
-
{ x + y + z = 1 2 x − y + 3 z = 2 \begin{cases} x + y + z = 1 \\ 2x - y + 3z = 2 \end{cases} {x+y+z=12x−y+3z=2
这个方程组有无穷多个解,因为可以用一个自由变量来表示其他两个变量。
-
可能没有解(特殊情况下):
- 如果方程组内部矛盾(例如,两个方程的右端项不一致),那么方程组无解。
-
需要额外的约束来找到唯一解:
- 正则化(Regularization):在机器学习和统计中,常使用 Lasso(L1正则化)或 Ridge(L2正则化)来约束解。
- 最小范数解(Minimum Norm Solution):选择满足方程的解中,范数最小的解,如最小二乘法(Least Squares)。
- 先验知识(Prior Knowledge):在实际应用中,可以根据物理、统计等领域的先验知识,引入额外的假设。
维度降维
维度降维可以作为预处理步骤,在进行 聚类、分类或回归 之前执行:
- 降低数据维度,提高可视化能力
- 作为 探索性数据分析(EDA) 工具
- 使计算更高效
降维策略
- 删除低相关特征
- 选择高方差特征
- 特征选择
- Lasso、Ridge 回归(稍后介绍)
- 特征构造
- 用较少的特征表示原始特征,例如 PCA 和 t-SNE
主成分分析(PCA)
PCA 旨在寻找新的坐标系,使得数据在前几个维度中保留最多的信息。
如何将 2D 数据映射到 1D?
假设有两个特征 x1,x2,可以使用:
z = ϕ 1 x 1 + ϕ 2 x 2 z = \phi_1 x_1 + \phi_2 x_2 z=ϕ1x1+ϕ2x2
推广到多维:
z = ∑ i = 1 p ϕ i x i z = \sum_{i=1}^{p} \phi_i x_i z=i=1∑pϕixi
目标是选择 变换矩阵 使得投影后的数据方差最大。
主成分
假设数据矩阵 XXX 已去均值:
X=(X1,X2,…,Xp)
第一个主成分是使方差最大的线性组合:
Z 1 = ϕ 11 X 1 + ϕ 21 X 2 + . . . + ϕ p 1 X p Z_1 = \phi_{11} X_1 + \phi_{21} X_2 + ... + \phi_{p1} X_p Z1=ϕ11X1+ϕ21X2+...+ϕp1Xp
其中:
- ϕj1 是 主成分载荷(loadings)
- 载荷需满足归一化条件:
∑ j = 1 p ϕ j 1 2 = 1 \sum_{j=1}^{p} \phi_{j1}^2 = 1 j=1∑pϕj12=1
主成分得分(Principal Component Scores) 投影到主成分空间:
z i 1 = ϕ 11 x i 1 + ϕ 21 x i 2 + . . . + ϕ p 1 x i p z_{i1} = \phi_{11} x_{i1} + \phi_{21} x_{i2} + ... + \phi_{p1} x_{ip} zi1=ϕ11xi1+ϕ21xi2+...+ϕp1xip
即:
Z 1 = ( z 11 , z 21 , . . . , z n 1 ) Z_1 = (z_{11}, z_{21}, ..., z_{n1}) Z1=(z11,z21,...,zn1)
PCA 的几何解释
- PCA 投影数据到新的坐标轴,点到新轴是 正交投影
- 线性回归则是最小化 残差平方和
PCA 代码示例
library(GGally)
# 计算 PCA
usarrest.pca <- prcomp(USArrests, scale = TRUE, center = TRUE)
# 绘制双标图(biplot)
biplot(usarrest.pca, cex = 1, scale = 0)
变量标准化
在 PCA 中,通常需要:
- 中心化(centering):减去均值,使均值变为 0
- 标准化(scaling):除以标准差,使标准差变为 1
# 绘制 scree plot
library(gridExtra)
data <- USArrests
var.dat <- apply(data, 2, var)
var.dat <- var.dat %>% t %>% as.data.frame %>% gather
pca.dat <- usarrest.pca$sdev^2/4
ggplot(data.frame(variance = pca.dat * 100, Component = 1:4)) +
geom_col(aes(x = Component, y = variance)) +
theme_minimal() +
labs(y = "Variance explained (%)", x = "Principal Component")
解释:
- Scree plot 显示 每个主成分的方差贡献
- 选择方差最大的 前几个主成分 进行降维
PCA 与 K-means
- 在 高维数据 上,PCA + K-means 是常见组合
- 先用 PCA 提取 前 M 个主成分,然后进行 K-means 聚类
PCA 与回归
- 当特征高度相关(共线性)时,PCA 可以减少维度并改善模型效果
- 选择 前 M 个主成分 作为回归模型输入
t-SNE(非线性降维)
t-分布随机邻域嵌入(t-SNE) 是一种 非线性降维方法,专用于 高维数据可视化。
t-SNE 的步骤
- 计算高维数据点之间的概率分布
- 计算数据点之间的 相似度概率
- 在低维空间中建立相似的概率分布
- 调整低维数据点位置 以最小化 Kullback-Leibler 散度
t-SNE 代码示例
library(Rtsne)
tsne_result <- Rtsne(USArrests, dims = 2, perplexity = 30, verbose = TRUE, max_iter = 500)
plot(tsne_result$Y, col = "blue", pch = 16, main = "t-SNE Projection")
解释:
perplexity
代表邻居数量,通常取 5~50- t-SNE 适用于 可视化高维数据,但不适合特征选择
t-SNE 的核心思想是:
- 在高维空间 中,定义数据点间的相似度(用高斯分布表示)。
- 在低维空间 中,构造相应的点,使得它们的相似度(用 t 分布表示)与高维空间的相似度尽可能匹配。
- 通过梯度下降不断优化,使低维数据的分布尽可能接近高维数据的邻域结构。
1.1 高维空间中的相似度
在高维空间,t-SNE 计算每个数据点 xi 和 xj 之间的相似度:
p
j
∣
i
=
exp
(
−
∣
∣
x
i
−
x
j
∣
∣
2
/
2
σ
2
)
∑
k
≠
i
exp
(
−
∣
∣
x
i
−
x
k
∣
∣
2
/
2
σ
2
)
p_{j|i} = \frac{\exp(-||x_i - x_j||^2 / 2\sigma^2)}{\sum_{k \neq i} \exp(-||x_i - x_k||^2 / 2\sigma^2)}
pj∣i=∑k=iexp(−∣∣xi−xk∣∣2/2σ2)exp(−∣∣xi−xj∣∣2/2σ2)
其中:
- pj∣i 表示 在高维空间中,点 i 选择点 j 作为邻居的概率(基于高斯分布)。
- σ 是方差(用于调整高维空间中的距离尺度)。
然后,定义对称的相似度:
p
i
j
=
p
j
∣
i
+
p
i
∣
j
2
p_{ij} = \frac{p_{j|i} + p_{i|j}}{2}
pij=2pj∣i+pi∣j
1.2 低维空间中的相似度
在低维空间,我们希望构造点 yi 和 yj,使得它们的相似度 尽可能接近高维空间的相似度。
但 t-SNE 采用 t 分布(自由度 1) 作为相似度计算方式:
q i j = ( 1 + ∣ ∣ y i − y j ∣ ∣ 2 ) − 1 ∑ k ≠ l ( 1 + ∣ ∣ y k − y l ∣ ∣ 2 ) − 1 q_{ij} = \frac{(1 + ||y_i - y_j||^2)^{-1}}{\sum_{k \neq l} (1 + ||y_k - y_l||^2)^{-1}} qij=∑k=l(1+∣∣yk−yl∣∣2)−1(1+∣∣yi−yj∣∣2)−1
这里 t 分布的特点是有长尾,允许远距离的数据点仍然有较高的相似度,从而能更好地分开不同类别的数据。
1.3 目标函数(KL 散度)
t-SNE 通过最小化高维和低维分布之间的 Kullback-Leibler(KL)散度:
C = ∑ i ≠ j p i j log p i j q i j C = \sum_{i \neq j} p_{ij} \log \frac{p_{ij}}{q_{ij}} C=i=j∑pijlogqijpij
直观理解:
- 如果 pij 和 qij 很相似,KL 散度就小,表示高维和低维结构匹配得很好。
- 通过梯度下降优化,使得 qij 尽可能接近 pij,从而找到合适的低维嵌入。
1.4 超参数perplexity
小 perplexity(局部结构)
簇的数量较多,且每个簇的点数较少,数据点更容易被分成许多小团簇。
可能会看到同一个类别的点被划分成多个不相连的子簇(比如 A 类可能被分成 2-3 片)。
大 perplexity(全局结构)
簇的数量较少,每个簇的点数较多,数据点会更倾向于聚合成少数几个大簇。
同一个类别的点更可能集中在一起,而不会被分裂。
图2的簇比较少,就是大家都凑成了一团,而图1一个类里面还有几个小团,说明图1是小perplexity,图2是大perplexity
2. t-SNE 的特点
优点
- 可以捕捉非线性结构,比 PCA 这种线性降维方法更适用于复杂数据。
- 特别适合可视化高维数据,比如在 2D/3D 空间中揭示数据的聚类结构。
- 长尾 t 分布避免了“拥挤”问题,让不同簇的点更容易分开。
缺点
- 计算复杂度高(O(n2)O(n^2)O(n2)),不适合超大规模数据集。
- 无法保留全局结构,只专注于局部相似度,可能会扭曲远距离数据的关系。
- 随机初始化导致不稳定,每次运行可能会有不同的可视化结果。
- 无法用于新数据点,t-SNE 不能直接对新数据进行投影,需要重新训练整个模型。
3. t-SNE 的应用
- 图像分类(如 MNIST 手写数字分类可视化)
- 自然语言处理(词向量可视化)
- 基因数据分析(可视化不同基因表达模式的聚类)
- 社交网络分析(社区检测)
4. t-SNE vs PCA
特性 | t-SNE | PCA |
---|---|---|
适用范围 | 非线性数据 | 线性数据 |
目标 | 维护局部结构 | 维护全局结构 |
计算复杂度 | 高(O(n2)O(n^2)O(n2)) | 低(O(n)O(n)O(n)) |
适合可视化 | 是 | 一般 |
是否易受参数影响 | 是 | 否 |
多维缩放(MDS)
- MDS 通过 保持数据点间的距离关系 将数据映射到低维空间
- 适用于 距离度量重要 的情况,如 地理数据分析
mds_result <- cmdscale(dist(USArrests), k = 2)
plot(mds_result, col = "red", pch = 16, main = "MDS Projection")
总结
方法 | 线性/非线性 | 适用场景 |
---|---|---|
PCA | 线性 | 降维、特征提取、可视化 |
t-SNE | 非线性 | 可视化高维数据 |
MDS | 非线性 | 维持距离结构 |
Lasso | 线性 | 变量选择 |
K-means | 非线性 | 聚类分析 |
选择降维方法
- PCA 适用于 特征相关性高 的数据
- t-SNE 适用于 可视化复杂数据结构
- MDS 适用于 保持距离关系 的任务