遺傳算法來源于進化論,可以了解為一開始我們産生很多個随機解,構成第一代假設集合(也叫做種群),由這些随機解産生一代新的種群并進行假設解集合的更新,在産生下一代随機解過程中,好的解保留,差的解遺棄,即通過變異和交叉疊代每一步。
總結來說,遺傳算法是在候選假設中找到最優假設的過程。
1.遺傳算法結構
(1)種群:在算法中疊代更新的假設集合
(2)适應度函數:判斷假設好壞的定量值
(3)如何選出适應度較高的假設:一部分假設進行變異,一部分假設進行交叉操作。具體如何做後面詳細講。
故模型為: GA(Fitness,Fitness_threshold,p,r,m)
Fitness:适應度函數,輸入為某函數輸出為判斷值
Fitness_threshold:适應度門檻值,即疊代停止條件
p:種群中假設的個數;r:每一步進行交叉那一部分的比例;m:變異的比例
2.算法過程
1. 初始化種群P:随機的産生p個假設 2.評估:對P中的每一個假設h,計算該假設的适應度Fitness(h) 3.當P中假設最大的适應度仍小于 Fitness_threshold重複疊代下面步驟,直到滿足停止條件: 産生新的一代種群Ps: (1)選擇:從源種群P中選擇p(1-r)個假設加入Ps中,每個假設的選擇機率為
(2)交叉:還是依照pr(h)的機率從P中選擇
對假設,每一對假設通過交叉操作都産生兩個後代
(3)變異:在新種群Ps中均勻地選擇m%個假設,表示該假設的比特串對其中一位進行求反
4.更新:使用Ps代替P
5.停止疊代後,傳回适應度最大的假設
3.假設的表示
假設使用比特串表示,如下例:
4.遺傳算法
4.1.交叉操作
從兩個父母串産生兩個後代,後代的串通過交叉掩碼确定複制父母串的位置,進而形成自己的表示串。如下圖所示。
拿第一個單點交叉來說,第一個後代前五位來自第一個父母串,後六位來自第二個父母串;第二個後代前五位來自第二個父母串,後六位來自第一個父母串。這裡介紹一個後代生成規則——GABIL system
每個假設對應一個命題規則的析取集。規則的假設空間由一組固定屬性的限制組合構成。為了表示一組規則,将單個規則的位串表示連接配接起來。下圖中a1和a2是兩個布爾屬性,c是分類。後代取複制的子串時定義兩個index值,例如d1=1和d2=3。
如果第一個父母串劃分已經确定,則第二個父母串可以是<1,3>均在前五位進行劃分,<1,8>左邊劃在前五位右邊劃在後五位,<6,8>均在後五位劃分。那麼h3選擇圖中h1中括号外的部分和h2中括号内的部分。
4.2.變異操作
對該假設串任取一位取反
4.3.适應度函數
适應度函數可以通過一系列标注的資料進行訓練得到,除了分類準确率,适應度還可以包括規則的複雜度和一般性。
5.總結
(1)不同于梯度下降每次隻改進一點點,遺傳算法可以産生于父代假設完全不同的子代假設,不易陷于局部最小。
(2)擁擠問題:由于适應度越高越有可能産生後代,是以多次疊代後,很有可能多個後代是同源的假設,這樣就喪失了假設的多樣性,搜尋速度降低。
解決方法:a.改變選擇函數,不再依照适應度作為機率可以改為排名選擇(任選兩個取最大)
b.适應度共享,如果相似個體較多,則降低每個個體的适應度