美文网首页玩转大数据R语言与统计分析
用遗传算法筛选线性回归模型自变量

用遗传算法筛选线性回归模型自变量

作者: 六胜一平 | 来源:发表于2020-03-12 17:46 被阅读0次

    线性回归模型的解释变量筛选一般有逐步回归和全子集两种方法,在R中分别以car包的stepAIC和leaps包的regsubset为代表。stepAIC采用贪婪算法,求得的常是局部最优解,regsubset的结果很难解读。本文我们尝试用遗传算法来选择解释变量,看看效果如何。
    我们选取UCI的Forest fire dataset,先用log(y+1)对因变量进行变换,再用genalg包提供的二进制遗传算法寻找AIC最小的自变量组合。

    library(genalg)
    
    ff=logArea~X+Y+Month+Day+Month:Day+FFMC+DMC+DC+Temp+RH+Wind+Rain
    terms=c(attributes(terms(ff))$term.labels)
    
    evalFun=function(gen){
         if(sum(gen)==0)
           return(1e+10)
         stm=paste(terms[gen==1],collapse = '+')
         sf=paste(c('logArea',stm),collapse =' ~ ')
         f=as.formula(sf)
         m=lm(formula = f,data = data)
    
        # return(-summary(m)$adj.r.squared)
         return(AIC(m))
    }
    
    monitor <- function(obj) {
       minEval = min(obj$evaluations);
       plot(obj, type="hist");
    }
    
    bestm <- rbga.bin(size=12, mutationChance=0.06, popSize = 1000,iters = 50,zeroToOneRatio=10,
                      evalFunc=evalFun, verbose=TRUE)
    
    gen=bestm$population[1,]
    stm=paste(terms[gen==1],collapse = '+')
    sf=paste(c('logArea',stm),collapse =' ~ ')
    f=as.formula(sf)
    m=lm(f,data)
    

    全模型的AIC为1879,遗传算法找到的最优模型AIC为1772,模型得到了一定程度优化。

    相关文章

      网友评论

        本文标题:用遗传算法筛选线性回归模型自变量

        本文链接:https://www.haomeiwen.com/subject/hiwmjhtx.html