我正在学习使用glmnet和brnn包.请考虑以下代码: library(RODBC)library(brnn)library(glmnet)memory.limit(size = 4000)z -odbcConnect("mydb") # database with Access queries and tables# import the dataf5 - sqlFetch(z,"my_qry")# he
library(RODBC) library(brnn) library(glmnet) memory.limit(size = 4000) z <-odbcConnect("mydb") # database with Access queries and tables # import the data f5 <- sqlFetch(z,"my_qry") # head(f5) # check for 'NA' sum(is.na(f5)) # choose a 'locn', up to 16 of variable 'locn' are present f6 <- subset(f5, locn == "mm") # dim(f6) # use glmnet to identify possible iv's training_xnm <- f6[,1:52] # training data xnm <- as.matrix(training_xnm) y <- f6[,54] # response fit.nm <- glmnet(xnm,y, family="binomial", alpha=0.6, nlambda=1000,standardize=TRUE,maxit=100000) # print(fit.nm) # cross validation for glmnet to determine a good lambda value cv.fit.nm <- cv.glmnet(xnm, y) # have a look at the 'min' and '1se' lambda values cv.fit.nm$lambda.min cv.fit.nm$lambda.1se # returned $lambda.min of 0.002906279, $lambda.1se of 2.587214 # for testing purposes I choose a value between 'min' and '1se' mid.lambda.nm = (cv.fit.nm$lambda.min + cv.fit.nm$lambda.1se)/2 print(coef(fit.nm, s = mid.lambda.nm)) # 8 iv's retained # I then manually inspect the data frame and enter the column index for each of the iv's # these iv's will be the input to my 'brnn' neural nets cols <- c(1, 3, 6, 8, 11, 20, 25, 38) # column indices of useful iv's # brnn creation: only one shown but this step will be repeated # take a 85% sample from data frame ridxs <- sample(1:nrow(f6), floor(0.85*nrow(f6)) ) # row id's f6train <- f6[ridxs,] # the resultant data frame of 85% f6train <-f6train[,cols] # 'cols' as chosen above # For the 'brnn' phase response is a binary value, 'fin' # and predictors are the 8 iv's found earlier out = brnn( fin ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8, data=f6train, neurons=3,normalize=TRUE, epochs=500, verbose=FALSE) #summary(out) # see how well the net predicts the training cases pred <- predict(out)
上面的脚本运行正常.
我的问题是:如何自动运行上述脚本以运行不同的locn值,这实际上是如何推广获取步骤:cols< -c(1,3,6,8,11,20,25, 38)有用的iv的#列索引.目前我可以手动执行此操作,但无法查看如何以不同的locn值的一般方式执行此操作,例如
locn.list <- c("am", "bm", "cm", "dm", "em") for(j in 1:5) { this.locn <- locn.list[j] # run the above script }自从发表我的问题以来,我找到了Simon,Friedman,Hastie和Tibshirani的论文:Coxnet:Regularized Cox Regression,它解决了如何提取我想要的东西.
本文中的一些相关细节并适用于我的数据(lambda符号除外):
我们可以检查我们的模型选择哪个协变量是活跃的,并查看这些协变量的系数.
coef(fit.nm, s = cv.fit.nm$lambda.min) # returns the p length coefficient vector
对应于lambda = cv.fit $lambda.min的解决方案.
Coefficients <- coef(fit.nm, s = cv.fit.nm$lambda.min) Active.Index <- which(Coefficients != 0) Active.Coefficients <- Coefficients[Active.Index] Active.Index # identifies the covariates that are active in the model and Active.Coefficients # shows the coefficients of those covariates
希望这对其他人有用!