本帖最后由 chen 于 2022-4-14 15:03 编辑
1、为何需要对数据进行降维 实际应用中的数据一般是高维的,但人类目前只能理解三维空间的数据。如基因表达谱,想要简单衡量多个样本中多个基因的表达是很困难的。降维的目的一般来说有两个,一个是为了对数据进行可视化,以便对数据进行观察和探索;另外一个目的是简化机器学习模型的训练和预测。 (对于一维数据,可将样本排列在一维数轴中;二维数据,可置于二位平面直角坐标系中,三维可置于空间自己交坐标系中,但目前人类无法理解维度高于三维的空间)
2、数据降维方法的分类 按照将为数据类型可以分为线性降维与非线性降维,线性降维包括:PCA(主成分分析)、ICA(独立成分分析)、LDA(线性判别分析等);非线性包括:t-SNE(t分布随机邻居嵌入)、Isomap(等度量映射)、KPCA(基于核函数的主成分分析)等。 今天想要介绍的是数据分析中最常用到的主成分分析。
3、PCA主成分分析 PCA(Principle component analysis,主成分分析)是一种使用最广泛的数据降维算法。它是基于方差从原始数据中提取最有价值信息思想的一种降维方法。其主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。PCA的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。 具体使用原理: 首先找到数据中心,以数据中心为原点构建坐标系。再随机拟合一条过原点的直线,接下来旋转该直线直到样本投影到该直线点到原点距离的平方之和(SSD)最大。得到直线即为PC1。再作直线垂直于PC1(高维须保证其SSD最小大)为PC2,接了下来作垂直于PC1、PC2所确定平面(同时满足SSD最大)的线即为PC3,以此类推。计算所得总差异
举一个栗子: 按照上述步骤找到PC1、PC2、PC3,由于PC1与 PC2的总变异之和为94%及能用PC1与PC2表征94%的数据,可用于降维。先将数据投影至PC1,PC2上,再在PC1与PC2所在平面以分别以他们为X,Y轴构建平面直角坐标系。最后根据投影位置在低维空间确定降维后数据分布。
R语言代码实现:
可使用内置”prcomp”函数进行主成分分析,并使用ggplot2包进行可视化。 代码: #PCA分析: pca<-prcomp(t(data[,1],scale=T)) #可视化 library(ggplot2) group2<-data.frame(group) pca_result<-as.data.frame(pca$x) pca_result<-cbind(pca_result,group2) pic<-ggplot(pca_result)+geom_point(aes(x=pca_result[,1],y=pca_result[,2], colour=pca_result$group,shape=pca_result$group),size=5) pic<-p+theme(legend.title=element_blank()+labs(x="PCA1",y="PCA2"))
之后非线性中常用的t-SNE,随缘更新。
|