用遺傳演算法進行特徵選擇
文章目錄
一、問題舉例
要求:在Sonar和Iris資料集上進行驗證遺傳演算法特徵選擇效能
對比演算法:順序前進法和順序後退法
特徵選擇由類別可分性判據+搜尋演算法實現
二、演算法描述
1、基於類內類間距離的可分性判據
要進行特徵選擇,首先要確定選擇的準則,也就是如何評價選出的一組特徵。確定了評價準則後,特徵選擇問題就變成從D個特徵中選出使準則函式最優的d個特徵(d < D)。
Fisher線性判別採用了使樣本投影到一維後類內離散度儘可能小,類間離散度儘可能大的準則來確定最佳的投影方向,這其實就是一個直觀的類別可分性判據。可以用兩類中的任意兩兩樣本之間的距離的平均來代表兩個類之間的距離,現在可以將其推導到多類情況。
令 x_k^((i)), x_l^((j)) 分別為 ω_i 類及 ω_i 類中的D維特徵向量,δ(x_k((i))+x_l((j)) ) 為這兩個向量間的距離,則各類特徵向量之間的平均距離為
式中c為類別數,ni為 ωi類中的樣本數,nj為 ωj類中的樣本數,Pi 、Pj是相應類別的先驗概率。
多維空間中兩個向量之間有很多種距離度量,在歐式距離情況下有
用 m_i表示第i類樣本集的均值向量
用 ??表示所有各類的樣本集的總平均向量
將上述式子代入到平均距離的公式得
也可以用下面定義的矩陣寫出 Jd(x)的表示式,令
因為要保證類間離散度儘可能大,類內離散度儘可能小,故定義以下距離判據
基於距離的可分性判據定義直觀、易於實現,因此比較常用。沒有直接考慮 樣本的分佈情況,很難在理論上建立起它們與分類錯誤率的聯絡,而且當兩類樣 本的分佈有重疊時,這些判據不能反映重疊的情況。為了簡化計算,採用基於類 內類間距離的可分性判據,且根據公式可知,Jd(x)的值越大,表示特徵的可分離性越好.
2、遺傳演算法(Genetic Algorithm)
遺傳演算法把候選物件編碼為一條染色體(chromesome),在特徵選擇中,如 果目標是從 D 個特徵中選擇 d 個,則把所有特徵描述為一條由 D 個 0/1 字元組 成的字串,0 代表該特徵沒有被選中,1 代表該特徵被選中,這個字串就叫 做染色體,記作 m。顯然,要求的是一條有且僅有 d 個 1 的染色體,這樣的染色 體共有 ?? ?種。 優化的目標被描述成適應度(fitness)函式,每一條染色體對應一個適應 度值 f(m)。可以用前面定義的基於類內類間距離的類別可分性判據 Jd(x)作 為適應度。
遺傳演算法具體步驟如下
1) 初始化種群
以 sonar 資料集為例,一條染色體為一個 1*60 維的行向量,假設我們要從 60 個特徵中選 30 個特徵,則初始化的一個染色體為將一個零向量的隨機 30 位 變成 1,這樣就從 60 維特徵中隨機選了 30 維,如下所示
重複上述過程 n 次,則可以得到一個有 n 條染色體的初代種群 M(0),每條 染色體都不盡相同。
2)計算當前種群 M(t)中每條染色體的適應度值 f(m)
將每一條染色體的適應度值(fitness)求出,即將每一條染色體所代表的 d 維特徵選出,將原 Sonar 資料集變成一個 208*d 維的矩陣,計算出基於類內類 間距離的可分性判據 Jd(x),作為該染色體的適應度值 f(m)。
經過 n 次計算之後,可以得到每條染色體的適應度值。
3)基於適應度值的選擇
按照選擇概率 p(f(m))對種群中的染色體進行取樣,由取樣出的染色體經過 一定的操作繁殖出下一代染色體,組成下一代的種群 M(t+1)。
將種群中每條染色體的適應度值逐個累加,得到一些從 0 到 1 的區間,如圖所示
假設一個種群有 4 個條染色體,每條染色體的適應度值為 0.14、0.49、0.06、 0.31,則將這些適應度值逐個累加起來,得到四個區間(0,0.14)、(0.14,0.63)、 (0.63,0.69)、( 0.69,1),每個區間的長度所代表著對應染色體的適應度值。 我們從 0 到 1 中取一個隨機數,該數落在哪個區間,就取哪條染色體。重複 n 次, 得到了基於上一代種群適應度值的新子代種群 M(t+1), 而且保證了種群的染色 體數目不改變,恆為 n。
4)交叉
首先將一個種群平均分成兩部分,稱為兩個父代種群,將這兩個父代種群隨 機打亂,再從兩個父代中分別取一個染色體進行交叉,這樣就完成了一次隨機匹 配的過程。
為了使交叉之後的染色體特徵維數不變,採用瞭如下方法:
先從一個父代染色體中隨機選取一個片段(長度為 k),統計該片段中有幾 個為 1 的基因,再從與之匹配的父代染色體中尋找長度相同、1 基因數目相同的片段,若找到,則進行交叉操作;若未找到,則尋找下一對父代染色體,直到將 所有父代種群遍歷完畢。
5)變異
基因突變是染色體的某一個位點上基因的改變。同樣地,為了使變異之後染 色體中特徵數量不變,採用了以下方法:
先按一定的概率(稱為變異概率)選擇是否進行變異操作,若是,則隨機從 種群中選擇一個個體,再隨機地選擇一個基因進行反轉,若該基因由 1 變為了0, 則再隨機選一個 0 變成 1,反之也執行同樣的操作。直至遍歷完種群中所有的個 體。這樣就能保證每個染色體的特徵個數不會被改變。
6)重複迭代
在進行完選擇、交叉、和變異操作之後,上一代的種群 M(t)已經變成了新 一代的種群 M(t+1)。重複過程(2),在遺傳演算法迭代的過程中,種群中的染色 體會趨於所選特徵數中的最優解,達到一定的迭代次數 t 後,演算法停止,輸出最 終種群中適應度值最大的染色體,即完成了在 D 維特徵中選擇 d 個最優的特徵。
3、順序前進法和順序後退法
順序前進法是一種自底向上的方法。第一個特徵選擇單獨最優的特徵,第二 個特徵從其餘所有特徵中選擇與第一個特徵組合在一起後準則最優的特徵,後面 的每一個特徵都選擇與已經入選的特徵組合起來最優的特徵。
順序後退法是一種從頂向下的方法,與順序前進法相對應。從所有特徵逐一 剔除不被選中的特徵。每次剔除的特徵都是使得剩餘的特徵的準則函式值最優的 特徵。
三、結果
1、在 sonar 資料集上驗證遺傳演算法
首先看在取 30 維特徵的時候,隨著遺傳演算法的迭代,每一代種群的適應度 值收斂情況
從圖中可以很明顯地看出,隨著遺傳演算法迭代次數的增加,每一代種群的適 應度值在逐漸變大。當迭代次數達到 60 次的時候,種群中的最大適應度值趨於 最大,在之後收斂與 0.07 左右.
經過遺傳演算法迭代 150 次求得的最優種群如下圖
圖中紅色代表 0,藍色代表 1,橫座標表示特徵,縱座標表示每個染色體。 圖中只顯示了一部分。可以看見,在迭代後,每個個體所選擇的特徵趨於一致。
所選出的適應度值最優的染色體和特徵為
現在擴充套件到選擇其他個數的特徵的情況,將 d 從 1 取到 60,每個 d 都對應 著一個最優適應度值,現橫向將其比較
從圖中可以看出,用遺傳演算法從 60 維中取 1 到 5 維的時候得出的最優染色 體適應度值最大,在 20 維之後適應度值呈現平穩下降的趨勢,最終收斂於 0.03 左右。
2、在 Iris 資料集上驗證遺傳演算法
由於 Iris 資料集的特徵只有 4 維,特徵選擇的情況較簡單,這裡不再贅述。
3、順序前進法和順序後退法
以 Sonar 資料集為例,驗證從 60 維中選擇 30 維特徵的選擇情況。
5、對比演算法:順序前進法和順序後退法
以 Sonar 資料集為例,從 60 維特徵中取 1 到 10 維,分別看遺傳演算法、順序 前進法、順序後退法的每一維最優適應度值
四、總結
1、遺傳演算法作為一種解決最優化的一種搜尋啟發式演算法,是進化演算法的一 種,在選擇特徵方面具有顯著效果。隨著遺傳演算法迭代次數的增加,每一代種群 的適應度值逐漸收斂於區域性最優解,從而能夠找到所選擇的最優特徵。
2、順序前進法與單獨最優特徵的選擇方法相比,考慮了一定的特徵間組合 的因素,但是其第一個特徵仍是僅靠單個特徵的準則來選擇的,而且每個特徵一旦入選 後就無法再剔除,即使它與後面選擇的特徵並不是最優的組合。
3、順序後退法也考慮了特徵間的組合,但是由於是自頂向下的方法,很多 進行高維空間進行,計算量比順序前進法大些。而且順序後退法在一旦剔除了某 一特徵後就無法再把它選入。
4、通過上圖的對比可以看出,遺傳演算法和順序前進法選出的最優染色體的 適應度值受維數影響較大,但遺傳演算法的適應度值要大於順序前進法。順序後退 法選出的最優染色體的適應度值不但不受維數影響,而且都要大於遺傳演算法。得 出的結果為:順序後退法>遺傳演算法>順序前進法。
五、程式碼
實驗環境Python3.6
GitHub地址如下
Pattern recognition / GA
https://github.com/Fangzhenxuan/AI_Projects.git
相關文章
- 特徵工程 特徵選擇 reliefF演算法特徵工程演算法
- 【智慧優化演算法】遺傳演算法的精英選擇策略、期望選擇策略優化演算法
- 特徵工程之特徵選擇特徵工程
- 用遺傳演算法進行智慧排課,相信老師會很喜歡演算法
- Relief 特徵選擇演算法簡單介紹特徵演算法
- xgboost 特徵選擇,篩選特徵的正要性特徵
- 基於Python的遺傳演算法特徵約簡(附程式碼)Python演算法特徵
- 遺傳演算法演算法
- 特徵選擇和特徵生成問題初探特徵
- 使用MPI並行化遺傳演算法框架GAFT並行演算法框架
- 特徵選擇技術總結特徵
- RF、GBDT、XGboost特徵選擇方法特徵
- 決策樹模型(2)特徵選擇模型特徵
- 遺傳演算法(一):Basic GA演算法
- 遺傳演算法的基本框架演算法框架
- python遺傳演算法(詳解)Python演算法
- xgboost 特徵重要性選擇 / 看所有特徵哪個重要特徵
- 遺傳演算法的改進——跳出區域性最優機制的研究(選擇運算元、交叉運算元、變異運算元的改進)演算法
- 用6行Python程式碼實現選擇性排序演算法Python排序演算法
- 基於條件熵的特徵選擇熵特徵
- 如何學習python遺傳演算法?Python演算法
- 人工智慧 (13) 遺傳演算法人工智慧演算法
- 10分鐘搞懂遺傳演算法演算法
- 專欄 | 基於 Jupyter 的特徵工程手冊:特徵選擇(五)特徵工程
- 專欄 | 基於 Jupyter 的特徵工程手冊:特徵選擇(四)特徵工程
- 專欄 | 基於 Jupyter 的特徵工程手冊:特徵選擇(一)特徵工程
- 專欄 | 基於 Jupyter 的特徵工程手冊:特徵選擇(二)特徵工程
- 專欄 | 基於 Jupyter 的特徵工程手冊:特徵選擇(三)特徵工程
- 用xgboost模型對特徵重要性進行排序模型特徵排序
- 選擇GoDaddy,輕鬆進行域名轉移Go
- 如何進行機器學習框架選擇機器學習框架
- ch11 特徵選擇與稀疏學習特徵
- 遺傳演算法詳解與實驗演算法
- 遺傳演算法解決TSP問題演算法
- 遺傳演算法組卷使用心得演算法
- 透過MATLAB分別對比二進位制編碼遺傳最佳化演算法和實數編碼遺傳最佳化演算法Matlab演算法
- 一文看懂人工智慧裡的演算法(4個特徵+3個演算法選擇 Tips)人工智慧演算法特徵
- 為什麼要選擇代理來進行抓取?