天天看點

資料挖掘筆記——遺傳算法

      遺傳算法來源于進化論,可以了解為一開始我們産生很多個随機解,構成第一代假設集合(也叫做種群),由這些随機解産生一代新的種群并進行假設解集合的更新,在産生下一代随機解過程中,好的解保留,差的解遺棄,即通過變異和交叉疊代每一步。

    總結來說,遺傳算法是在候選假設中找到最優假設的過程。

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.适應度共享,如果相似個體較多,則降低每個個體的适應度

繼續閱讀