天天看點

AI平台-AutoSKlearn【AutoML】1. AutoSKlearn是什麼?2. autosklearn特點:3. 參考資料

1. AutoSKlearn是什麼?

傳統的機器學習任務從開始到模組化的一般流程是:擷取資料 -> 資料預處理 -> 訓練模組化 -> 模型評估 -> 預測,分類。本文我們将依據傳統機器學習的流程,看看在每一步流程中都有哪些常用的函數以及它們的用法是怎麼樣的。希望你看完這篇文章可以最為快速的開始你的學習任務。

Autosklearn是Hutter等人設計的自動調參架構,其核心是使用SMAC算法,一種采用黑箱調優的算法,對超參進行疊代優化進而進一步選出能夠使得在這種參數下,模型的某種名額最好的超參。為了更進一步高效地尋找到最有的超參,autosklearn還引入了metalearning等過程加速超參搜尋。除了黑箱調優算法外,autosklearn還做了特征工程和資料工程,進而實作了部分的機器學習自動化。從使用者的角度看,在給定一個資料集和期盼最小化的名額(如auc,logloss等)的情況下,autosklearn完全可以出給适當的模型和對應的輸入超參,使得對應的名額在指定資料集下最小。

Auto-sklean 是基于Auto-Weka(

https://www.automl.org/automl/autoweka/

)使用的 CASH(組合算法選擇和超參數優化)問題的定義以及和 AzureAutomated ML 相同的思路建構的:他們考慮同時選擇一個學習算法和設定其超參數的問題。他們提出的主要差別是将兩個額外的步驟合并到主程序中:一開始是元學習步驟,最後是自動化內建構造步驟,詳情請參閱論文《Efficient and Robust Automated Machine Learning》。

AI平台-AutoSKlearn【AutoML】1. AutoSKlearn是什麼?2. autosklearn特點:3. 參考資料

Aotusklearn在一定程度上滿足了自動機器學習的要求。單純就模型結果上看,即便輸入給autosklearn的是一組沒有經過很詳細特征處理的資料集,輸出結構都會比目前市場上的一些自動調優架構好。下圖就是我們将一些資料集作為基準,使用autosklearn和目前市場上某款自動調優工具的效果對比,這兩款産品使用了相同的時間資源并且指定了同一種模型。這裡我們使用auc和logloss作為我們的目标名額。标黃的部分是對比優異的項。

這裡我們可以看到,autosklearn在大多數資料集和目标名額上,都比市面上這款自動調優産品要好很多。那麼autosklean到底做了那些操作,使得一個開源會比商業軟體取得更好的結果呢?

整體上說,autosklearn的工作流程如下:

這裡我們可以看到autosklearn除了疊代調整輸入模型的超參之外,還疊代調整了輸入模型所需要的資料處理方法和特征處理方法和參數。最終通過內建不同機器學習模型完成整個自動學習過程。下面我們就會具體讨論每個步驟到底做了些怎麼樣的操作。

Metalearning:

Metalearning操作的目的是為整個疊代選取一個接近收斂點的初值,進而加快SMAC算法的收斂速度。

在autosklearn中,作者将已有的metalearning資料庫存入以下所示的檔案夾中,每個檔案夾内都存有名額+模型特征+任務類型所對應的超參初始值。這些初始值都是作者通過優化其他類似資料集後(其中可能是手動優化的結果)總結出來的資料庫。通過選擇與目前訓練資料接近的先前的k個優化結果作為初始值,加入到SMAC算法中進行優化,進而加速SMAC收斂的速度。

Metalearning并不能從根本上提升SMAC算法所給出的最優點的性能。但是一個較好的初始值可以大大加快SMAC找到最優點的速度。進而減少時間資源的消耗。同時,當所給時間不足時,autosklearn會直接給出metalearning的值,這個值雖然不是SMAC能給出最好的結果,但是依舊是一個效果不錯的超參選擇。

資料預處理和特征預處理:

根們我們已有的經驗可以看出,資料預處理和特征預處理對于最後結果來說至關重要。很多kaggle競賽的核心步驟的大部分時間都花在了分析資料,預處理資料集和特征預處理上。如果不經過相關的資料預處理,特征預處理,即便是SMAC算法也難以找到一個可以使得名額很低的超參和模型。

在資料預處理方面SMAC算法主要做了如下四種預處理:

其中balance操作隻對特定的one_hot編碼選項有效。

在特征預處理方面,SMAC最多做了如下記住特征預處理:

其中除了标紅的kernel_pca, kitchen_sinks和nystroem_sampler以外,所有其他特征預處理隻對multinomial_nb模型有效。

由此可見,實際上autosklearn并沒有對資料集做什麼“專業級”的預處理,比如分析資料産生新特征等等。但是autosklearn不同的是他将每種預處理方法的不同參數也帶入smac中進行調優,進而充分利用了每種預處理帶來的性能提升,進而得到了比市場上大多數自動調優架構更好的結果。

SMAC:

SMAC算法是一種強大的黑箱條又算法,如果單講SMAC算法可以另起一個主題進行分析。這裡考慮到這篇文章的目的是分享autosklearn做了些什麼操作,而不是分解每個操作的具體步驟。是以這裡隻簡單體描述一下SMAC算法的流程。

SMAC是SMBO算法的一種算法。SMBO算法的每個疊代步可以分為如下的步驟:1.依據曆史資訊構造(超參,性能)的性能函數,2.依照性能函數,選取最有可能是最小值的超參,并将這個點對應性能算出。3.将新的(超參,性能)加入曆史資訊中,進行重複的疊代。

将SMBO算法執行個體化到SMAC算法,所對應的是則是:1.性能模型是随機森林的高斯過程模型。2.通過局部搜尋和全局的随即選點,算出多個最有可能達到最小值的點進行進一步篩選。3.篩選點的過程是一個bandit問題,這裡SMAC算法通過intensify過程使用經可能少的資源找到最有超參。

內建模型:

內建模型步是整個Autosklearn除去訓練模型外,幾乎唯一的多線程部分。除此之外,autosklearn都處在單線程的運轉狀态。

Autosklearn的內建模型方法使用了Rich Caruana在04年icml上所提出的內建模型方法,具體操作如下:

1.選取一張50個空白項的表,其中表中的每一項權重為0.02。

2.從已有的多個模型中選取一個可以提升表性能的模型加入到表中或替換性能不佳的模型。

3.重複第二步直到達到最大的疊代步驟。

4.将表中相同模型的權重累加得到此模型在內建模型中的權重。

2. autosklearn特點:

auto-sklearnAutoML 方法

該方法使用了全部 38 個元特征來描述資料集,包括簡單的、資訊論的和統計的元特征,如資料點的數量、特征和分類,以及資料偏度和目标的熵。利用這些資訊,他們會選擇 k 個采樣點作為貝葉斯優化的初始采樣點(seed)。注意,這種元學習方法通過使用資料集存儲庫來獲得強大的功能(就像 Azure Automated ML 那樣)。

在完成貝葉斯優化之後,它們會建構一個由所有嘗試過的模型組成的內建模型。這一步的思路是将訓練每個模型所做的努力都存儲下來。他們沒有抛棄這些模型而選擇更好的模型,而是将它們存儲起來,最終建構出一個它們的內建模型。這種自動內建構造方法避免了讓自己陷入單個超參數的設定中,是以魯棒性更強(并且不容易過拟合)。他們使用內建選擇(這個貪婪過程從空內建開始,疊代地添加能夠最大化內建驗證性能的模型)來建構內建模型。

AutoSKlearn效果好的原因:

  1. autosklearn通過metalearning在較短時間内找到了相對較好的配置,并以此為基準進行疊代容易超過很多現有工具和平台。
  2. 盡管特征工程和資料預處理方法相對簡單,但是每個處理的參數都帶入了SMAC整個疊代中進行參數調優,進而将每個簡單的處理效果發揮到了極緻。

3. 參考資料

  1. 論文《Efficient and Robust Automated Machine Learning》
  2. https://automl.github.io/auto-sklearn/stable/

繼續閱讀