2012-09-17 120 views
2

我想用Matlab GPTIPS框架解決分類問題。 到目前爲止,我設法建立了合理的數據表示和適應度函數,每班的平均準確率接近65%。分類遺傳算法

我現在需要的是一些幫助有兩個難點:

  1. 我的數據是失之偏頗。基本上我解決的是二元分類問題,只有20%的數據屬於第一類,而其他80%屬於第0類。我首先使用預測的準確性作爲我的適應度函數,但它確實很糟糕。我最好現在

    健身= 0.5 *(PositivePredictiveValue + NegativePredictiveValue) - 常量* ComplexityOfSolution

請,advize,我怎樣才能提高我的功能,使數據的偏差校正。

  1. 第二個問題是過度擬合。我將數據分爲三部分:培訓(70%),測試(20%),驗證(10%)。我在訓練集上訓練每個染色體,然後在測試集上評估它的適應度函數。這個例程允許我在測試數據上達到0.82的適合人羣中最好的個體。但同一個人在驗證數據上的結果只有60%。 我在每次創建新人羣之前,爲最佳個人添加了驗證檢查。然後我將驗證集上的健身與測試集上的健身進行比較。如果差異超過5%,那麼我的健身功能會增加解決方案複雜性的懲罰。但它沒有幫助。 我也可以嘗試在每一代中評估所有具有驗證集的個人,並簡單地刪除過度配置的個人。但是,我沒有看到我的測試和驗證數據有任何區別。還有什麼可以做的呢?

UPDATE:

對於我的第二個問題,我與過度擬合在GP處理髮現大文章"Experiments on Controlling Overtting in Genetic Programming"隨着一些文章作者的觀點有令人印象深刻的檢討,大量引用了許多不同解決這個問題的方法。現在我有很多新的想法可以嘗試解決我的問題。 不幸的是,仍然無法找到任何關於選擇適當的健身功能,這將考慮到我的數據中不平衡的班級比例。

回答

2

當基線(將所有樣本與大多數樣本進行分類)爲80%時,65%的準確性非常差。您需要至少達到基線分類才能獲得比天真的更好的模型。

我不會懲罰複雜性。而是限制樹的大小(如果可能的話)。您可以在運行過程中識別出更簡單的模型,例如將質量和複雜度作爲其兩個適應值存儲在模型的帕累託前沿。

HeuristicLab我們已經集成了基於GP的分類,可以做這些事情。有幾種選擇:您可以選擇使用MSE進行分類或R2。在最新的中繼線構建中,還有一個評估者可以直接優化精度(精確地說,它可以優化分類處罰)。優化MSE意味着它爲每個類分配一個值(1,2,3,...)並嘗試從該值中最小化均方誤差。起初這可能看起來並不理想,但起作用。直接優化精度可能會導致更快的過擬合。還有一個公式簡化器,它允許您修剪和縮小公式(並查看其效果)。

此外,是否需要GP?你有沒有試過隨機森林分類或支持向量機? RF非常快,通常工作得非常好。

+0

感謝您的回答!是的,我嘗試了幾乎所有常用算法(RF,CART,BayesNet,NN,kNN,SVM等)。我無法讓他們工作。我現在在做什麼是建立一組GP樹,其中每棵樹的結果代表新特徵。然後我在這個新的特徵空間中應用簡單的kNN分類。到目前爲止,我的驗證數據達到了0.70。現在我正在使用k-nn原型數據集添加數據集縮減。希望它能加快整個GP的搜索週期,並且從數據中去除一些噪音。 – GrayR

+0

另外,對於原始帖子中的錯誤65%不準確,其(PPV + NPV)/ 2,實際上我以85-90%的準確度對「0」進行分類,對50-55%進行「1」分類。我一定會更加註意複雜性的懲罰。實際上我必須添加它才能在某個時候實施更簡單的模型,但也許您更直接的方法會更好。現在最讓我感到不安的是過度配合,因爲它阻止我過早地從不斷髮展的人羣中解放出來。是否可以刪除過度配置的個人,或者直到最後才能觸摸驗證集? – GrayR

+0

我會接受這個答案,因爲帕累託前面的建議。目前它允許我將我的健身率從0.65提高到0.75。從不同的文章中獲得的其他技術(我嘗試過5種不同的方法來處理過度擬合)並沒有給出如此明顯的改進。 – GrayR