禁忌算法
禁忌算法是启发式算法对个体的应用的一种。由于在运用最速下降或者最速上升局部搜索最值的时候可能会因为到了局部最小值后停止搜索。这里禁忌算法是一种可以look back的算法,但是需要设置一些禁忌目录来保证搜索不是无限的。
例如:在Baseball salary案例中,我们希望寻找几个与salary最connected的features去做multiple regression所以,需要在p个features中寻找s个features。我们在这里通过线性回归的衡量参数最大拟合模型的AIC来做一个需要优化的function。。我们需要寻找的是哪s个feature使得AIC最大。所以这是一个NP问题。
下面进行代码的说明:
cun.current <- rbinom(m,1,0.5)#在m个feature里边随便挑选一半的feature进行初始的train
cun.var=baseball.sub[,cun.current==1]
g <-lm(salary.log~.,cun.var)#用选中的feature进行aic值的训练。
cun.aic.current <- extractAIC(g)[2]
for (i in 1:m)
{
cun.next = cun.current#将我们选中的feature的序号赋值给cun.next
cun.next[i] <- !cun.current[i]#挨个换我们之前选得feature比如之前在123456789中选择了13579现在由于将第一个取反变成了3579.第二次循环将变成选择123579
cun.var=baseball.sub[,cun.next==1]
g <- lm(salary.log~.,cun.var)
cun.aic <- extractAIC(g)[2]
if(cun.aic<cun.aic.cu