<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          通過強化學習策略進行特征選擇

          共 5700字,需瀏覽 12分鐘

           ·

          2024-06-13 17:00

             
          來源:DeepHub IMBA

          本文約3000字,建議閱讀9分鐘

          本文將介紹并實現(xiàn)一種新的通過強化學習策略的特征選擇。

          特征選擇是構建機器學習模型過程中的決定性步驟。為模型和我們想要完成的任務選擇好的特征,可以提高性能。

          如果我們處理的是高維數(shù)據(jù)集,那么選擇特征就顯得尤為重要。它使模型能夠更快更好地學習。我們的想法是找到最優(yōu)數(shù)量的特征和最有意義的特征。

          在本文中,我們將介紹并實現(xiàn)一種新的通過強化學習策略的特征選擇。我們先討論強化學習,尤其是馬爾可夫決策過程。它是數(shù)據(jù)科學領域的一種非常新的方法,尤其適用于特征選擇。然后介紹它的實現(xiàn)以及如何安裝和使用Python庫(FSRLearning),最后再使用一個簡單的示例來演示這一過程。

          強化學習:特征選擇的馬爾可夫決策問題

          強化學習(RL)技術可以非常有效地解決像游戲解決這樣的問題。而強化學習的概念是基于馬爾可夫決策過程(MDP)。這里的重點不是要深入定義而是要大致了解它是如何運作的,以及它如何對我們的問題有用。

          強化學習背后的想法是代理從一個未知的環(huán)境開始,采取行動來完成任務。在代理在當前狀態(tài)和他之前選擇的行為的作用下,會更傾向于選擇一些行為。在每到達一個新狀態(tài)并采取行動時,代理都會獲得獎勵。以下是我們需要為特征選擇而定義的主要參數(shù):?

          狀態(tài)、行動、獎勵、如何選擇行動。

          首先,狀態(tài)是數(shù)據(jù)集中存在的特征子集。例如,如果數(shù)據(jù)集有三個特征(年齡,性別,身高)加上一個標簽,則可能的狀態(tài)如下:?

             
           []                                             --> Empty set                           [Age], [Gender], [Height]                       --> 1-feature set [Age, Gender], [Gender, Height], [Age, Height] --> 2-feature set [Age, Gender, Height]                           --> All-feature set

          在一個狀態(tài)中,特征的順序并不重要,我們必須把它看作一個集合,而不是一個特征列表。

          對于動作,我們可以從一個子集轉到任何一個尚未探索特性的子集。在特征選擇問題中,動作就是選擇當前狀態(tài)下尚未探索的特征,并將其添加到下一個狀態(tài)。以下是一些可能的動作:?

             
           [Age] -> [Age, Gender] [Gender, Height] -> [Age, Gender, Height]

          下面是一個不可能動作的例子:?

           [Age] -> [Age, Gender, Height] [Age, Gender] -> [Age] [Gender] -> [Gender, Gender]

          我們已經(jīng)定義了狀態(tài)和動作,還沒有定義獎勵。獎勵是一個實數(shù),用于評估狀態(tài)的質量。

          在特征選擇問題中,一個可能的獎勵是通過添加新特征而提高相同模型的準確率指標。下面是一個如何計算獎勵的例子:?

             
           [Age] --> Accuracy = 0.65 [Age, Gender] --> Accuracy = 0.76 Reward(Gender) = 0.76 - 0.65 = 0.11

          對于我們首次訪問的每個狀態(tài),都會使用一組特征來訓練一個分類器(模型)。這個值存儲在該狀態(tài)和對應的分類器中,訓練分類器的過程是費時費力的,所以我們只訓練一次。因為分類器不會考慮特征的順序,所以我們可以將這個問題視為圖而不是樹。在這個例子中,選擇“性別”作為模型的新特征的操作的獎勵是當前狀態(tài)和下一個狀態(tài)之間的準確率差值。

          在上圖中,每個特征都被映射為一個數(shù)字(“年齡”為1,“性別”為2,“身高”為3)。我們?nèi)绾螐漠斍盃顟B(tài)中選擇下一個狀態(tài)或者我們?nèi)绾翁剿鳝h(huán)境呢?

          我們必須找到最優(yōu)的方法,因為如果我們在一個有10個特征的問題中探索所有可能的特征集,那么狀態(tài)的數(shù)量將是:

           10! + 2 = 3 628 802


          這里的+2是因為考慮一個空狀態(tài)和一個包含所有可能特征的狀態(tài)。我們不可能在每個狀態(tài)下都訓練一個模型,這是不可能完成的,而且這只是有10個特征,如果有100個特征那基本上就是無解了。


          但是在強化學習方法中,我們不需要在所有的狀態(tài)下都去訓練一個模型,我們要為這個問題確定一些停止條件,比如從當前狀態(tài)隨機選擇下一個動作,概率為epsilon(介于0和1之間,通常在0.2左右),否則選擇使函數(shù)最大化的動作。對于特征選擇是每個特征對模型精度帶來獎勵的平均值。

          這里的貪心算法包含兩個步驟:?

          1、以概率為epsilon,我們在當前狀態(tài)的可能鄰居中隨機選擇下一個狀態(tài)。

          2、選擇下一個狀態(tài),使添加到當前狀態(tài)的特征對模型的精度貢獻最大。為了減少時間復雜度,可以初始化了一個包含每個特征值的列表。每當選擇一個特性時,此列表就會更新。使用以下公式,更新是非常理想的:?

          AORf:特征“f”帶來的獎勵的平均值。

          K:f被選中的次數(shù)。

          V(F):特征集合F的狀態(tài)值(為了簡單描述,本文不詳細介紹)。

          所以我們就找出哪個特征給模型帶來了最高的準確性。這就是為什么我們需要瀏覽不同的狀態(tài),在許多不同的環(huán)境中評估模型特征的最全局準確值。

          因為目標是最小化算法訪問的狀態(tài)數(shù),所以我們訪問的未訪問過的狀態(tài)越少,需要用不同特征集訓練的模型數(shù)量就越少。因為從時間和計算能力的角度來看,訓練模型以獲得精度是最昂貴方法,我們要盡量減少訓練的次數(shù)。

          最后在任何情況下,算法都會停止在最終狀態(tài)(包含所有特征的集合)而我們希望避免達到這種狀態(tài),因為用它來訓練模型是最昂貴的。

          上面就是我們針對于特征選擇的強化學習描述,下面我們將詳細介紹在python中的實現(xiàn)。

          用于特征選擇與強化學習的python庫

          有一個python庫可以讓我們直接解決這個問題。但是首先我們先準備數(shù)據(jù)

          我們直接使用UCI機器學習庫中的數(shù)據(jù):

             
           #Get the pandas DataFrame from the csv file (15 features, 690 rows) australian_data = pd.read_csv('australian_data.csv', header=None)  #DataFrame with the features X = australian_data.drop(14, axis=1)  #DataFrame with the labels y = australian_data[14]

          然后安裝我們用到的庫:

           pip install FSRLearning


          直接導入:
           from FSRLearning import Feature_Selector_RL


          Feature_Selector_RL類就可以創(chuàng)建一個特性選擇器。我們需要以下的參數(shù):


          feature_number (integer):DataFrame X中的特性數(shù)量。

          feature_structure (dictionary):用于圖實現(xiàn)的字典。

          eps (float [0;1]):隨機選擇下一狀態(tài)的概率,0為貪婪算法,1為隨機算法。

          alpha (float [0;1]):控制更新速率,0表示不更新狀態(tài),1表示經(jīng)常更新狀態(tài)。

          gamma  (float[0,1]):下一狀態(tài)觀察的調(diào)節(jié)因子,0為近視行為狀態(tài),1為遠視行為。

          nb_iter (int):遍歷圖的序列數(shù)。

          starting_state (" empty "或" random "):如果" empty ",則算法從空狀態(tài)開始,如果" random ",則算法從圖中的隨機狀態(tài)開始。

          所有參數(shù)都可以機型調(diào)節(jié),但對于大多數(shù)問題來說,迭代大約100次就可以了,而epsilon值在0.2左右通常就足夠了。起始狀態(tài)對于更有效地瀏覽圖形很有用,但它非常依賴于數(shù)據(jù)集,兩個值都可以測試。

          我們可以用下面的代碼簡單地初始化選擇器:

           fsrl_obj = Feature_Selector_RL(feature_number=14, nb_iter=100)


          與大多數(shù)ML庫相同,訓練算法非常簡單:

           results = fsrl_obj.fit_predict(X, y)


          下面是輸出的一個例子:?


          輸出是一個5元組,如下所示:?

          DataFrame X中特性的索引(類似于映射)。

          特征被觀察的次數(shù)。

          所有迭代后特征帶來的獎勵的平均值。

          從最不重要到最重要的特征排序(這里2是最不重要的特征,7是最重要的特征)。

          全局訪問的狀態(tài)數(shù)。

          還可以與Scikit-Learn的RFE選擇器進行比較。它將X, y和選擇器的結果作為輸入。

           fsrl_obj.compare_with_benchmark(Xyresults)


          輸出是在RFE和FSRLearning的全局度量的每一步選擇之后的結果。它還輸出模型精度的可視化比較,其中x軸表示所選特征的數(shù)量,y軸表示精度。兩條水平線是每種方法的準確度中值。

             
           Average benchmark accuracy : 0.854251012145749, rl accuracy : 0.8674089068825909 Median benchmark accuracy : 0.8552631578947368, rl accuracy : 0.868421052631579 Probability to get a set of variable with a better metric than RFE : 1.0 Area between the two curves : 0.17105263157894512

          可以看到RL方法總是為模型提供比RFE更好的特征集。

          另一個有趣的方法是get_plot_ratio_exploration。它繪制了一個圖,比較一個精確迭代序列中已經(jīng)訪問節(jié)點和訪問節(jié)點的數(shù)量。

          由于設置了停止條件,算法的時間復雜度呈指數(shù)級降低。即使特征的數(shù)量很大,收斂性也會很快被發(fā)現(xiàn)。下面的圖表示一定大小的集合被訪問的次數(shù)。

          在所有迭代中,算法訪問包含6個或更少變量的狀態(tài)。在6個變量之外,我們可以看到達到的狀態(tài)數(shù)量正在減少。這是一個很好的行為,因為用小的特征集訓練模型比用大的特征集訓練模型要快。

          總結

          我們可以看到RL方法對于最大化模型的度量是非常有效的。它總是很快地收斂到一個有趣的特性子集。該方法在使用FSRLearning庫的ML項目中非常容易和快速地實現(xiàn)。

          如果你對這個方法比較感興趣,可以看看下面兩篇論文:

          Using reinforcement learning to find an optimal set of features

          https://www.sciencedirect.com/science/article/pii/S0898122113004495

          FEATURE SELECTION USING REINFORCEMENT LEARNING

          https://arxiv.org/abs/2101.09460


          編輯:黃繼彥
          校對:王欣

          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  精品国无人区一品二品三品 | 色偷亚洲 | 日韩美女黄网站 | 亚洲一级黄色视频在线观看 | 六月丁香综合在线 |