2016-02-13 60 views

回答

0

如果您的目標是隻選擇最相關的屬性,那麼您絕對可以依賴遺傳算法,其中您的遺傳表示(也稱爲「遺傳密碼」或「染色體」)是一個二進制字符串。這意味着某個屬性可以存在(選擇)或不存在(未選中)。

你的遺傳密碼確實將是長度爲10的二進制字符串,你可以通過運行下面的循環選擇屬性的最佳設置:

  1. 導入原始數據集
  2. 從數據集選擇重要的特徵(根據在步驟#2(*)
  3. 列車選擇的特徵,在步驟#1由遺傳密碼給出)
  4. 收縮數據集(進口)和預測的分類
  5. 評估適應度函數(例如錯誤率)
  6. 轉到第2步,直到收斂(即幾代人的最大數目已創建)

所以GA做什麼,在更實際的方面,就是要創造N第一人口個人。對於每個人來說,由於這是第一批人羣,遺傳密碼在Matlab中默認是純隨機的(或者你可以編寫一個解釋如何選擇初始羣體的函數),並且對於每個人來說,步驟#3,#4和# 5被評估。一旦每個個體與某個適應值相匹配,GA就會通過遺傳算子(主要是交叉,精英主義和選擇)創建下一代(即下一代個體的遺傳密碼)。對於下一代個體,這樣的遺傳密碼從上一代的「最佳」(即,如果你的問題是最小化問題的最低適應值)開始評估。您可能需要檢查遺傳操作者,以及他們如何工作以更好地瞭解這種「生殖」過程。

如果你在Matlab中使用ga()函數,那麼輸入參數nvars將等於10; IntCon參數將具有值[1:10],因爲您希望它們全部爲0或1;並且輸入參數option(功能gaoptimset()的輸出將具有以下參數):上限是具有10個的向量,而下限是具有10個零的向量。 ga()函數將您的問題視爲最小化問題,所以我建議使用錯誤率作爲適應函數(或其他旨在最小化的其他方法)。
要指定一個二進制羣體,您可以依賴gaoptimset()中的PopulationType輸入,但我從未使用它,所以我建議您閱讀此功能的幫助(使用gaoptimset()您可以指定羣體中的個人數量以及GA在停止之前創建的代數......以及其他許多參數!)。 (*)注意:收縮數據集並不一定意味着您實際上通過遺傳算法刪除標記爲0的列(屬性)。這可能會弄亂模式之間的不相似性/距離評估。在評估不相似性度量時,您可以使用遺傳代碼作爲模式的權重:10-特徵模式乘以10-位遺傳密碼和將乘以零的特徵將不具有任何重要性(權重)在不相似的措施。

0

RapidMiner Studio在默認存儲庫中附帶了一些遺傳算法樣本。

//樣品/流程/ 04_Attributes/10_EvolutionaryFeatureSelection //樣品/流程/ 04_Attributes/12_EvolutionaryWeighting //樣品/流程/ 06_Meta/06_EvolutionaryParameterOptimization

Optimize Selection (Evolutionary)運營商可能是使用運營商。如果您查看該操作員的幫助,則可以從那裏加載示例流程。該過程選擇最佳屬性以最大化分類模型的性能。