机器学习

Sonali Arora.
2014年10月28日

介绍

统计学习在基因组学中起着重要作用。一些学习问题的例子是 -

通常,我们具有结果测量,通常定量(例如基因表达)或分类(如乳腺癌/无乳腺癌),我们希望基于一组特征(例如饮食和临床测量)来预测。我们有一组数据集,其中我们观察了一组对象(例如人)的结果和特征测量。使用此数据,我们构建了预测模型,或学习者,这将使我们能够预测新的未经对象的结果。一个好的学习者是准确预测这种结果的学习者。这就是所谓的监督学习是因为结果变量指导了学习过程。在无监督学习问题,没有对结果的测量,只观察特征。我们的任务是描述数据是如何组织或聚集的。

用生物导体学习:资源概述

Biocomointor拥有许多R包,为不同种类的基因组数据分析提供机器学习工具。自成立以来,它有许多版本。最新的尖端开发发生在“devel”版本中。通过访问以下链接和使用,可以找到专门迎合机器学习的R包,以获取基因组分析Biocviews.

例如,可以在“自动完成BiocViews搜索”框中键入“群集”,并发现生物导体中有89个包,其为基因组数据提供“聚类”功能。在同一页面上,在“统计方法”下可以找到其他机器学习技术的R包 -

技术
1 贝叶斯 15.
2 分类 64.
3. 聚类 89.
4. 决策树 7.
5. 神经网络 1
6. SupportVectorMachines 1
7. 尺寸减少 2
8. HiddenmarkovModel. 4.
9. 回归 7.
10. 校长 4.

本实验室数据

我们将在本实验室中使用两个数据集 - 一个用于监督学习,一个用于无监督的学习。

为了无监督学习,我们将使用NCI60癌细胞微阵列数据,其包含64个癌细胞系的6830个基因表达测量。我们删除了仅包含1个样本的子类型(其中大约6个)并创建了概述的对象。

SummarizedExperiment类是类似矩阵的容器,其中行代表感兴趣的范围(作为刻痕或Grangeslist-class)和列代表样本(具有作为DataFrame-class汇总的示例数据)。概括的方法包含一个或多个测定,每个测定值由数字或其他模式的矩阵样对象表示。

总结实验

此对象已为您提供,您可以简单地阅读它

库(基因组)SEFILE < -  System.file(“extdata”,“nci60.rda”,package =“searchbiocirector”)load(sefile)nci60data < -  t(测定(nci60))ncilabels < -  coldata(nci60)

基因表达数据存储在“assay”中,而标签存储在colData中。

为了监督学习,我们将使用来自Biocoductor包的宫颈计数数据,MLSEQ.。该数据集包含了714名人类样品的表达式。有29个肿瘤和29个非肿瘤宫颈样品。出于学习目的,我们可以将这些视为两个单独的组并运行各种分类算法。

. lib (MLSeq) filepath = system.file("extdata/ cervice .txt", package = "MLSeq")table(filepath, header = TRUE)

锻炼

下载nci60.数据从给定的URL并创建一个概括的专家对象过滤掉至少一个样本的子类型。

无监督学习

无监督的学习是一组统计工具,用于设置的设置,其中我们只有一组特征\(x_1 \),\(x_2 \),......,\(x_p \),\(x_p \),\(x_p \)在'n'观察中测量。我们主要有兴趣在测量\(X_1 \),\(X_2 \),......,\(X_P \)上发现有趣的东西很感兴趣

无监督的学习通常是作为探索性数据分析的一部分进行的。这些工具有助于我们对数据集来了解。与受监督的学习问题不同,我们可以在哪里使用预测来对我们的学习算法带来一些信心,无法检查我们的模型。因此,学习算法,恰如其恰当地命名为“无监督”。

尽管如此,它对我们给出的问题提供了很大的见解。例如,在我们的NCI60数据集的情况下,我们可能希望寻找我们癌症样本中的亚组,或者在基因中寻找更好地了解疾病的工作原理。

PCA.

我们掌握双手的经典事情之一是制作散点图并可视化数据。通过大数据,这并不总是很容易。例如,在我们的NCI60数据集中,我们将具有约(6830 C 2)= 6830(6830-1)/ 2 = 23321035散点图!当然不可能查看所有这些,因为它们每个都仅包含数据集中存在的少量信息,因此它们都不会是信息性的。因此,我们需要数据的低维表示,数据捕获尽可能多的变化。

主成分允许我们总结数据具有较少数量的变量,该变量解释了数据集中的可变性。计算这些主组件的过程以及在理解数据时使用这些组件的使用主要组件分析

让我们使用PCA可视化NCI60数据集。我们首先在缩放变量(基因)后在数据上执行PCA,以具有标准偏差,并绘制前几个主组件以便可视化数据。您可以从下图中看到,使用大数据,Biplot()不是很好的信息。

PCARES < -  PRCOMP(NCI60DATA,SCALE = TRUE)BIPLOT(PCARES)

Chunned-Chunk-4的剧情所以让我们看看前3个组件,看看我们是否可以从他们身上获得一些有趣的见解。

#将颜色作为因素。实验室< - as.character (unlist (as.list (ncilabels))) cellColor < -函数(vec) {uvec < -独特(vec)关口=彩虹(长度(uvec)) colvec < -关口(as.numeric (as.factor (vec)))列表(colvec = colvec关口=关口,标签= uvec)} par (mfrow = c(1、2)colres < - cellColor(实验室)情节(pcaRes $ x[1:2],坳= colres colvec美元,xlab =“z1 ylab =“z2”,legend("bottomright", legend = colres$labels, text。plot(pcaRes$x[,c(1,3)], col=colres$colvec, xlab="z1", ylab="z3", pch=19) legend("topright", legend =colres$ labels,text。Col = colres$cols, bty ="n", cex=0.80)

Chunk Unnamed-Chunk-5的情节

par(mfrow = c(1,1))

总的来说,我们可以得出结论,对应于单一癌症类型的细胞系往往在前几个主成分得分向量上有相似的值。这表明来自同一癌症类型的细胞系倾向于有相似的基因表达水平。

聚类观察

在分层聚类中,我们首先定义每对观测数据之间的一些不同度量(比如欧几里得距离)。我们从树状图的底部开始,n次观测的每一次都被认为是一个簇,两个最相似的簇被融合在一起,所以现在我们有n-1个簇。接下来,将两个相似的簇融合在一起,从而得到n-2个簇。该算法不断迭代,直到所有样本都属于一个单一的聚类,树型图完成。

我们使用连杆定义两种簇或两组观察组之间的异化性。有四种常见类型的联动 - “平均”,“完整”,“单”,“质心”。假设我们有两个群集A和B,那么 -

  1. 完全的指的是记录最大在A组和B组中观察到的所有成对的不同之处。
  2. 单身的指的是记录最小的在A组和B组中观察到的所有成对的不同之处。
  3. 单身的指的是记录平均数在A组和B组中观察到的所有成对的不同之处。
  4. 封面表示簇A的质心与簇B的质心的不同。

通常,不相似度量是欧几里德距离。

让使用与欧几里德距离的完整连杆聚集观察,因为“完全联系”中的异常措施。

库(dendextend) sdata < -规模(nci60data) d < -区域(sdata)实验室< - as.character (unlist (as.list (ncilabels))) comp_clust < - hclust (d) dend < - as.dendrogram叶子(comp_clust) < -实验室(order.dendrogram (dend)] labels_colors (dend、标签= TRUE) < - cellColor(叶子)美元colvec标签(dend) < -叶子情节(dend,主要=“集群使用完整的链接”)

Chunned-Chunk-6的情节

锻炼

  1. 使用平均链接执行分层群集。
  2. 解释树木图中的差异。
  3. 你能遵守这些树形图的一些模式吗?(提示:使用粉丝)

解决方案:

  1. 可以用下面的代码-来绘制这些图
绘图(Hclust(d,method =“平均”),标签=实验室,main =“使用平均链接群集”,xlab =“”,ylab =“”)

Chunk Unnamed-Chunk-7的情节

绘图(hclust(d,method =“单个”),标签=实验室,main =“使用单链路的clusteringg”,xlab =“”,ylab =“”)

Chunk Unnamed-Chunk-7的情节

  1. 简而言之,完全连锁提供最大的群体间歧化,单连杆导致最小的群体间化异化性和平均群体群体歧化的平均结果。我们看到结果受联动选择的影响。单个连杆倾向于产生尾部簇,而完全和平均连锁导致更平衡和有吸引力的簇。

  2. 对于我们的示例,我们看到单个癌细胞类型内的细胞系不会聚集在一起。但是,如果我们考虑完全的联系并在高度下切割树= 4(我们尝试了不同的高度以观察模式),我们观察一些清晰的模式,如白血病细胞系落在簇2中,乳腺癌细胞系分布出来。

Hc <- cutree(comp_clust, 4)表(Hc, labs)
##实验室## HC乳腺CNS结肠白血病黑素瘤NSCLC卵巢前列腺肾## 1 3 5 2 0 2 8 6 2 9 ## 2 0 0 0 6 0 0 0 0 0 0.0 ## 4 2 0 0 0 6 1 0 0 0

监督学习

在监督学习中,除了特征\(X_1\), \(X_2\), ....,\(X_p\)外,我们还得到了在同一n个观测值上测量的响应Y。我们的目标是用\(X_1\), \(X_2\), ....,\(X_p\)来预测Y值,以便进行新的观测。

一个使用knn的简单例子

对于宫颈数据,我们知道前29是非肿瘤样本,而最后29则是肿瘤样品。我们将分别代码为0和1。

class = data.frame(条件= factor(rep(c(0,1),c(29,29)))))))))

让我们来看看最基本的引导性学习技巧之一看看用它建立一个简单的模型需要做些什么。为了简单起见,我们将只使用2个预测器(以便我们可以在2维空间中表示数据)

数据< -  t(颈椎)数据< -  data [,1:2] df < -  cbind(数据,类)colnames(df)< -  c(“x1”,“x2”,“y”)rowname(df)< -  null头(df)
## x1 x2 y ## 1 865 3 0 ## 2 810 12 0 ## 3 5505 30 0 ## 4 6692 73 0 ## 5 1456 6 0 ## 6 588 2 0

这就是数据看的 -

x1“情节(df [], df,“x2”,xlab =“x1 ylab =“x2”,主要=“资讯数据表示”,上校= ifelse (as.character (df(,“y”))= = 1,“红”“蓝”))

未命名的chunk-11的Plot

给定观察\(x_0 \)和正整数,k,KNN分类器首先识别最接近\(x_0 \)的训练数据中的k点,由\(n_0 \)表示。它估计j类作为\(n_0 \)的一小部分的条件概率,并应用贝叶斯规则,将测试观察分类到具有最大概率的类。更具体地,如果k = 3并且有2级观察属于1级和1类观察,则我们测试观察分配给Class1。

knn_figure

对于所有监督的实验,它是一个持有一些数据的好主意培训数据用这些数据建立一个模型。然后,我们可以使用剩余的数据(测试数据),以获得对我们模型的信心。我们将随机抽取30%的数据作为测试集。其余70%的数据将作为培训数据使用

Set.seed(9)NTEST =天花板(NCOL(颈椎)* 0.2)IND =样品(NCOR(颈椎),NTEST,FALSE)Cervical.train =宫颈[,-ind] Cervical.train = AS.matrix(颈椎。列车+ 1)Classtr = data.frame(条件= class [--ind,])cervical.test = cervical [,Ind] cervical.test = As.matrix(cervical.test + 1)classts = data.frame(条件=类[IND,])

训练集错误是我们将模型应用于训练数据时所犯的错误的比例,测试集错误是我们将模型应用于测试数据时所犯的错误的比例。

对于不同的邻居,让我们计算使用KNN的训练误差和测试错误。

库(类)Newknn < - 函数(测试集,Trainset,TestClass,TrainClass,K){pred.train < -  knn.cv(Trainset,trainclass,k = k)pred.test < -  knn(Trainset,testset,trainclass,k = k)test_fit 

未命名的chunk-13的Plot

机器学习中的另一个重要概念是交叉验证。由于样本往往是稀缺,因此通常不可能留出验证集合,然后使用它来评估我们预测模型的性能。所以我们使用交叉验证来培训更好的模型。我们首先将培训数据随机划分为N等部分。学习方法适合数据的N-1部分,并且在其余部分上计算预测误差。这是对数据的每个1 / N部分完成的,最后将平均n预测误差估计。

例如,K折叠交叉验证,其中k = 5

cv_figure

如您所见,对此非常简单的学习者的计算可能会变得非常复杂。

使用生物体快速分类。

MLSEQ旨在使用户对用户的复杂化并允许使用各种分类器与一个单一函数来学习模型。

此包的主要功能是分类,该分类需要以DESQDATASET实例的形式提供数据。DeseqDataset是概括的子类,用于存储输入值,中间计算和差异表达分析的结果。

因此,允许为培训和测试集创建DeseqDataset对象,并在其上运行Deseq。

cervical.trains4 = deseqdatasetfrommatrix(countdata = cervical.train,coldata = classtr,公式(〜条件))
##将计数转换为整数模式
cervical.trains4 = deseq(cervical.trains4,fittype = local“)
##估计大小因素##估计分散估计##基因 - 明智的色散估计##最终分散关系估计##拟合模型和测试##  - 更换异常值和重新安装76基因##  -  Deseq Argument'minreplicatesforreplace'= 7 ##  - 原始计数以计数(DDS)##估计分散体##拟合模型和测试
cervical.tests4 = deseqdatasetfrommatrix(countdata = cervical.test,coldata = classts,公式(〜条件))
##将计数转换为整数模式
cervical.tests4 = deseq(cervical.tiests4,fittype =“local”)
##估计大小因素##估计分散体##基因 - 明智色散估计##最终分散关系估计##拟合模型和测试##  - 更换异常值并重新安装60基因##  -  Deseq Argument'minreplicatesforreplace'= 7 ##  - 原始计数以计数(DDS)##估计分散体##拟合模型和测试

使用支持向量机进行分类。

SVM = classification (data = cervical。trainS4, method = "svm", normalize = "deseq", deseqTransform = "vst", cv = 5, rpt = 3, ref = "1")
## found already estimated dispersion, replace these ## gene-wise dispersion estimates ## mean-dispersion relationship ## found already estimated fitting dispersion, remove these ## final dispersion estimates ## Loading required package: kernlab ## ## attached package: 'kernlab' ## ##以下对象从'package:Biostrings'中屏蔽:# # # #类型
支持向量机
## ##类MLSEQ ###的对象方法:SVM ## ##准确度(%):97.83 ##灵敏度(%):100 ##特异性(%):95 ## ##参考类:1

它返回了“MLSEQ”类的对象,我们观察到它成功地安装了97.8%的型号。我们可以访问此S4对象的插槽

getslots(“mlseq”)
## # "character" "character" "confusionMatrix" ##训练参考## "train" "character"

而且,询问培训的模型。

训练(SVM)
##支持径向基础函数内核## ## 46样本## 714预测器## 2类:'1','0'## ##没有预处理##重新采样:交叉验证(5倍,重复3次)## ##样本尺寸摘要:36,37,37,37,37,37,... ## ##在调整参数中重新采样结果:## ## C精度Kappa精度SD Kappa SD## 0.25 0.0541 0.0541 0.0451 0.112 ## 0.50 0.804 0.5763 0.1106 0.244 ## 1.00 0.870 0.7199 0.110 0.1181 0.1181 0.1181 0.1181 0.1181 0.1181 0.2181 0.255 ## ##调谐参数'Sigma'以0.0009560732 ##的准确度用于选择最佳模型来选择最佳模型最大价值。##模型用于模型的最终值是Sigma = 0.0009560732和C = 1。

我们可以使用“预测”预测我们测试数据的类标签

pred。支持向量机= predictClassify(svm, cervical.testS4)
##发现已经估计了分散,替换这些##基因明显的分散估计##意指分散关系##发现已经估计了拟合的分散体,去除了这些##最终分散估计
表(pred.svm,centel(cervical.tiests4 $条件,2))
## ## pred.svm 1 0 ## 1 3 1 ## 0 0 8

其他可用的分类方法是'randomforest', 'cart'和'bagsvm'。

锻炼:

使用随机速度培训相同的培训数据和测试数据。

解决方案:

rf =分类(data = cervical.trains4,方法=“randomforest”,normalize =“deseq”,deseqtransform =“vst”,cv = 5,RPT = 3,Ref =“1”)
##发现已经估计了分散,替换这些##基因明显的分散估计##意指分散关系##发现已经估计了拟合的分散体,去除了这些##最终分散估计
训练(rf)
##随机森林## ## 46样本## 714预测器## 2类:'1','0'## ##没有预处理##重新采样:交叉验证(5倍,重复3次)####样本尺寸摘要:37,37,36,37,37,36,... ## ##横跨调谐参数的重新采样结果:## ## MTRY精度Kappa精度SD Kappa SD ## 2 0.822 0.628 0.1720.360 ## 37 0.867 0.867 0.113 0.236 ## 713 0.860 0.712 0.107 0.222 ## ##准确性用于使用最大值选择最佳模型。##模型用于模型的最终值是MTRY = 37。
pred.rf = predictclassify(rf,cervical.tiests4)
##发现已经估计了分散,替换这些##基因明显的分散估计##意指分散关系##发现已经估计了拟合的分散体,去除了这些##最终分散估计
表(pred.rf,centel(cervical.tiests4 $条件,2))
## ## pred.rf 1 0 ## 1 3 1 ## 0 0 8

sessioninfo.

sessionInfo ()
## R版本3.1.1(2014-07-10)##平台:X86_64-Unknown-Linux-GNU(64位)## ## locale:## [1] lc_ctype = en_us.utf-8 lc_numeric =C ## [3] lc_time = en_US.UTF-8 LC_COLLETER = C ## [5] LC_MONETARY = en_US.UTF-8 LC_MESSAGES = EN_US.UTF-8 ## [7] LC_PAPER = EN_US.UTF-8 LC_NAME = C## [9] lc_address = c lc_telephone = c ## [11] lc_measurement = en_us.utf-8 lc_identification = c ## ##附加基础包:## [1]网格stats4并行统计图形grdevices utils ## [8]数据集方法基础## ##其他附加包:## [1] kernlab_0.9-19 ## [2] class_7.3-11 ## [3] dendextend_0.17.5 ## [4] mlseq_1.2.0 ##[5] edger_3.8.2 ## [6] randomforest_4.6-10 ## [7] Limma_3.22.1 ## [8] Caret_6.0-35 ## [9] Lattice_0.20-29 ## [10] XTable_1.7-4 ## [11] dnacopy_1.40.0 ## [12] cn.mops_1.12.0 ## [13] fission_0.99.4 ## [14] sva_3.12.0 ## [15] mgcv_1.8-3 ##[16] NLME_3.1-118 ## [17] GVIZ_1.10.1 ## [18] GGPLOT2_1.0.0 ## [19] POICLACLU_1.0.2 ## [20] RCOLORBREWER_1.0-5 ## [21] GPLOTS_2.14.2## [22] DESEQ2_1.6.1 ## [23] RCPPARMadillo_0.4.450.1.0 ## [24] RCPP_0.11.3 ## [25] org.hs.eg.db_3.0.0 ## [26] rsqlite_1.0.0 ## [27] dbi_0.3.1 ## [28] shortread_1。24.。0 ## [29] BiocParallel_1.0.0 ## [30] VariantAnnotation_1.12.2 ## [31] RNAseqData.HNRNPC.bam.chr14_0.3.2 ## [32] GenomicAlignments_1.2.0 ## [33] Rsamtools_1.18.1 ## [34] genefilter_1.48.1 ## [35] BSgenome.Hsapiens.UCSC.hg19_1.4.0 ## [36] BSgenome_1.34.0 ## [37] rtracklayer_1.26.1 ## [38] airway_0.99.5 ## [39] ALL_1.7.1 ## [40] TxDb.Hsapiens.UCSC.hg19.knownGene_3.0.0 ## [41] GenomicFeatures_1.18.1 ## [42] AnnotationDbi_1.28.0 ## [43] Biobase_2.26.0 ## [44] GenomicRanges_1.18.1 ## [45] GenomeInfoDb_1.2.2 ## [46] Biostrings_2.34.0 ## [47] XVector_0.6.0 ## [48] IRanges_2.0.0 ## [49] S4Vectors_0.4.0 ## [50] BiocGenerics_0.12.0 ## [51] BiocStyle_1.4.1 ## [52] LearnBioconductor_0.1.6 ## ## loaded via a namespace (and not attached): ## [1] BBmisc_1.7 BatchJobs_1.4 BiocInstaller_1.16.0 ## [4] BradleyTerry2_1.0-5 Formula_1.1-2 Hmisc_3.14-5 ## [7] KernSmooth_2.23-13 MASS_7.3-35 Matrix_1.1-4 ## [10] R.methodsS3_1.6.1 RCurl_1.95-4.3 XML_3.98-1.1 ## [13] acepack_1.3-3.3 annotate_1.44.0 base64enc_0.1-2 ## [16] biomaRt_2.22.0 biovizBase_1.14.0 bitops_1.0-6 ## [19] brew_1.0-6 brglm_0.5-9 caTools_1.17.1 ## [22] car_2.0-21 checkmate_1.5.0 cluster_1.15.3 ## [25] codetools_0.2-9 colorspace_1.2-4 compiler_3.1.1 ## [28] dichromat_2.0-0 digest_0.6.4 e1071_1.6-4 ## [31] evaluate_0.5.5 fail_1.2 foreach_1.4.2 ## [34] foreign_0.8-61 formatR_1.0 gdata_2.13.3 ## [37] geneplotter_1.44.0 gtable_0.1.2 gtools_3.4.1 ## [40] hwriter_1.3.2 iterators_1.0.7 knitr_1.7 ## [43] labeling_0.3 latticeExtra_0.6-26 lme4_1.1-7 ## [46] locfit_1.5-9.1 magrittr_1.0.1 markdown_0.7.4 ## [49] matrixStats_0.10.3 mime_0.2 minqa_1.2.4 ## [52] munsell_0.4.2 nloptr_1.0.4 nnet_7.3-8 ## [55] plyr_1.8.1 proto_0.3-10 reshape2_1.4 ## [58] rpart_4.1-8 scales_0.2.4 sendmailR_1.2-1 ## [61] splines_3.1.1 stringr_0.6.2 survival_2.37-7 ## [64] tools_3.1.1 whisker_0.3-2 zlibbioc_1.12.0