带有GA封装适应性功能的R中的错误

时间:2018-07-13 16:21:55

标签: r genetic-algorithm

我以GA软件包中的示例为例,介绍了LM特征选择,但我想增加一个惩罚,以使选择的特征量不能超过某个阈值。

在此示例中,我添加了一个惩罚'sum(string * -1)* 100',因此对于每个选择的功能,惩罚都是100。

但是,如果我运行代码,则会出现错误: “ x [,ii]中的错误:下标超出范围”

我的代码或软件包有什么问题?

(如果将代码行“ -BIC(mod)+ sum(string * -1)* 100#健身功能值”更改为“ -BIC(mod)#健身功能值”,则一切正常。 )

 library(GA)

 data(fat, package = "UsingR")
 mod <- lm(body.fat.siri ~ age + weight + height + neck + chest + abdomen + hip + thigh + knee + ankle + bicep + forearm + wrist, data = fat)
 summary(mod)
 x <- model.matrix(mod)[,-1]
 y <- model.response(mod$model)

 fitness <- function(string)
 { 
   mod <- lm(y ~ x[,string==1])
  -BIC(mod)+sum(string*-1)*100  # fitness function value
 }
 GA = ga("binary", fitness = fitness, nBits = ncol(x), popSize = 100, maxiter = 100, monitor = FALSE)
 summary(GA)

1 个答案:

答案 0 :(得分:0)

此错误实际上发生在上一行 mod <- lm(y ~ x[,string==1])

修改健身功能以打印出字符串

fitness <- function(string) { 
   mod <- lm(y ~ x[,string==1])
   -BIC(mod)+sum(string*-1)*100  # fitness function value
}

并运行ga。您将看到,当字符串全为零时,会持续发生这种情况。

直接测试。

string = rep(0,13)
fitness(string)
 [1] 0 0 0 0 0 0 0 0 0 0 0 0 0
Error in x[, ii] : subscript out of bounds

mod <- lm(y ~ x[,string==1])
Error in x[, ii] : subscript out of bounds

问题是您要尝试使用没有预测变量的线性模型进行拟合。当您包含此惩罚项时,它将变量数驱动为零。没有这个术语,您不可能测试所有零。