2013-05-17 39 views
1

我有一個(m×n)m個實例和n個特徵的m >> n的二進制數據集。還有一個目標變量或類屬性,也是二元的。我想用遺傳算法做特徵選擇。我決定在GA中使用0/1個字符串,其中0表示未選擇某個功能,如果選擇了某個功能,則爲1。我生成了一組隨機K位字符串。因此,這些位串中的每個K表示可能的功能選擇。要開發適應度函數,我訓練神經網絡進行這K個功能集(型號),然後基於一個單獨的驗證集我爲每個模型創建了這個適應度函數的精確度: -遺傳算法:健身功能不能正常工作

fitness=tradeoffk*Valacc+(1-tradeoffk)*(ones(no_of_models,1)*n-featSel)/maxFeat; 

這種適應度函數就像是爲訓練傳遞的特徵數量(featSel)和報告神經網絡的驗證準確度之間的折衷。我爲tradeoffk設置了不同的值,例如0.5,0.2和0.8。

我跑了10次迭代的GA。每次迭代完成20次生成,並試圖檢查適應度函數如何增長。但是,適應度函數沒有顯着變化。在GA中,通常適應度函數預計會增長然後趨於穩定,但在這裏它的增長非常小。

例如,這是這些迭代中的一個的示例輸出: -

gen=001 avgFitness=0.808 maxFitness=0.918 
gen=002 avgFitness=0.808 maxFitness=0.918 
gen=003 avgFitness=0.815 maxFitness=0.918 
gen=004 avgFitness=0.815 maxFitness=0.918 
gen=005 avgFitness=0.817 maxFitness=0.918 
gen=006 avgFitness=0.818 maxFitness=0.918 
gen=007 avgFitness=0.818 maxFitness=0.918 
gen=008 avgFitness=0.819 maxFitness=0.918 
gen=009 avgFitness=0.819 maxFitness=0.918 
gen=010 avgFitness=0.819 maxFitness=0.918 
gen=011 avgFitness=0.819 maxFitness=0.918 
gen=012 avgFitness=0.819 maxFitness=0.918 
gen=013 avgFitness=0.819 maxFitness=0.918 
gen=014 avgFitness=0.819 maxFitness=0.918 
gen=015 avgFitness=0.819 maxFitness=0.918 
gen=016 avgFitness=0.819 maxFitness=0.918 
gen=017 avgFitness=0.819 maxFitness=0.918 

此外,神經網絡需要大量的時間來訓練(> 2小時20代) 任何人都可以得到進一步的建議,以及哪裏可能出錯?!

回答

0

您可以使用linear-discriminant analysis (LDA)作爲驗證模型而不是神經網絡。培訓要快得多,但當然不能代表非線性關係。你有沒有試過genetic programming?它內置了功能選擇功能,因爲它試圖同時構建模型和選擇功能。你可以給HeuristicLab一個嘗試,它有一個相當強大的遺傳編程實現,也包括分類。

+0

好的。我不確定數據是否具有線性或非線性關係,我只知道它是一個二進制數據集,其中類變量也是二進制數據集。在這種情況下,遺傳算法是否工作得很好,以及如何對數據建模?你應該使用Linear(所以可以使用像LDA這樣的方法)或非線性方法(使用神經網絡)?我也會看看你建議的啓發式實驗室的東西。 – user76170

+0

既然你說過你有比功能更多的實例,功能選擇真的很重要嗎? – Andreas