簡體   English   中英

R使用GA / genalg庫的“ terms.formula錯誤”

[英]R “Error in terms.formula” using GA/genalg library

我正在嘗試創建一種遺傳算法(不要挑剔庫,ga和genalg會產生相同的錯誤),以通過最小化-adj來識別用於線性回歸模型的潛在列。 R ^ 2。 使用mtcars作為播放器,嘗試在mpg上回歸。

我具有以下健身功能:

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應該能夠處理的事情,所以我不知道GA的功能有什么問題。

有什么想法寫這個來讓ga或genalg接受該功能嗎?

事實證明,我不認為0的解決方案字符串(或者實際上是一個帶1的0s字符串)會導致內部粘貼讀取“ mpg〜”,這不可能進行線性回歸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM