当前位置: 首页 > news >正文

【统计方法】降维方式;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),那么这个方程组就是 欠定的


欠定问题的特点

  1. 可能有无穷多个解

    • 因为方程个数不足以唯一确定所有未知数,可能存在多个解满足方程组。

    • 例如,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=12xy+3z=2

 这个方程组有无穷多个解,因为可以用一个自由变量来表示其他两个变量。
  1. 可能没有解(特殊情况下):

    • 如果方程组内部矛盾(例如,两个方程的右端项不一致),那么方程组无解。
  2. 需要额外的约束来找到唯一解

    • 正则化(Regularization):在机器学习和统计中,常使用 Lasso(L1正则化)或 Ridge(L2正则化)来约束解。
    • 最小范数解(Minimum Norm Solution):选择满足方程的解中,范数最小的解,如最小二乘法(Least Squares)。
    • 先验知识(Prior Knowledge):在实际应用中,可以根据物理、统计等领域的先验知识,引入额外的假设。

维度降维

维度降维可以作为预处理步骤,在进行 聚类、分类或回归 之前执行:

  • 降低数据维度,提高可视化能力
  • 作为 探索性数据分析(EDA) 工具
  • 使计算更高效

降维策略

  1. 删除低相关特征
    • 选择高方差特征
  2. 特征选择
    • Lasso、Ridge 回归(稍后介绍)
  3. 特征构造
    • 用较少的特征表示原始特征,例如 PCAt-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=1pϕ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=1pϕ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 中,通常需要:

  1. 中心化(centering):减去均值,使均值变为 0
  2. 标准化(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 的步骤

  1. 计算高维数据点之间的概率分布
    • 计算数据点之间的 相似度概率
  2. 在低维空间中建立相似的概率分布
  3. 调整低维数据点位置 以最小化 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)} pji=k=iexp(∣∣xixk2/2σ2)exp(∣∣xixj2/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=2pji+pij


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+∣∣ykyl2)1(1+∣∣yiyj2)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=jpijlogqijpij

直观理解:

  • 如果 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-SNEPCA
适用范围非线性数据线性数据
目标维护局部结构维护全局结构
计算复杂度高(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 适用于 保持距离关系 的任务

相关文章:

  • 浙江西湖游记
  • TLS协议详解
  • 关于AI大模型的一些理解
  • 基于 Spring Boot 瑞吉外卖系统开发(一)
  • 从扩展黎曼泽塔函数构造物质和时空的结构-16
  • PyTorch 实现图像版多头注意力(Multi-Head Attention)和自注意力(Self-Attention)
  • 棋盘问题(DFS)
  • 【文献研究】含硼钢中BN表面偏析对可镀性的影响
  • 使用OpenSceneGraph生成3D数据格式文件
  • 经典回溯问题———组合的输出
  • CentOS 部署 Nodejs
  • java面试篇 Redis+MySQL+Spring
  • 【C/C++】滑动谜题(leetcode T773)
  • Transformer架构
  • 【ARTS】2873.有序三元组中的最大值!
  • c语言修炼秘籍 - - 禁(进)忌(阶)秘(技)术(巧)【第五式】动态内存管理
  • JS实现AES和DES
  • 蓝桥杯刷题周计划(第四周)
  • 手撕LLM(二):从源码出发,探索LoRA加载、推理全流程
  • AudioFramework面试题
  • 上海 网站开发 兼职/百度免费seo
  • 机械设备公司网站制作/南京seo排名公司
  • 大型网站二次开发方案/企业网络规划设计方案
  • 学做网站php吗/安卓系统优化app
  • 婚恋网站建设的目的/做网络优化的公司排名
  • 给公司做网站诈骗/广州今天新闻