Я не могу сделать Work RandomForest в R. Это дает мне ошибку на NA, а также длину предиктора - PullRequest
0 голосов
/ 21 марта 2020

У меня есть набор геоданных биологических данных, и фактически моя модель случайного леса не работает. Это код, который не работает:

library("ALL")
library("genefilter")
library("randomForest")
library("GEOquery")

gse<- getGEO("GSE5060", destdir = ".", getGPL = FALSE)
dim(gse[[1]])
e.mat <- 2^(exprs(gse[[1]])[,c(20:40)])
dim(e.mat)
ffun <- filterfun(pOverA(0.20,100))
t.fil <- genefilter(e.mat,ffun)
t.fil
small.eset <- log2(e.mat[t.fil,])
dim(small.eset) 
group <- c(rep('B',10),rep('T',11)) # classification, in order
rf <- randomForest(x=t(small.eset), y=as.factor(group), ntree=100)

1 Ответ

0 голосов
/ 21 марта 2020

Прежде чем вы перейдете к хиппи-машинному обучению-предикату-xyz, имеет смысл проверить входные данные, в противном случае выгрузка мусора не так ли?

Если вы делаете сводку ваших предикторов:

summary(small.eset)
   GSM101114        GSM101115         GSM101116         GSM114089    
 Min.   :  6.64   Min.   :  6.052   Min.   :  6.309   Min.   :  0.5  
 1st Qu.: 15.42   1st Qu.: 14.814   1st Qu.: 15.167   1st Qu.: 31.7  
 Median : 38.56   Median : 37.746   Median : 38.643   Median :116.9  
 Mean   :   Inf   Mean   :    Inf   Mean   :    Inf   Mean   :  Inf  
 3rd Qu.:152.05   3rd Qu.:158.972   3rd Qu.:156.699   3rd Qu.:503.9  
 Max.   :   Inf   Max.   :    Inf   Max.   :    Inf   Max.   :  Inf  
   GSM114090       GSM114091       GSM114092       GSM114093    
 Min.   :  0.2   Min.   :  0.7   Min.   :  0.4   Min.   :  0.3  
 1st Qu.: 30.3   1st Qu.: 51.0   1st Qu.: 40.5   1st Qu.: 38.7  
 Median :115.9   Median :175.3   Median :145.2   Median :136.2  
 Mean   :  Inf   Mean   :  Inf   Mean   :  Inf   Mean   :  Inf  
 3rd Qu.:510.9   3rd Qu.:555.2   3rd Qu.:515.9   3rd Qu.:546.1  
 Max.   :  Inf   Max.   :  Inf   Max.   :  Inf   Max.   :  Inf

Это много Inf, с которым нужно иметь дело. И, взглянув на предыдущие шаги,

e.mat <- 2^(exprs(gse[[1]])[,c(20:40)])

Значения уже находятся в некотором диапазоне от 0,1 до 1e5, если вы возьмете 2 степени этого, вы получите астрономические числа.

Вы используют randomForest, один из вариантов - просто go опередить модель с необработанными значениями при условии, что они нормализованы:

x <- exprs(gse[[1]])[,c(20:40)]
# half of the samples are above 25% quantile
x <- x[rowMeans(x>quantile(x)[2]) > 0.5,]
x <- t(x)

y=as.factor(group)
rf <- randomForest(x=x, y=as.factor(group), ntree=100)

Или вы можете стабилизировать предикторы по отклонениям:

library(vsn)
x <- exprs(gse[[1]])[,c(20:40)]
x <- x[rowMeans(x>quantile(x)[2]) > 0.5,]
fit = vsn2(x)
xnorm = predict(fit, x)
rf <- randomForest(x=t(xnorm), y=as.factor(group), ntree=100)
...