常见的降维方法基本原理及代码实例

  • 0.前言:什么时候要降维聚类?降维目的-方法概述
  • 1.PCA(主成分分析)
    • 1.1PCA概念
    • 1.2 PCA代码实例
  • 2.tSNE
    • 2.1tSNE概念
    • 2.2 tSNE代码实例
  • 3.UMAP
    • 3.1UMAP概念
    • 3.2 UMAP 代码实例
  • 4.其他降维方法
    • 4.1 NMDS
    • 4.2 待补充
  • 5.参考文献

0.前言:什么时候要降维聚类?降维目的-方法概述

在开始回答这个问题前,我们看一下降维分析的应用,上图来自发表在2018年Cell Research(IF>20)上的一篇文章
《The adult human testis transcriptional cell atlas》,作者通过降维对donor细胞类群进行评估,
发现他们能够较好的叠加(具有同质性),又通过`tSNE`对细胞进行`降维聚类`,共有13个细胞亚群,很好地展示了亚群分类结果

在实际的机器学习项目中,特征选择/降维是必须进行的,因为在数据中存在以下几个 方面的问题:
1.数据的多重共线性:特征属性之间存在着相互关联关系。多重共线性会导致解的空间不稳定, 从而导致模型的泛化能力弱;
2.高纬空间样本具有稀疏性,导致模型比较难找到数据特征;过多的变量会妨碍模型查找规律;
3.仅仅考虑单个变量对于目标属性的影响可能忽略变量之间的潜在关系。

那么降维的目的是什么?

通过特征选择/降维的目的是:
1.减少特征属性的个数,确保特征属性之间是相互独立的
2.解决特征矩阵过大, 导致计算量比较大,训练时间长的问题,便于发现规律

一位博主总结了大家常见的问题:(参考原文链接:https://blog.csdn.net/weixin_43612049/article/details/101794520)

问题一:什么是降维?

降维是指通过保留一些比较重要的特征,去除一些冗余的特征,减少数据特征的维度。而特征的重要性取决于该特征能够表达多少数据集的信息,也取决于使用什么方法进行降维。一般情况会先使用线性的降维方法再使用非线性的降维方法,通过结果去判断哪种方法比较合适。
问题二:在哪里用到降维?

1)特征维度过大,可能会导致过拟合时

2)某些样本数据不足的情况(缺失值很多)

3)特征间的相关性比较大时
问题三:降维的好处?

(1)节省存储空间;

(2)加速计算速度,维度越少,计算量越少,并且能够使用那些不适合于高维度的算法;

(3)去除一些冗余的特征(原数据中既有平方米和平方英里的特征–即相关性大的特征)

(4)便于观察和挖掘信息(如将数据维度降到2维或者3维使之能可视化)

(5)特征太多或者太复杂会使得模型过拟合。

实现高维数据可视化的理论基础是基于降维算法。降维算法一般分为两类:
1.寻求在数据中保存距离结构的:PCAMDS等算法
2倾向于保存局部距离而不是全局距离的。`t-SNE`  diffusion maps(UMAP)
下面我们对这些方法的原理进行介绍,并在此基础上采取iris经典数据集进行绘制图

1.PCA(主成分分析)

 1.1PCA概念

1.1PCA概念

PCA 分析(Principal Component Analysis),即主成分分析,是一种对数据进行简化分析的技术,这种方法可以有效的找出数据中最“主要”的元素和结构,去除噪音和冗余,将原有的复杂数据降维,揭示隐藏在复杂数据背后的简单结构。

PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。
PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。
PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。
  1. 可以看到下图中,原本不同维度(Gene)经过正交特征提取后,变为2维,便于我们更好地观测结果,注意新构建的特征是在原本特征的基础上构建的,包含其主要信息
  2. PCA是将数据的最主要成分提取出来代替原始数据,也就是将n维特征映射到新的维度中,由k维正交特征组成的特征空间就是主成分,使用的降维方法就是投影
  3. 问题是怎样抽取数据的主要成分,如何衡量投影后保存的信息呢?PCA算法使用方差来度量信息量,为了确保降维后的低维度数据尽可能多的保留原始数据的有效信息,需要使降维后的数据尽可能的分散,从方差角度理解就是保留最大的方差。那么如何得到包含最大差异性的主成分呢?实际上,计算数据矩阵的协方差矩阵,得到协方差矩阵的特征值和特征向量,然后选择特征值最大的k个特征对应的特征向量组成的矩阵,就将原始数据矩阵投影到了新的k维特征空间,实现了数据特征的降维。
1.2 PCA的应用(代码)

1.2 PCA代码实例

#使用经典iris数据集,df读入前四列
df <- iris[1:4]
#查看数据的结构,head查看前5行,tail查看后6
head(df,5)
tail(df,6) ##======================= Caculate the principal components(计算主成分)
##prcomp的功能是计算PCA
df_pca <-prcomp(df)
str(df_pca)  #可以查看数据结构
df_pcs  <-data.frame(df_pca$x,Species = iris$Species)
head(df_pcs,10)   #查看前10行主成分结果##======================= ggplot2包进行绘图library(ggplot2)
library(tidyverse)
ggplot(df_pcs,aes(x=PC1,y=PC2,color=Species))+geom_point()#去掉背景及网格线
ggplot(df_pcs,aes(x=PC1,y=PC2,color=Species))+
geom_point()+stat_ellipse(level = 0.95, show.legend = T) + annotate('text', label = 'setosa', x = -2, y = -1.25, size = 5, colour = 'red') +annotate('text', label = 'versicolor', x = 0, y = - 0.5, size = 5, colour = '#00ba38') +annotate('text', label = 'virginica', x = 3, y = 0.5, size = 5, colour = '#619cff')
theme_bw()+
theme(panel.border=element_blank(),panel.grid.major=element_blank(),panel.grid.minor=element_blank(),axis.line= element_line(colour = "blue"))

结果:


2.tSNE

## 2.1tSNE概念

2.1tSNE概念

关键词:
1.t分布-随机邻近嵌入
2.相似度转化为条件概率
3.学生t分布
1.`t-SNE 算法概述`

t-SNE (全称为 t-distributed Stochastic Neighbor Embedding,翻译为 t分布-随机邻近嵌入)是通过将数据点之间的相似度转化为条件概率,原始空间中数据点的相似度由高斯联合分布表示,嵌入空间中数据点的相似度由学生t分布 表示 能够将高维空间中的数据映射到低维空间中,并保留数据集的局部特性

2.`t-SNE原理`

t-SNE本质是一种嵌入模型,主要用于高维数据的降维和可视化。
如果想象在一个三维的球里面有均匀分布的点,不难想象,如果把这些点投影到一个二维的圆上一定会有很多点是重合的。
所以,为了在二维的圆上想尽可能表达出三维里的点的信息,大神Hinton采取的方法:
把由于投影所重合的点用不同的距离(差别很小)表示。
这样就会占用原来在那些距离上的点,原来那些点会被赶到更远一点的地方。
t分布是长尾的,意味着距离更远的点依然能给出和高斯分布下距离小的点相同的概率值。
从而达到高维空间和低维空间对应的点概率相同的目的。

参考文献:
1.https://cloud.tencent.com/developer/article/1549992
2.http://www.360doc.com/content/19/0403/11/51784026_826128783.shtml
##  2.2 tSNE的应用(代码)

2.2 tSNE代码实例


3.UMAP

## 3.1UMAP概念

3.1UMAP概念

对高维单细胞数据的可视化展示,以t-SNE为代表的非线性降维技术,由于其能够避免集群表示的过度拥挤,在重叠区域上能表示出不同的集群而被广泛运用。然而,任何技术方法都不是完美的,t-SNE也一样,它的局限性体现在丢失大规模信息(集群间关系)、计算时间较慢以及无法有效地表示非常大的数据集]等方面。

那么,有没有其它方法能在一定程度上克服这些弱点呢?

UMAP就是这样一个能解决这些问题的降维和可视化的工具。
UMAP:统一流形逼近与投影(UMAPUniform Manifold Approximation and Projection)是一种新的降维流形学习
技术。UMAP是建立在黎曼几何和代数拓扑理论框架上的。UMAP是一种非常有效的可视化和可伸缩降维算法。在可视化
质量方面,UMAP算法与t-SNE具有竞争优势,但是它保留了更多全局结构、具有优越的运行性能、更好的可扩展性。
此外,UMAP对嵌入维数没有计算限制,这使得它可以作为机器学习的通用维数约简技术。

t-SNE和UMAP、PCA的应用比较:1.小数据集中,t-SNE和UMAP差别不是很大
2.大数据集中,UMAP优势明显(30多万个细胞的降维可视化分析)
3.通过数据降维和可视化展示的比较显示,PCA分群效果最差,UMAP和t-SNE都成功将与相似细胞群相对应的簇聚集在一起。
4.与t-SNE相比,UMAP还提供了有用的和直观的特性、保留了更多的全局结构,特别是细胞子集的连续性。
参考文章:单细胞数据降维可视化:https://www.bio-equip.com/showarticle.asp?id=453107027
##  3.2 UMAP的应用(代码)

3.2 UMAP 代码实例

下面以公共数据集iris为例(无需导入)在 R语言 中展示UMAP的实现过程,##为运行结果,可以删除
#清除当前环境中的变量
rm(list=ls())
#设置工作目录(需更改)
setwd("D:/RStudio/project/UMAP")
#查看示例数据
head(iris)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
iris.data = iris[,c(1:4)]head(iris.data)
##   Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1          5.1         3.5          1.4         0.2
## 2          4.9         3.0          1.4         0.2
## 3          4.7         3.2          1.3         0.2
## 4          4.6         3.1          1.5         0.2
## 5          5.0         3.6          1.4         0.2
## 6          5.4         3.9          1.7         0.4iris.labels = iris$Species
head(iris.labels)
## [1] setosa setosa setosa setosa setosa setosa
## Levels: setosa versicolor virginica#########使用umap包进行UMAP降纬可视化分析
library(umap)iris.umap = umap::umap(iris.data)iris.umap
##umap embedding of 150 items in 2 dimensions
##object components: layout, data, knn, config#查看降维后的结果head(iris.umap$layout)# 使用plot函数可视化UMAP的结果plot(iris.umap$layout,col=iris.labels,pch=16,asp = 1,xlab = "UMAP_1",ylab = "UMAP_2",main = "A UMAP visualization of the iris dataset")# 添加分隔线abline(h=0,v=0,lty=2,col="gray")# 添加图例 legend=图例legend("topleft",title = "Species",inset = 0.01,legend = unique(iris.labels),pch=16,col = unique(iris.labels))


4.其他降维方法

## 4.1 NMDS

4.1 NMDS

非度量多维尺度分析(NMDS分析)是一种将多维空间的研究对象(样品或变量)简化到低维空间进行定位、分析和归类,同时又保留对象间原始关系的数据分析方法。 适用于无法获得研究对象间精确的相似性或相异性数据,仅能得到他们之间等级关系数据的情形。

   ## 4.2 待补充

4.2 待补充


5.参考文献

引用文章已列在各个部分,感谢各位作者的奉献!

常见的PCA、tSNE、UMAP降维及聚类基本原理及代码实例相关推荐

  1. 跟着Cell学作图 | 5.UMAP降维分析

    跟着 Cell 学作图 | 5.UMAP降维分析 "实践是检验真理的唯一标准." "复现是学习R语言的最好办法." 2021.4.12_1 DOI: 10.10 ...

  2. pca图像压缩python_基于PCA的图像降维及图像重构

    1 PCA简述 PCA(Principal Component Analysis)主成分分析算法,在进行图像识别以及高维度数据降维处理中有很强的应用性,算法主要通过计算选择特征值较大的特征向量来对原始 ...

  3. PCA图像数据降维及重构误差分析实战并使用TSNE进行异常数据可视化分析

    PCA图像数据降维及重构误差分析实战并使用TSNE进行异常数据可视化分析 目录 PCA图像数据降维及重构误差分析实战并使用TSNE进行异常数据可视化分析</

  4. 对pca降维后的手写体数字图片数据分类_知识干货-机器学习-TSNE数据降维

    1.TSNE的基本概念 2.例1 鸢尾花数据集降维 3.例2 MINISET数据集降维 1.TSNE的基本概念 t-SNE(t-distributed stochastic neighbor embe ...

  5. python使用t-sne算法降维,方便可视化

    常用的降维算法有LDA,PCA:但通常为了方便可视化,我们使用t-sne降维算法. PCA的算法可以参考:异常检测2--PCA异常检测 t-san的算法可以参考:t-SNE算法 示例代码 import ...

  6. t-SNE数据降维(2维3维)及可视化

    (最近看了一个叫光谱特征在后门攻击中的用法,读完之后发现是用了一个SVD也就是奇异值分解做了降维,然后用残差网络的representation层残差与残差的奇异值分解后的右奇异值矩阵的第一行做乘法得到 ...

  7. 【论文速览】深度模型-降维与聚类

    [论文速览]深度模型-降维与聚类 [文章一]InfoGAN: Interpretable Representation Learning by Information Maximizing Gener ...

  8. 李宏毅(2020)作业9:无监督学习降维、聚类、自编码

    文章目录 数据集 作业 任务1 任务2 任务3 数据 下载数据集 准备训练数据 一些工具函数 模型 训练 降维和聚类 问题1(作图) 问题2 问题3 数据集 valX.npy valY.npy tra ...

  9. 在线作图|在线做UMAP降维分析

    UMAP降维分析 UMAP(Uniform Manifold Approximation and Projection)是一种可伸缩的降维方法,在单细胞基因组学中应用广泛,它能最大程度保留原始数据特征 ...

最新文章

  1. 苹果iOS 15发布:关机也能定位,ASMR重度用户狂喜,这波库克又“去苹果化”了...
  2. Nacos 2.0的Spring Boot Starter来了!
  3. 文本转声音,TTS语音实现
  4. Spring Boot 应用如何提高服务吞吐量?
  5. BufferedReader类
  6. 结对项目——数独扩展
  7. 列出选定月份的时间序列
  8. Linux如何修改makefile文件,linux中Makefile的使用
  9. 计算机2017语言排名,2017计算机编程语言排行榜 java依然独占鳌头
  10. 编码器及编码器在SMART200中的使用
  11. 利用echarts中的map地图中的中国地图,并使中国地图显示效果为轮廓显示到市级级别效果(真实项目中亲测有效~)
  12. 【python】Anaconda3环境安装
  13. 简易vbs脚本实现在浏览器自动刷新网页。
  14. 企业支付宝 异名网银u盾快速充值功能开通方式(支付宝企业商户资金充值方法)
  15. 公司官网建站笔记(六):域名进行公安备案并将备案号显示在网页底部
  16. 第12章 Spring AOP之扩展篇
  17. 优炫软件中标西南民族大学项目,护航教育行业主机安全
  18. 使用 Traci进行仿真
  19. poi设置单元格背景颜色
  20. Arduino 入门学习笔记7 I2C LCD1602液晶显示实验 及 超声波传感器距离检测

热门文章

  1. 【Arduino】TFT LCD显示屏显示gif小电视太空人动图(基于Arduino框架ESP8266/ESP32、TFT_eSPI库、使用python脚本GIF转十六进制文件)
  2. C# 连接SQL Sever 数据库与数据查询实例 数据仓库
  3. S32K116调试记录(2)CAN接口调试
  4. 初识sed和gawk
  5. Git常见问题:Your branch and ‘xxx/xxx‘ have diverged
  6. ./gradlew dependencies
  7. scrapy爬虫之抓取《芳华》短评及词云展示
  8. 报错:使用java api连接redis集群时报错 READONLY You can't write against a read only slave.
  9. Java微信公众号配置验证Token
  10. 查询数据库某个字段重复出现的数据