现在CNV分析方法有很多,但是随着NGS成本的降低,高深度的测序下背景下,read count(depth)方法逐渐变为各个分析软件的主流。最近在看GATK的CNV分析方法,其中在创建PoN(PanelofNormals)和denoise过程都使用了PCA(Principal Component Analysis)的奇异值分解(Singular Value Decomposition, SVD)方法,因此有比较对PCA思路做个梳理以及了解下常见的如何使用PCA来降噪(denoise) R语言中,PCA一般常用的基础函数是prcomp和princomp,两者有些差别:

prcomp适用于R mode和Q mode,而princomp只适用于R mode

prcomp基于奇异值分解(SVD),求最小二乘的优化解(最小化的结果要求寻找一个正交矩阵AB,记作H[q],H[q]为投影矩阵,把每个点X[i]投影到q维结构H[q]x[i],这是由V[q]的列限定的x[i]的正交投影)

princomp是基于相关系数矩阵的特征值分解,方差最大化方法(本质上是求原始变量协方差/相关系数矩阵的特征值和特征向量,第i主成分对应着协方差的第i大特征值,投影方向为该特征值对应的特征向量,而特征值等于相应主成分的方差,因此代表着对应主成分分解原始信息的多少)

prcomp在参数中如果设定了scale=T,那么如果princomp结果想与prcomp保持一致,则princomp函数需加上cor=T参数(其实原因在于cor和cov之间刚好相差了一个scale)

R mode是指基于variable分析,一般来研究variable之间的关系,当数据集的observation数目大于variable时;Q mode是指基于observation分析,一般来研究observation之间的的关系,当数据集的varibale数目大于observation时

从R代码的角度来实现下PCA实现思路(原理部分可以看图文并茂的PCA教程),并与prcomp函数的结果比较下,代码参考PRINCIPAL COMPONENTS ANALYSIS (PCA);使用自带数据集USArrests作为测试对象

先是prcomp函数通过奇异值分解来实现PCA分析,res1$sdev是特征值的平方根(由矩阵的奇异值计算得出的),res1$rotation是变量的loading矩阵(每列是对应主成分的特征向量),res1$x是PCA projections ("scores")

data(USArrests)

dim(USArrests)

res1

sd

loadings

scores

然后是R代码实现

R

# find the eigenvalues and eigenvectors of correlation matrix

myEig

# eigenvalues stored in myEig$values

# eigenvectors (loadings) stored in myEig$vectors

loadingsLONG

rownames(loadingsLONG)

# calculating singular values from eigenvalues

sdLONG

# transforming data to zero mean and unit variance

X

(x - mean(x))/sd(x)

})

# calculating scores from eigenanalysis results

scoresLONG

比较两者的前后两种方法的差异(其实是很小的)

range(sd - sdLONG)

range(loadings - loadingsLONG)

range(scores - scoresLONG)

如果想降噪,则简单的说相当于要做了以下步骤:

从n维降到k维

reconstruct初始变量,相当于将降维后的数据升到n维,即:PCA reconstruction=PC scores*EigenvectorsT+Mean >什么是重建(reconstruct), 那么就是找个新的基坐标, 然后减少一维或者多维自由度。 然后重建整个数据。 好比你找到一个新的视角去看这个问题, 但是希望自由度小一维或者几维。主成分分析PCA算法:为什么去均值以后的高维矩阵乘以其协方差矩阵的特征向量矩阵就是“投影”?

得到新的数据集为去噪后的数据集

测试数据是Kaggle上的一个测试数据集MNIST

require(data.table)

mnist_data=fread('../Desktop/all/train.csv')

然后对数据进行预处理,去除掉对应的观测值是常量的变量(具体原因可看上述那篇文章)

mnist_data2 =26|(1:784)%/%28<=2|(1:784)%/%28>=26)+1), with=F]

使用prcomp函数进行PCA分析,并从解释方差比例角度来看下不同主成分的重要性

pca_res

plot(cumsum(pca_res$sdev^2)/sum(pca_res$sdev^2)*100,

ylab = 'Cumulative proportion of variance explained', xlab = "Principal Component")

pca_denoise1

最后看下新投影(或者说reconstruct后的)数据集

pc_use

trunc

trunc

dim(trunc)

res

并与初始数据集的图片做个比较看下,原数据集如下:

par(mfrow=c(3,3))

for (i in 1:9) {

##Changing i-th row to matrix

set.seed(123456)

rad

mat

##Inverting row order

mat

##plot

image(mat,main=paste0('This is a ', i))

}

pca_denoise2

再看下只取前300个主成分的新投影数据集(其去除了不太重要的一些维度,降低了维度)

par(mfrow=c(3,3))

for (i in 1:9) {

set.seed(123456)

rad

mat

mat

image(mat,main=paste0('This is a ', i))

}

pca_denoise3.png

从图像降噪的角度来看,上述的例子不太好,可以看这篇用Python来实现PCA降噪的文章机器学习:PCA(降噪),来实现对高斯噪声的去除

总之,使用PCA等手段可以有效的去除一些噪声,压缩等

matlab的pca图像去噪程序,PCA实现过程梳理以及降噪处理相关推荐

  1. 基于PCA 人脸识别/人脸识别算法/人脸检测程序源码MATLAB ELM+PCA人脸识别 PCA人脸识别matlab代码 基于PCA算法的人脸识别

    1.基于PCA的人脸识别代码 2.MATLAB ELM+PCA人脸识别 2.基于PCA的人脸识别(matlab)(采用PCA算法进行人脸识别,通过抽取人脸的主要成 分,构成特征脸空间,识别时将测试图像 ...

  2. matlab中利用princomp实现PCA降维

    matlab中利用princomp实现PCA降维 在matlab中有函数princomp可以实现数据的降维,本文主要说明该函数的用法. PCA的作用: PCA(主成分分析法),主要用来对数据进行降维, ...

  3. Matlab中特征降维主成分分析(PCA)使用方法(整套流程)

    1. PCA简介: PCA(Principal Component Analysis)主成分分析方法是一种常见的数据降维方法.数据维度过高可能会使得模型效果不佳.PCA主要原理是将高维原数据通过一个转 ...

  4. MATLAB自带工具箱实现PCA降维代码

    进行PCA降维,环境是MATLAB, 网上找了很多都是介绍PCA原理的,两篇介绍的不错的PCA 原理文章,只是想实现pCA的大可不必看.原理文章1  原理文章2 下面开始介绍用MATLAB自带工具包函 ...

  5. UFLDL教程:Exercise:PCA in 2D PCA and Whitening

    相关文章 PCA的原理及MATLAB实现 UFLDL教程:Exercise:PCA in 2D & PCA and Whitening python-A comparison of vario ...

  6. matlab有意思程序,matlab有意思的小程序

    10个C++趣味小程序,很有意思的.VIP专享文档 VIP专享文档是百度文库认... 现在很多人使用微信的时间已经非常长了,他们注册的微信号往上可能已经是5年前的事情了,正是由于不少使用者在这个过程当 ...

  7. 车牌识别与计算机编程,基于MATLAB的车牌识别程序详解.ppt

    基于MATLAB的车牌识别程序详解 自定义一个字符函数,用来从车牌区域中提取出7个字符,其中利用切割函数来进行切割. 程序:function [word,result]=getword(d) word ...

  8. 【火炉炼AI】机器学习053-数据降维绝招-PCA和核PCA

    [火炉炼AI]机器学习053-数据降维绝招-PCA和核PCA (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplo ...

  9. MATLAB 图像嵌入水印图像程序

    MATLAB 图像嵌入水印图像程序 原理: 水印的嵌入: 对64x64像素的水印图像(可为rgb或灰度图像)进行猫脸变换,得到置乱后的水印图像W′W'W′: 对512x512像素的载体图像分割成互不重 ...

最新文章

  1. 综述 | 三大路径,一文总览知识图谱融合预训练模型的研究进展
  2. SAP PM入门系列29 - IW65 Display Activities
  3. [转载]“java.sql.SQLException:指定了无效的 Oracle URL”
  4. 【ARM】在Uboot中运行第一个汇编程序
  5. 隐藏Android下的虚拟按键
  6. 使用EasyRecovery简单修复视频
  7. arcgis热点分析_地理信息系统导论学习笔记(11)——矢量数据分析
  8. http实时推送技术
  9. 产业互联网周报:滴滴被处以80亿元巨额罚款;消息称中国正启动欧洲企业到中国上市计划;字节跳动确认自研专用芯片...
  10. 小刘同学的第十六篇日记
  11. 整理了18个可以免费学习编程的网站
  12. XAMPP下的Tomcat 7运行出现“1% 不是有效的 Win32 应用程序。”
  13. php怎么让浏览器崩溃,让IE6浏览器崩溃
  14. Cadence 中贴片元件焊盘的制作
  15. ChatGPT有效提问技巧
  16. 微信公众号如何开通留言功能?
  17. 李宏毅2022hw2
  18. 解决ssh连接经常掉线
  19. mybatis XML 中<if>、<choose>、<when>、<otherwise>等标签的使用?多条件查询该怎么处理?
  20. [转载]有经验的人对各种常用IC芯片使用感受

热门文章

  1. JAVA POI通用Excel导入模板
  2. Vue.observable()
  3. r语言alasso的系数怎么看_R语言如何做COX回归分析和nomogram?
  4. android自带语音识别,Android如何实现自带谷歌语音识别垃圾分类APP
  5. 确看待百度预估流量为0的问题
  6. 纵横网络靶场社区 Modbus协议
  7. 西门子840DSL二次开发简介
  8. 寒门大学生,谁说我们没有路?--驳《寒门再难出贵子》
  9. tcpdump的入门与使用格式,很好懂
  10. 联想erazert410_联想erazert410