2017-03-07 77 views
0

我试图创建一个遗传算法(不挑剔库,GA和genalg产生同样的错误),以确定潜在的列使用线性回归模型,通过最小化-adj。 R^2。使用mtcars作为游戏设置,试图在mpg上退步。R“在terms.formula错误”使用GA/genalg库

我有以下的适应度函数:

mtcarsnompg <- mtcars[,2:ncol(mtcars)] 

evalFunc <- function(string) { 
    costfunc <- summary(lm(mtcars$mpg ~ ., data = mtcarsnompg[, which(string == 1)]))$adj.r.squared 
    return(-costfunc) 
} 

ga("binary",fitness = evalFunc, nBits = ncol(mtcarsnompg), popSize = 100, maxiter = 100, seed = 1, monitor = FALSE) 

引起:

Error in terms.formula(formula, data = data) : 
    '.' in formula and no 'data' argument 

研究这个错误,我决定我可以解决这样说:

evalFunc = function(string) { 
    child <- mtcarsnompg[, which(string == 1)] 
    costfunc <- summary(lm(as.formula(paste("mtcars$mpg ~", paste(child, collapse = "+"))), data = mtcars))$adj.r.squared 
    return(-costfunc) 
} 

ga("binary",fitness = evalFunc, nBits = ncol(mtcarsnompg), popSize = 100, maxiter = 100, seed = 1, monitor = FALSE) 

但这导致:

Error in terms.formula(formula, data = data) : 
    invalid model formula in ExtractVars 

我知道这应该的工作,因为我可以评估书面两种方式的手的作用,而不是使用GA:

solution <- c("1","1","1","0","1","0","1","1","1","0") 

evalFunc(solution) 
[1] -0.8172511 

我在“GA快速浏览”还发现(https://cran.r-project.org/web/packages/GA/vignettes/GA.html )使用其中(string == 1)是GA应该能够处理的“string”,所以我不知道GA对我的函数的问题是什么。

上的方式来写这让GA或genalg接受功能有什么想法?

回答

0

原来我并不认为0的解串(或实际上,0的一个1字符串)将导致内部粘贴改为“哩〜”,这是不是一个可能的线性回归。