【GS专栏】11-全基因组选择实战之RF和SVM

知识/政策规划

2021-04-12


  1. 前言

  前面我们已经演练了基因组选择常用的R包,包括对BLUP和Bayes这两类模型的实战。今天我们进入机器学习应用于GS的实战环节:随机森林(RandomForest,RF)和支持向量机(Support Vector Machine,SVM)。理论部分我们已经提到,RF和SVM除了可以解决常见的分类问题,还可以处理回归问题。因此,对于大量数量性状的预测,机器学习也就有了用武之地。

 

  2. 回归预测

  大部分农艺性状都属于数量性状,也就是说表型数值是连续的。在机器学习中将对这种数据建模预测称之回归。因此,对于基因组选择而言,我们在育种应用中需要处理的大部分其实也是回归问题。本次演练的示例数据仍然来自CIMMYT的小麦数据GYSS[1]。为节省运行时间,以其中242个小麦样本的1000个标记为例。

 

  # 加载数据

  data(GYSS)

  # 基因型数据

  dim(Markers)

  Markers[1:5, 1:5]

  # 表型数据

  head(phenotype)

 

  浏览表型和基因型数据。

 

  > dim(Markers)

  [1] 242 1000

  > Markers[1:5, 1:5]

  PZB00451.1 PZB00416.2 PZB00579.1 PZB00257.1 PZB00236.2

  DT10 0 0 0 0 2

  DT100 0 2 0 0 0

  DT101 0 0 2 0 0

  DT102 0 0 0 0 0

  DT103 2 0 0 0 0

  > head(phenotype)

  [1] 0.7045494 0.3886150 0.1165665 0.3747609 0.4136186 0.6908267

 

  2.1 RFR

  随机森林的回归,即Random Forest Regression,简称RFR。在R语言中,随机森林算法常用randomForest包来实现。这个R包使用起来非常简单,同名主函数虽然参数众多,但需要设置的并不多,大部分默认即可,除非你很清楚要那么做。

  # 加载包

  library(randomForest)

  # 建模

  rf_fit <- randomForest(

  x = Markers, #编码后的基因型

  y = phenotype, #表型

  ntree = 500, #树的数目

  importance = F, #是否计算各个变量在模型中的重要性

  nodesize = NULL #树的节点大小

  )

  # 预测

  rf_pred <- predict(rf_fit, Markers)

  # 预测能力

  rfr <- cor(rf_pred, phenotype)

 

  注:这里为了简化说明,并没有划分数据集。模型的验证也是采用的全部预测值和表型计算相关性。下面同理。

 

  2.2 SVR

  支持向量机的回归,即Support Vector Regression,简称SVR。我们采用R包e1071来分析。

  # 加载包

  library(e1071)

  # 建模

  svm_fit <- svm(

  x = Markers, #编码后的基因型

  y = phenotype, #表型值

  kernel = "linear", #核函数

  cost = 2^(-9), #惩罚因子,可与任意核函数搭配

  gamma = 1, #数据映射到新特征空间后的分布,值越大,支持向量越少

  probability = TRUE #模型是否允许概率预测

  )

  # 预测

  svm_pred <- predict(svm_fit, Markers)

  # 预测能力

  svr <- cor(svm_pred, phenotype)

 

  RFR和SVR适用于数量性状预测,如以上的株高性状。

 

  3. 分类预测

  对于质量性状或分类变量,我们自然地会想到用RF和SVM来解决。那么能否将株高这样的数量性状也当成分类问题来处理呢?思路上是可以这么处理的:将株高性状排序,将之归类为高、中、低三组,然后视为分类问题来解决。首先,我们可以编写一个用于分类的函数,如按比例来进行样本分类。

  sampleClassify <- function(phenotype,

  posPercentage = 0.4,

  BestIndividuals = c("top", "middle", "bottom")) {

  trainSampleSize <- length(phenotype)

  posSampleSize <- round(posPercentage*trainSampleSize)

  if (BestIndividuals == "top") {

  trainPhenOrder <- order(phenotype, decreasing = TRUE)

  } else if (BestIndividuals == "bottom") {

  trainPhenOrder <- order(phenotype, decreasing = FALSE)

  } else if (BestIndividuals == "middle") {

  trainPhenOrder <- order(abs(phenotype), decreasing = FALSE)

  }

  posIdx <- trainPhenOrder[1:posSampleSize]

  negIdx <- setdiff(c(1:trainSampleSize), posIdx)

  res <- list(posSampleIndex = posIdx, negSampleIndex = negIdx)

  return res

  }

 

  然后,将表型和基因型分别分类。如按前40%进行划分,高的个体的表型值归为“1”组,低的个体归为“0”组。

 

  posNegSampleList <- sampleClassify(

  phenotype = phenotype,

  posPercentage = 0.4,

  BestIndividuals = "top"

  )

  markers <- Markers[c(posNegSampleList$posSampleIndex,

  posNegSampleList$negSampleIndex), ]

  pheVal <-as.factor(c(rep("1",length(posNegSampleList$posSampleIndex), rep("0", length(posNegSampleList$negSampleIndex)

  )))

 

  数据划分好后,就可以用随机森林和支持向量机的分类器来进行处理了。

 

  3.1 RFC

  随机森林分类,即Random Forest Classifier,简称RFC。同样用R包randomForest来实现,用法是一样的。

  # 建模

  rfc_fit <- randomForest(

  x = markers, #分类后的标记

  y = pheVal, #分类后的表型

  ntree = 500,

  importance = F,

  nodesize = NULL

  )

  # 预测

  rfc_pred <- predict(rfc_fit, markers, type = "vote")[,"1"]

  # 预测能力

  rfc <- cor(rfc_pred, phenotype)

 

  3.2 SVC

  支持向量机的分类,即Support Vector Classifier,简称SVC。同样用R包e1071实现,用法是一样的。

  # 建模

  svc_fit <- svm(

  x = markers, #分类后的标记

  y = pheVal, #分类后的表型

  kernel = c("linear"),

  cost = 2^(-9),

  gamma = 1,

  probability = TRUE

  )

  # 预测

  svc_pred <- predict(svc_fit, Markers, probability = TRUE)

  svc_res <- as.matrix(attr(svc_pred, "probabilities")[, "1"])

  # 预测能力

  svc <- cor(svc_res, phenotype)

  我这里仅仅作为演示,就不展示具体的结果了。各位感兴趣的话,可以用自己的数据测试一下,看看分类和回归的效果如何。

 

  4. 后记

  至此,我们基本上已经演练了一遍GS中常见的三类模型——BLUP、Bayes和机器学习。首先,恭喜各位老师同学顺利通过学习!但需要说明的是,本期及往期实战只是简单演示了GS数据分析中的核心部分,而非完整的流程,分析过程也不如真实数据那么严谨。在实际的数据分析过程中,应包括前期数据的预处理和统计分析、数据抽样划分、特征选取、模型选择与比较、交叉验证、模型性能评估、预测个体选择等环节。每一步都非常重要,涉及的细节也很多,需要大家利用实际数据多加练习应用。后续若有机会,这些内容也将逐步分享给大家。若有任何疑问,欢迎垂询交流。本期内容就到这里啦,谢谢大家!


相关推荐

新品发布 | 百奥云推出基因组局部组装服务

百奥云基于二代/三代测序数据以及中间结果文件(如fq/bam),自研局部组装算法与流程,并结合了大数据产品基因云湖(GenoLake)的海量数据管理、查询与分析等功能,为用户提供个性化的局部组装服务。通过百奥云的局部组装方案,用户可以快速获取基因/蛋白全长序列信息,避免传统实验所带来的时间和资源浪费,加快决策周期,提高研究和生产效率。同时,还可有效地解决大规模测序数据存储、查询和分析等问题,提高数据利用率,获取更全面的基因组信息,助力动植物研究和育种生产的顺利进行。

04-07

2024

AI大数据 | 百奥云育种数据科学家顾林林发表一种高效精准的集成学习基因组选择方法ELPGV

是否存在一种方法可以整合各种模型的结果以期望获得更加精准的预测呢?

04-03

2024

喜讯 | 百奥云助力湖南农大解析水稻耐盐杂种优势之谜

近日,湖南农业大学刘次桃/段美娟团队在国际著名期刊《Journal of Integrative Plant Biology》上发表研究论文:The OsWRKY72–OsAAT30/OsGSTU26 module mediates reactive oxygen species scavenging to drive heterosis for salt tolerance in hybrid rice。百奥云大数据部门负责人彭建祥以共同作者身份为本研究提供了个性化的数据分析支持。

03-21

2024

水稻智能育种联盟 | 水稻种质资源、品种观摩暨育种创新提升工程恳谈会圆满举行

2024年3月21日上午,水稻智能育种联盟2024水稻种质资源、品种观摩暨育种创新提升工程恳谈会圆满举行,本次会议共有三十余名水稻种业同仁参会,分别来自十余家种企及科研单位,就如何充分利用数字化能力,将我国的种质资源优势进一步转化为育种创新优势的问题齐聚一起,共商水稻种质资源交流与合作共赢,探索水稻品种自主创新能力提升路径

03-21

2024

百奥云为南繁种业发展注入新动力,水稻基因体检服务首次参展

百奥云本次大会携水稻基因体检服务首次参展,诚邀各位专家、老师及同仁共同探讨探讨未来农业发展的新趋势和技术创新。

03-21

2024