禁忌演算法
禁忌演算法是啟發式演算法對個體的應用的一種。由於在運用最速下降或者最速上公升區域性搜尋最值的時候可能會因為到了區域性最小值後停止搜尋。這裡禁忌演算法是一種可以look back的演算法,但是需要設定一些禁忌目錄來保證搜尋不是無限的。
例如:在baseball salary案例中,我們希望尋找幾個與salary最connected的features去做multiple regression所以,需要在p個features中尋找s個features。我們在這裡通過線性回歸的衡量引數最大擬合模型的aic來做乙個需要優化的function。。我們需要尋找的是哪s個feature使得aic最大。所以這是乙個np問題。
下面進行**的說明:
cun.current
cun.var=baseball.sub[,cun.current==1]
g cun.aic.current
for (i in
1:m)
}
將本段程式迴圈15次(我們最初設定的最大迭代次數。)應該是找到aic不再動的時候停止。
這樣我們找到了最優的aic值。這時,選中的feature序列數就是我們需要找到最優的多元線性回歸需要用到的最優features.
主要程式就是這樣子了~
baseball.dat = read.table("d:\\sunyao\\baseball.dat",header=true)
baseball.dat$freeagent = factor(baseball.dat$freeagent)
baseball.dat$arbitration = factor(baseball.dat$arbitration)
baseball.sub = baseball.dat[,-1]
salary.log = log(baseball.dat$salary)
n = length(salary.log)
m = length(baseball.sub[1,])#去掉第一列的salary
num.starts = 5
runs = matrix(0,num.starts,m)
itr = 15
runs.aic = matrix(0,num.starts,itr)
# initializes starting runs
set.seed(19676)
for(i in
1:num.starts)
## main
for(k in
1:num.starts)
}run.current = run.next
runs.aic[k,j]=run.aic
}runs[k,] = run.current
}## output
runs # lists of predictors
runs.aic # aic values
我們可以用影象表示我們迭代過程中aic值的變化情況。
我發現r包乙個tabusearch可以成功的找到我們需要的函式的最小值。
下面對tabusearch函式進行簡介。
tabusearch用來搜尋乙個二進位制陣列的最佳形式。其中我們需要自己寫乙個evaluate函式來確定演算法的評判標準。
下面是引數說明:
tabusearch()
一種優化二進位制字串的禁忌搜尋演算法。 它需要使用者定義的目標函式
並報告在整個搜尋過程中找到的最佳二進位制配置,即最高的二進位制配置
目標函式值。 該演算法可用於變數選擇。
size:二進位制配置的長度。
iters:迭代次數
objfunc:引數為01的目標函式用來評判選擇變數
config:初始值
neigh;設定每次迭代時候鄰居的位置:初始值是all size
listsize:禁忌列表的長度
nrestarts:演算法強化的時候最多可以重新啟動的次數
repeatall:可以重複搜尋的次數
verbose:t\f t:列印所在階段的名稱:初步階段。集約化階段。多元化階段
對於上一道題。我不明白為啥算出來的aic值成了最小的了····
evaluate
res
listsize = 5, nrestarts = 4)
R語言實現KNN 演算法
knn是機器學習中最簡單的分類演算法之一 就是把每乙個測試樣本跟訓練樣本中的每乙個樣本求他們的歐式距離,然後選出最小的幾個,裡面哪乙個類多 這個測試樣本就屬於哪乙個類 用r語言自帶的iris 寫了一下 data iris length iris 1 idx sample 150,100 train ...
Bagging演算法的R語言實現
bagging 是bootstrap aggregating的縮寫,是第一批用於多分類整合演算法。bagging演算法如下 迴圈k次,每次都從樣本集d中有放回地抽取樣本集di,這樣總共得到k個樣本集,用這k個樣本集進行決策樹生成,獲得k個決策樹模型,再將要檢測的資料用這k個決策樹模型進行多數表決,獲...
禁忌搜尋演算法之01揹包問題(C語言實現)
整個流程 初始乙個狀態 通過設計的轉移方式進行轉移,並求出所有轉移方式對應的增量和新狀態 依次從最好的狀態進行判斷是否滿足解除禁忌 也就是能不能選為新狀態 可以選為新狀態的條件 1 價值大於歷史最優值。2 禁忌表中沒有 如果不滿足上述兩條,選擇次優狀態再進行判斷。重複上述過程 注 有的禁忌表存的禁忌...