原版更新:2018.06.08 翻译更新:2022.05.11
翻译 刘翼宁、张敖
题目 使用深度学习从表型预测基因型
版本 1.2(注:最新版本为1.2)
作者 Chuang Ma, Zhixu Qiu, Qian Cheng and Wenlong Ma
维护 Zhixu Qiu zhixuqiu2015@gmail.com, Chuang Ma
描述 名为‘DeepGS’的R包可以执行全基因组选择(Genomic selection,GS),GS在动植物育种中前途光明。 DeepGS使用整个基因组的全部分子标记结合先进的机器学习技术(深度学习)预测表型。DeepGS用国际玉米小麦改良中心(CIMMYT)基因库的2000个伊朗面包小麦的8个表型预测完成了有效性验证。此外,基于粒子群优化(ELBPSO)的集成学习,可以用于不同GS模型的预测的线性整合。
依赖 R(>=3.0.0)
建议 mxnet
许可 GPL-2 | GPL-3
编码 UTF-8
集成数据 true
RoxygenNote 6.0.1
需要编译 no
R主题文档
‘DeepGS’包的中文说明R主题文档cvSampleIndexELBPSOmeanNDCGpredict_GSModeltrain_deepGSModelwheat_example
cvSampleIndex
生成建模集和测试集的索引。
描述
该函数为建模和测试集中的样本生成索引,以执行N倍交叉验证实验。
使用
cvSampleIndex(sampleNum, cross = 5, seed = 1, randomSeed = FALSE)
参数
| 参数 | 描述 |
|---|---|
| sampleNum | 需要划分为建模集和测试集的样本数。 |
| cross | 交叉验证的倍数(折叠数)。 |
| seed | 一个整数种子,用于重复结果,默认为1。 |
| randomSeed | 逻辑变量。默认值为FALSE。 |
值
每个元素的列表,包括$trainIdx、$testIdx和$cvIdx。
$trainIdx 建模样本的索引。
$testIdx 测试样本的索引。
$cvIdx 交叉验证的索引。
| 值 | 描述 |
|---|---|
| $trainIdx | 建模样本的索引。 |
| $testIdx | 测试样本的索引。 |
| $cvIdx | 交叉验证的索引。 |
作者
Chuang Ma, Zhixu Qiu, Qian Cheng and Wenlong Ma
例子
#' ## 读取数据 ##
data(wheat_example)
## 5倍交叉验证
b <- cvSampleIndex(sampleNum = 2000, cross = 5, seed = 1)
## 提取其中一次验证的数据集
b$cv1
ELBPSO
基于粒子群优化的集成学习(Ensemble Learning Based on Particle Swarm Optimization)。
描述
该算法结合了不同GS模型的预测表型值,并返回这些模型的最佳权重。
使用
ELBPSO(rep_times = 100, interation_times, weight_dimension, weight_min, weight_max, rate_min, rate_max, paticle_number, pred_matrix, IW = 1, AF1 = 2, AF2 = 2)
参数
| 参数 | 描述 |
|---|---|
| rep_times | ELBPSO重复次数,默认是100。 |
| interation_times | 每次ELBPSO优化迭代次数。 |
| weight_dimension | 权重维度。 |
| weight_min | 最小权重。 |
| weight_max | 最大权重。 |
| rate_min | 最小更新率。 |
| rate_max | 最大更新率。 |
| paticle_number | 帕特里克数量。 |
| pred_matrix | 第一列代表真实值,其他列代表其他GS模型的预测值。 |
| IW | 惯性(惰性)权重。默认为1。 |
| AF1 | 加速因子1。默认是2。 |
| AF2 | 加速因子2。默认是2。 |
例子1.2
# # Not run
# library(DeepGS)
# library(rrBLUP)
# data("wheat_example")
# Markers <- wheat_example$Markers
# y <- wheat_example$y
# cvSampleList <- cvSampleIndex(length(y),10,1)
# # select one fold
# cvIdx <- 1
# trainIdx <- cvSampleList[[cvIdx]]$trainIdx
# testIdx <- cvSampleList[[cvIdx]]$testIdx
# trainMat = Markers[trainIdx,]
# trainPheno = y[trainIdx]
# validIdx <- sample(1:length(trainIdx),floor(length(trainIdx)*0.1))
# validMat <- trainMat[validIdx,]
# validPheno <- trainPheno[validIdx]
# testMat = Markers[testIdx,]
# testPheno = y[testIdx]
# # design DeepGS architecture
# conv_kernel <- c("1*18") # convolution kernels (fileter shape)
# conv_stride <- c("1*1")
# conv_num_filter <- c(8) # number of filters
# pool_act_type <- c("relu") # active function for next pool
# pool_type <- c("max") # max pooling shape
# pool_kernel <- c("1*4") # pooling shape
# pool_stride <- c("1*4") # number of pool kernerls
# fullayer_num_hidden <- c(32,1)
# fullayer_act_type <- c("sigmoid")
# drop_float <- c(0.2,0.1,0.05)
# cnnFrame <- list(conv_kernel =conv_kernel,conv_num_filter = conv_num_filter,
# conv_stride = conv_stride,pool_act_type = pool_act_type,
# pool_type = pool_type,pool_kernel =pool_kernel,
# pool_stride = pool_stride,fullayer_num_hidden= fullayer_num_hidden,
# fullayer_act_type = fullayer_act_type,drop_float = drop_float)
# markerImage = paste0("1*",ncol(trainMat))
# # train DeepGS model
# DeepGS_obj <- train_deepGSModel(trainMat = trainMat,trainPheno = trainPheno,
# validMat = validMat,validPheno = validPheno, markerImage = markerImage,
# cnnFrame = cnnFrame,device_type = "cpu",gpuNum = 1, eval_metric = "mae",
# num_round = 6000,array_batch_size= 30,learning_rate = 0.01,
# momentum = 0.5,wd = 0.00001, randomseeds = 0,initializer_idx = 0.01,
# verbose =TRUE)
# # make predictions based on the trained model
# DeepGS_pred <- predict_GSModel(GSModel = DeepGS_obj,testMat = Markers[testIdx,],
# markerImage = markerImage )
# # train RR-BLUP model#'
# rrBLUP_obj <-mixed.solve(trainPheno, Z=trainMat, K=NULL, SE = FALSE, return.Hinv=FALSE)
# # make predictions based on the trained model
# rrBLUP_pred <- testMat %*% rrBLUP_obj$u + as.numeric(rrBLUP_obj$beta )
# # prepare the prediction matrix
# test_predMat <- cbind(t(DeepGS_pred), rrBLUP_pred)
# train_predMat <- cbind(testPheno, t(DeepGS_pred), rrBLUP_pred)
# colnames(train_predMat) <- c("real", "DeepGS", "RR-BLUP")
## End not run
例子1.1
## 不运行
# rrBLUP例子
# library(DeepGS)
# library(rrBLUP)
# data("wheat_example")
# Markers <- wheat_example$Markers
# y <- wheat_example$y
# cvSampleList <- cvSampleIndex(length(y),10,1)
## 选择第N倍(折)
# cvIdx <- 1
# trainIdx <- cvSampleList[[cvIdx]]$trainIdx
# testIdx <- cvSampleList[[cvIdx]]$testIdx
# trainMat = Markers[trainIdx,]
# trainPheno = y[trainIdx]
# testMat = Markers[testIdx,]
# testPheno = y[testIdx]
# rrBLUP_obj <-mixed.solve(trainPheno, Z=trainMat, K=NULL, SE = FALSE, return.Hinv=FALSE)
# rrBLUP_pred <- testMat %*% rrBLUP_obj$u + as.numeric(rrBLUP_obj$beta)
## 不运行结束
# 使用他们的预测得分计算不同模型的权重
test_datapath <- system.file("exdata", "test_ELBPSO.RData", package = "DeepGS")
load(test_datapath)
weight <- ELBPSO(rep_times = 100,interation_times = 25,weight_dimension = 2, weight_min = 0,weight_max=1,rate_min = -0.01,rate_max = 0.01, paticle_number = 10, pred_matrix = train_predMat,IW = 1, AF1 = 2, AF2 = 2)
new_pre <- (test_predMat %*% weight)/sum(weight)
# calculating the weight of different training model by using their predict socres
test_datapath <- system.file("exdata", "test_ELBPSO.RData",
package = "DeepGS")
load(test_datapath)
weight <- ELBPSO(rep_times = 100,interation_times = 25,weight_dimension = 2, weight_min = 0,weight_max=1,rate_min = -0.01,rate_max = 0.01, paticle_number = 10, pred_matrix = train_predMat,IW = 1, AF1 = 2, AF2 = 2)
ensemble_pred <- (test_predMat %*% weight)/sum(weight)
predMat <- cbind(testPheno, t(DeepGS_pred), rrBLUP_pred, ensemble_pred)
colnames(predMat) <- c("real", "DeepGS", "RR-BLUP", "ensemble")
cor(predMat)
meanNDCG
计算平均归一化折扣累积增益。
描述
该函数是在选择育种值高的前k个个体时,用平均归一化折扣累积增益评估全基因组选择预测模型表现的。
使用
meanNDCG(realScores, predScores, topAlpha = c(10))
参数
| 参数 | 描述 |
|---|---|
| realScores | 一个数值化向量,一个性状验证个体的育种值。 |
| predScores | 一个数值化向量或矩阵,用全基因组选择预测模型预测的个体的预测育种值。 |
| topAlpha | 一个数值化的向量(一个或多个参数),优良个体百分比,默认是10。 |
作者
Chuang Ma, Zhixu Qiu, Qian Cheng and Wenlong Ma
例子
## Not run
refer_value <- runif(100)
pred_value <- sin(refer_value) + cos(refer_value)
meanNDCG(realScores = refer_value,predScores = pred_value, topAlpha = c(10,20,30))
## End not run
predict_GSModel
预测GS模型。
描述
使用经过训练的深度学习全基因组选择预测模型预测性状值。
使用
predict_GSModel(GSModel, testMat, markerImage)
参数
GSModel 从DeepGSModel函数获得的经过训练的预测模型。
testMat 基因型矩阵(T×M;T是个体,M是标记)。
markerImage (字符串)给出“i×j”的图像格式,每个个体的标记信息(M×1)将被编码。
作者
Chuang Ma, Qian Cheng, Zhixu Qiu and Wenlong Ma
train_deepGSModel
利用深度学习技术建立全基因组选择预测模型。
描述
该函数应用深度卷积神经网络建立全基因组选择的预测模型。
使用
train_deepGSModel(trainMat, trainPheno, validMat, validPheno, markerImage, cnnFrame, device_type = "cpu", gpuNum = "max", eval_metric = "mae", num_round = 6000, array_batch_size = 30, learning_rate = 0.01, momentum = 0.5, wd = 1e-05, randomseeds = NULL, initializer_idx = 0.01, verbose = TRUE...)
参数
trainMat 建模群体的基因型矩阵(N×M,N是个体,M是标记)。
trainPheno 建模群体表型的向量(N×1)。
validMat 验证群体的基因型矩阵。
validPheno 验证群体的表型向量(N*1)。
markerImage (字符串)这个给出“i×j”的图像格式,每个个体用标记信息编码(M×1)。如果图像大小超过SNP标记数,用0修改缺失的部分,如果图像大小小于SNP标记数,多余的标记被去除。
cnnFrame 包含卷积神经网络(CNN)框架的以下元素的列表:
| trainMat | 建模群体的基因型矩阵(N×M,N是个体,M是标记)。 |
|---|---|
| trainPheno | 建模群体表型的向量(N×1)。 |
| validMat | 验证群体的基因型矩阵。 |
| validPheno | 验证群体的表型向量(N*1)。 |
| markerImage | (字符串)这个给出“i×j”的图像格式,每个个体用标记信息编码(M×1)。如果图像大小超过SNP标记数,用0修改缺失的部分,如果图像大小小于SNP标记数,多余的标记被去除。 |
| cnnFrame | 包含卷积神经网络(CNN)框架的以下元素的列表: – conv_kernel:向量(K×1)给出卷积核大小(宽度x高度),分别用于过滤K个卷积层的图像矩阵。 – conv_num_filter:向量(K×1)分别给出K个卷积层的卷积核数。 – pool_act_type:给出活动函数的类型的向量(K×1),将定义K个卷积层的输出,这将分别作为相应池层的输入。它包括“relu”、“sigmoid”、“softrelu”和“tanh”。 – conv_stride:K个卷积核的一个特征(K×1)步长。 – pool_type:分别从“avg”、“max”、“sum”中选择的一个特征(K×1)类型的K个池层。 – pool_kernel:一个特征(K×1)K个池层的K池核大小(宽×高)。 – pool_stride:一个特征(K×1)K池核的步长。 – fullayer_number-hidden:一个数值化(H×1),H完全连接层分别隐藏神经元的数量,最后一个完全连接层的隐藏神经元数量必须是1。 – fullayer_act_type:一个数值型((H-1)×1),从所有连接层的“relu”,“sigmoid”,“softrelu”和“tanh”的选择活动函数的类别。 – drop_float:数值型。 |
| device_type | 选择”cpu“或”gpu“设备去构建预测模型。 |
| gpuNum | (数值型)GPU设备的数量,如果使用多GPU(gpuNum>1),momentum参数必须大于0。 |
| eval_metric | (字符串)一种估计建模过程表现的方法,包括”mae“、”rmse“和”accuracy“,默认为”mae“。 |
| num_round | (数值型)超过建模数据去建模的迭代次数,默认=10。 |
| array_batch_size | (数值型)它为每个更新权重定义将通过网络传播的样本数,默认为128。 |
| learning_rate | 建模过程的学习率。 |
| momentum | (浮点,0~1)移动平均线动量,平均为0.9。 |
| wd | (浮点,0~1)权重衰减,默认为0。 |
| randomseeds | 设置mxnet设备特定随机数使用的种子。 |
| initializer_idx | 参数的初始化主题。 |
| verbose | 逻辑值(默认true)指定是否在建模期间的迭代时输出信息。 |
| … | 用于构造包“mxnet”中使用的神经网络的参数(http://mxnet.io/)。 |
作者
Chuang Ma , Zhixu Qiu, Qian Cheng and Wenlong Ma
例子
data(wheat_example)
Markers <- wheat_example$Markers
y <- wheat_example$y
cvSampleList <- cvSampleIndex(length(y),10,1)
# cross validation set
cvIdx <- 1
trainIdx <- cvSampleList[[cvIdx]]$trainIdx
testIdx <- cvSampleList[[cvIdx]]$testIdx
trainMat <- Markers[trainIdx,]
trainPheno <- y[trainIdx]
validIdx <- sample(1:length(trainIdx),floor(length(trainIdx)*0.1))
validMat <- trainMat[validIdx,]
validPheno <- trainPheno[validIdx]
trainMat <- trainMat[-validIdx,]
trainPheno <- trainPheno[-validIdx]
conv_kernel <- c("1*18") ## convolution kernels (fileter shape)
conv_stride <- c("1*1")
conv_num_filter <- c(8) ## number of filters
pool_act_type <- c("relu") ## active function for next pool
pool_type <- c("max") ## max pooling shape
pool_kernel <- c("1*4") ## pooling shape
pool_stride <- c("1*4") ## number of pool kernerls
fullayer_num_hidden <- c(32,1)
fullayer_act_type <- c("sigmoid")
drop_float <- c(0.2,0.1,0.05)
cnnFrame <- list(conv_kernel =conv_kernel,conv_num_filter = conv_num_filter,
conv_stride = conv_stride,pool_act_type = pool_act_type,
pool_type = pool_type,pool_kernel =pool_kernel,
pool_stride = pool_stride,fullayer_num_hidden= fullayer_num_hidden,
fullayer_act_type = fullayer_act_type,drop_float = drop_float)
markerImage = paste0("1*",ncol(trainMat))
trainGSmodel <- train_deepGSModel(trainMat = trainMat,trainPheno = trainPheno, validMat = validMat,validPheno = validPheno, markerImage = markerImage, cnnFrame = cnnFrame,device_type = "cpu",gpuNum = 1, eval_metric = "mae", num_round = 6000,array_batch_size= 30,learning_rate = 0.01,momentum = 0.5,wd = 0.00001, randomseeds = 0,initializer_idx = 0.01, verbose =TRUE)
predscores <- predict_GSModel(GSModel = trainGSmodel,testMat = Markers[testIdx,], markerImage = markerImage )
wheat_example
在开发功能中运行的例子。
描述
列表:
- 标记:矩阵(599×1225),每行代表一个个体的1225个标记。
- y:每个个体的真实表型值。
使用
data(wheat_example)
发表评论