什么是降维分析?
降维分析(Dimensionality Reduction)是一种数据分析技术,目的是将高维的数据集转换到低维空间,同时尽可能保留原数据中的重要信息。降维分析在机器学习和数据挖掘中有着广泛的应用。
降维分析的主要目的有:
- 数据压缩 - 减少数据存储和传输量
- 减少随机误差 - 去除冗余 noise
- 可视化 - 降到2D或3D以便点阵显示
- 模型简化 - 简化模型,减少过拟合
常见的降维分析方法有:
- 主成分分析(PCA)
- 线性判别分析(LDA)
- 局部线性嵌入(LLE)
- t-分布随机邻域嵌入(t-SNE)
降维过程可以是线性的也可以是非线性的。线性降维方法比较简单,但对复杂数据效果较差。非线性方法虽然复杂,但可以提取数据的非线性特征。
选择合适的降维方法对分析质量至关重要。还需要根据不同任务目的进行方法评估和选择。降维是一个提升分析效果的关键预处理步骤。
PCA降维
PCA(主成分分析)降维是一种常用的线性降维方法,主要思想是通过正交变换,将高维数据集的特征投影到低维空间的几个正交轴上,这些轴被称为主成分。
PCA降维的主要步骤包括:
- 对原始数据集进行中心化,使每个特征的均值 becoming 0。
- 对协方差矩阵进行特征值分解,得到特征值和特征向量。
- 按特征值K大小排序,选择最大的k个特征值对应的特征向量。
简单来说就是通过碎石图确定K值然后将原本数据n列转化成K列,其中K<n。
PCA降维的目标是保留原数据中最大的变化,这些变化体现在最主要的特征向量上,如果降维可以得到如下结果:
PCA的主要优点有:
- 简单,易于实现
- 通过正交变换,消除不同特征的相关性
- 提取主要变化,压缩数据
缺点是PCA是线性降维,对非线性数据效果较差。下图为线性数据的示例图**(该图涉及到引用,原作者在水印右下角)**
PCA广泛用于数据压缩、可视化、noise过滤等目的。是最常用的线性降维方法之一。
其代码如下
# 加载包
rm(list = ls())
library(stats)
library(readxl)
box <- read_excel("box.xlsx")
# 数据中心化
box_scale <- scale(box)
# PCA分析
pca <- prcomp(box_scale, scale = FALSE)
# 绘制碎石图
plot(pca$sdev^2, xlab = "Principal Component",
ylab = "Eigenvalue", type = "o")
# 根据碎石图选取肘点,确定k
k <- 2
# 生成类别标签
cl <- sample(1:3, nrow(box), replace=T)
# 进行PCA降维
box_pca <- predict(pca, box_scale)[,1:3]
# 可视化
plot(box_pca[,1], box_pca[,2], col=cl)
t-SNE降维
t-SNE(t-分布随机邻域嵌入)是一种非线性降维算法,专门用于可视化和探索高维数据。
t-SNE主要有三个关键步骤:
- 用条件概率表示高维空间样本距离
- 低维空间也用概率距离表示样本关系
- 迭代优化低维坐标,使得低维与高维概率距离接近
这种保持概率距离关系的思想使t-SNE能够保留数据的全局和局部结构,下面是非线性降维的数据样式。
通过上述步骤可以得到如下的结果
代码如下
# 清空工作区
rm(list = ls())
#install.packages("Rtsne")
library(Rtsne)
# 读取并预处理数据
library(readxl)
box <- read_excel("box.xlsx")
box_scale <- scale(box)
# 进行t-SNE降维
set.seed(123)
tsne <- Rtsne(box_scale, dims = 2, perplexity = 30)
# 可视化
plot(tsne$Y, col=sample(1:3, nrow(box), replace=T),
main="t-SNE on Box data")
综合来说,t-SNE可视化效果强大,算法内在逻辑简洁合理,是解决高维数据表达和可视化问题的重要技术之一。