自動化機器學習入門指南,來了

2021-02-20 數據管道

之前的工作中也有多少接觸過這個AutoML(Automated Machine Learning)的概念,簡單來說就是把模型開發的標準過程模塊化,都交給一些自動化的組件來完成,比如數據集的劃分、特徵衍生、算法選擇、模型訓練、調優、部署以及後續的監控,都「一條龍」地在AutoML實現。

從Google Cloud繪製的AutoML的工作原理圖可以看出,我們使用者只需要給其提供數據源,以及好壞樣本(或者不需要),然後後面的一切都交給AutoML組件去完成。

🚀 AutoML的關鍵節點

我們可以認識到AutoML大大降低了機器學習模型的開發門檻,但是我們還是需要了解這裡面的原理的,這裡涉及了機器學習的幾個關鍵節點的內容,需要我們特別關注。

其中最為重要的是自動化特徵工程了,一般縮寫為「Auto FE」,主要是包括了預處理、特徵選擇、特徵提取、元學習等等的操作,把每一個環節的處理邏輯寫到腳本裡,結合一些策略讓邏輯更加科學,結果更加合理。

第二個就是自動化模型選擇,也叫Automated Model Selection,簡稱AMS,就是根據實際的數據來選擇合適的算法。因為大多數的算法都是有超參數的,這時候AutoML是需要進行自動化的超參數優化的,英文叫做Hyperparameter Optimization,簡稱HPO,在學習中了解到這塊的知識研究還是蠻豐富的,主要有下面的一些方法:

基於貝葉斯優化的超參數優化 Bayesian Optimization基於進化算法的超參數優化 Evolutionary Algorithms基於本地搜索的超參數優化 Local Search基於隨機搜索的超參數優化 Random Search基於粒子群優化算法的超參數優化 Particle Swarm Optimization基於元學習的超參數優化 Meta Learning基於遷移學習的超參數優化 Transfer Learning

還有一個概念就是NAS,即Neural Architecture Search(神經網絡結構搜索),因為目前深度學習應用很廣泛了,很多時候是需要搭建一個深度神經網絡,這裡面涉及的參數是真的多,按照傳統的超參數優化的方法顯得十分吃力,所以也有了這個NAS的概念,而關於NAS的研究方法,主要有下面幾種:

基於進化算法的超參數優化 Evolutionary Algorithms基於元學習的超參數優化 Meta Learning基於遷移學習的超參數優化 Transfer Learning基於本地搜索的超參數優化 Local Search基於強化學習的超參數優化 Reinforcement Learning基於 Continuous Optimization優化📖 市面上的AutoML產品

目前AutoML工具我們可以從兩個途徑來進行獲取學習:

開源框架:如Auto-Keras、Auto-sklearn等開源工具商業服務:如Google Cloud、Microsoft Azure等

從Awesome-AutoML-Papers(https://github.com/hibayesian/awesome-automl-papers#projects)裡有一張AutoML工具的對比圖,大家可以瀏覽一波。

名稱支持類型程式語言AdaNetNASPythonAdvisorHPOPythonAMLAHPO, NASPythonATMHPOPythonAugerHPOPythonAuto-KerasNASPythonAutoML VisionNASPythonAutoML Video Intelligence
PythonAutoML Natural LanguageNASPythonAutoML TranslationNASPythonAutoML TablesAutoFE, HPOPythonauto-sklearnHPOPythonauto_mlHPOPythonBayesianOptimizationHPOPythonBayesOptHPOC++cometHPOPythonDataRobotHPOPythonDEvolNASPythonDriverless AIAutoFEPythonFAR-HOHPOPythonH2O AutoMLHPOPython, R, Java, ScalaHpBandSterHPOPythonHyperBandHPOPythonHyperoptHPOPythonHyperopt-sklearnHPOPythonHyperparameter HunterHPOPythonKatibHPOPythonMateLabsHPOPythonMilanoHPOPythonMLJARHPOPythonnasbotNASPythonneptuneHPOPythonNNIHPO, NASPythonOptunityHPOPythonR2.aiHPO-RBFOptHPOPythonRoBOHPOPythonScikit-OptimizeHPOPythonSigOptHPOPythonSMAC3HPOPythonTPOTAutoFE, HPOPythonTransmogrifAIHPOScalaTuneHPOPythonXcessivHPOPythonSmartMLHPOR 🏆 AutoML學習框架——auto-sklearn介紹與入門

這裡會簡單地講一下auto-sklearn的框架,讓大家對這個學習框架有一定的了解,接下來就會拿官方的慄子來說明一下怎麼使用,然後羅列一下這個auto-sklearn可以做什麼內容,讓大家對這個框架的功能有一定的了解。

二話不說,先在本地安裝一下這個包,直接pip install auto-sklearn走起,如果安裝失敗可能是因為缺少依賴項,可以試試:

curl https://raw.githubusercontent.com/automl/auto-sklearn/master/requirements.txt | xargs -n 1 -L 1 pip install

如果出現Failed to connect to raw.githubusercontent.com port 443: Connection refused的報錯,初步估計是DNS汙染,可以查看相關攻略:https://github.com/hawtim/blog/issues/10

如果安裝失敗,可以按照官網網站的指導再試試:https://automl.github.io/auto-sklearn/master/installation.html

相關學習傳送門:

auto-sklearn官方文檔(https://automl.github.io/auto-sklearn/master/api.html)auto-sklearn官方示例(https://automl.github.io/auto-sklearn/master/examples/index.html)

我們從上面官方文檔可以知道(可能需要番羽Q,所以我就把相關的example的code下載下來了,大家可以後臺回復「automl」獲取),auto-sklearn的功能主要有下面的截圖所示,包括分類模型、回歸模型的構建,模型評估方法的支持等,涵蓋了我們主要的基礎建模需求。

auto-sklearn顧名思義應該是和我們常用的scikit-learn有一定的關係,確實對的,auto-sklearn就是基於scikit-learn進行開發的自動化機器學習庫,所以如果我們熟悉scikit-learn的使用,那麼對於這個auto-sklearn就很好理解了的,不熟悉其實也沒有關係,也蠻簡單的,後續我拿一些小慄子來說明一下,主要圍繞兩個核心的分類接口和回歸接口API:AutoSklearnClassifier 和 AutoSklearnRegressor 。

🎯 AutoSklearnClassifier(分類)

我們直接在官方文檔裡看下這個API的參數,如下圖所示:

參數的數量還是蠻多的,我們簡單介紹兩個Parameters:

time_left_for_this_task:int類型,默認3600秒時間限制是針對模型參數搜索的,我們可以通過加大這個值來增加模型訓練的時間,有更大的機會找到更好的模型。per_run_time_limit:int類型, 默認值為參數time_left_for_this_task值的1/10這個時間限制是針對每次模型調用的,如果模型調用時間超出這個值,則會被直接終止擬合,可以適當加大這個值。

簡單調用一下:

# 導入相關包
import numpy as np
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
import warnings
from autosklearn.classification import AutoSklearnClassifier
warnings.filterwarnings('ignore')  # 忽略代碼警告

# 導入手寫數字的數據集
digits = load_digits()  # 加載數據集

# 劃分數據集為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(
    digits.data, digits.target, test_size=0.3, random_state=42)  # 切分數據集

# 調用Auto-sklearn
# 限制算法搜索最大時間,更快得到結果
auto_model = AutoSklearnClassifier(
    time_left_for_this_task=120, per_run_time_limit=10)

# 訓練模型
auto_model.fit(X_train, y_train)  
# 用測試集評估模型效果
auto_model.score(X_test, y_test)

🎯 AutoSklearnRegressor(回歸)

我們繼續看官方文檔裡的API參數,如下圖所示:

參數也是照樣很多,

time_left_for_this_task:int類型,和上面的分類API是一樣的參數per_run_time_limit:int類型,和上面的分類API是一樣的參數ensemble_size:int類型,默認是50

總結來說這兩個API的參數幾乎是一樣的,正所謂一份學習double享受,jeng!同樣的我們簡單地調用一下,這次我們用房價預測的數據集,這是一個很經典的回歸算法的數據集。

# 導入相關包
from sklearn.datasets import load_boston
from autosklearn.regression import AutoSklearnRegressor

# 導入數據集
boston = load_boston()  # 加載數據集

# 限制算法搜索最大時間,更快得到結果
auto_model = AutoSklearnRegressor(
    time_left_for_this_task=120, per_run_time_limit=10)
auto_model.fit(boston.data, boston.target)

# 查看模型效果,用R方來看
auto_model.score(boston.data, boston.target)

📖 Auto-sklearn支持的Metrics方法

我們評估一個機器學習模型的好壞需要量化的指標,而我們常用的幾個像準確率、AUC、ROC、f1等等,在這裡是否也支持呢?我們可以看看:

print("Available CLASSIFICATION metrics autosklearn.metrics.*:")
print("\t*" + "\n\t*".join(autosklearn.metrics.CLASSIFICATION_METRICS))

print("Available REGRESSION autosklearn.metrics.*:")
print("\t*" + "\n\t*".join(autosklearn.metrics.REGRESSION_METRICS))

Available CLASSIFICATION metrics autosklearn.metrics.*:
        *accuracy
        *balanced_accuracy
        *roc_auc
        *average_precision
        *log_loss
        *precision
        *precision_macro
        *precision_micro
        *precision_samples
        *precision_weighted
        *recall
        *recall_macro
        *recall_micro
        *recall_samples
        *recall_weighted
        *f1
        *f1_macro
        *f1_micro
        *f1_samples
        *f1_weighted
Available REGRESSION autosklearn.metrics.*:
        *r2
        *mean_squared_error
        *mean_absolute_error
        *median_absolute_error

我們可以看出其實大多數的評估指標都涵蓋了,具體怎麼用,建議可以去看看官方文檔看看例子~

🏆 AutoDL學習框架——auto-keras介紹與入門

介紹完了機器學習框架的原理以及其中一個產品的簡單使用,順便也介紹下深度學習的自動化機器學習框架,深度學習在近幾年十分大熱,神經網絡在很多時候的表現也是讓人吃驚,確實也很有必要去了解一下。

towardsdatascience.com

可以從上圖看出目前最流行的深度學習框架有TensorFlow、Keras和PyTorch,今天我們不展開這些框架的學習,篇幅有限也不好展開(主要是我也不熟哈哈哈),我們今天就來講講Auto-Keras的簡單使用,畢竟今天的主要還是自動化機器學習。

Auto-Keras框架是由DATA Lab開發的,由Keras官方團隊維護。它主要提供了神經結構搜索(NAS)和超參數自動優化(HPO),其後端依賴於scikit-learn、TensorFlow和PyTorch,我們還是把一些常用的地址貼一下:

官方網站:https://autokeras.com/GitHub地址:https://github.com/keras-team/autokeras

安裝的話也是比較簡單,可以使用pip的方式進行安裝,不過目前AutoKeras只支持Python >= 3.5 and TensorFlow >= 2.3.0

pip3 install git+https://github.com/keras-team/keras-tuner.git@1.0.2rc1
pip3 install autokeras

我們從官網文檔裡可以看出主要是支持圖片分類、圖片生成、文本分類、文本生成等,算是涵蓋了計算機視覺和自然語言處理的常用應用場景了。

import sys
sys.path.append("autokeras")  # 連結到 Auto-Keras 庫

🎯 ImageClassifier(圖片分類)

同樣的,我們可以看看官方文檔:

調用慄子:

我們導入自帶的MNIST手寫字符分類數據集,樣本數據形狀為28x28的灰度圖像,已經轉為了numpy數組。

# 導入相關包
import tensorflow as tf
from autokeras.image.image_supervised import ImageClassifier

# 加載數據集
(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()

# 實例化模型,verbose=True 輸出訓練過程參數
clf = ImageClassifier(verbose=True)  
# 訓練模型,最大時間設為 30 分鐘
clf.fit(X_train, y_train, time_limit=30 * 60)  
# 評估模型
clf.evaluate(X_test, y_test)  

那如果是針對那些數據集本身是圖片的呢,又可以如何操作?也可以參考下面的例子:

# 下載圖片數據
!wget -nc "https://labfile.oss.aliyuncs.com/courses/1357/load_raw_image_data.zip"
!unzip -o "load_raw_image_data.zip"  # 解壓數據

# 導入相關包
import pandas as pd
from autokeras.image.image_supervised import load_image_dataset

# 讀取數據
X_train, y_train = load_image_dataset(
       ="load_raw_image/train/label.csv", images_path="load_raw_image/train")
X_test, y_test = load_image_dataset(
    csv_file_path="load_raw_image/test/label.csv", images_path="load_raw_image/test")

# 實例化模型,verbose=True 輸出訓練過程參數
clf = ImageClassifier(verbose=True)  
# 訓練模型,最大時間設為 30 分鐘
clf.fit(X_train, y_train, time_limit=30 * 60)  
# 評估模型
clf.evaluate(X_test, y_test)  

🎯 TextClassifier(文本分類)

同樣的,我們可以看看官方文檔:

NLP有十分豐富的應用,比如文本分類、情感分析、機器翻譯、智能問答等,在Auto-Keras中也有類似的APIs可以用,我們拿其中一個文本分類預測來看看。

# 下載數據集(關於電影影評的積極與消極情緒的識別)
!wget -nc "https://labfile.oss.aliyuncs.com/courses/1357/imdb-reviews.zip"
!unzip -o "imdb-reviews.zip"

# 導入相關包
import pandas as pd
from sklearn.model_selection import train_test_split
from autokeras.text.text_supervised import TextClassifier

# 導入數據
reviews = pd.read_csv("imdb-reviews.csv")

# 劃分數據集
X_train, X_test, y_train, y_test = train_test_split(
    reviews['text'], reviews['sentiment'], test_size=0.1)
X_train.shape, X_test.shape, y_train.shape, y_test.shape
# 獨熱編碼,因為auto-kearn要求輸入的為獨熱編碼後的數組
y_train_ = pd.get_dummies(y_train).values  
y_test_ = pd.get_dummies(y_test).values

# 實例化模型,verbose=True 輸出訓練過程參數
clf = TextClassifier(verbose=True)  
clf.fit(X_train, y_train, time_limit=30 * 60) 
# 評估模型
clf.evaluate(X_test, y_test) 

(我把相關的example的code下載下來了,大家可以後臺回復「automl」獲取)

 

📖 ReferencesAwesome-AutoML-Papers(https://github.com/hibayesian/awesome-automl-papers)auto-sklearn官方文檔(https://automl.github.io/auto-sklearn/master/api.html)auto-sklearn官方示例(https://automl.github.io/auto-sklearn/master/examples/index.html)解決DNS汙染的問題(https://github.com/hawtim/blog/issues/10)

相關焦點

  • 8 個開源自動化框架,輕鬆搞定機器學習!
    自動化機器學習(AutoML)可以幫助機器學習管道中的某些關鍵組件實現自動化。其中機器學習管道包括數據理解、數據工程、特徵工程、模型訓練、超參數調整、模型監控等。該庫使用 Sklearn 估計器來處理分類和回歸問題。Auto-sklearn 庫適用於中小型數據集,不適用於大型數據集。
  • 【原創】PHP程式設計師進階學習書籍參考指南
  • 強大的 Python 任務自動化工具!invoke 十分鐘入門指南
    除了作為命令行工具,它專注於「任務執行」(task execution),可以標註和組織任務,並通過 CLI(command-line interface,即命令行界面) 和 shell 命令來執行任務。
  • 入門與精通 戰術試驗血色玫瑰簡易指南
    歡迎閱讀《崩壞3》特別企劃——這是一套教你從入門到精(beng)通(huai)的全面求生指南。從1月12日開始,艦長就能體驗到獨特的關卡【戰術試驗·血色玫瑰】,為了讓艦長更好地體驗「血色玫瑰」的角色性能,愛醬決定製作一份相關指南,下面讓我們正式開始吧。
  • 無線電頻譜機器學習系統(RFMLS)
    2.3 RFMLS的內容為了利用機器學習的進步來解決當前無線電系統中存在的問題,DARPA正在尋求利用利用機器學習來改善頻譜管理,並滿足軍事和民用通信中對無線電頻率日益增長的需求。DARPA提出的RFMLS項目是一項基礎性工作,目標是建立將現代機器學習應用於無線電頻譜領域的技術基礎。
  • 【大數據架構】Apache Flink和Apache Spark—比較指南
    本指南提供了Apache Flink和Apache Spark這兩種蓬勃發展的大數據技術在特性方面的明智比較。2. Apache Flink vs Apache Spark特性Apache FlinkApache Spark計算模型Flink基於基於操作器的計算模型。
  • RPA流程自動化機器人簡介
    RPA實施周期短、建設成本低、業務見效快,RPA自動化執行和人工處理的過程非常類似,能夠有效緩解這方面的矛盾。從最早出現RPA開始算起,可以將RPA的發展歷程分為四個階段:此階段以批處理腳本和觸發器為代表,RPA作為「助手」輔助人工完成工作,涵蓋了機器人自動化的主要功能,以及桌面自動化軟體功能。
  • 手機(安卓)自動化腳本開發線上培訓
    自己掌握技術,可以根據自己引流的需要編寫出適合自己的自動化引流腳本APP升級,自己也可以隨時進行腳本的升級來保持腳本穩定。自己掌握一門技術,不但可以接單給別人寫腳本來賺取利潤。還可以編寫出商業腳本,賣月卡,年卡來賺取腳本的使用費。你寫的腳本就是你自己的產品,可以在產品上加上自己的logo,自己的聯繫方式,自己的廣告。你自己的腳本,使用的人越多,你的個人ip就越有價值。傳播的越廣,你的個人ip就越有影響力。
  • 機器學習從入門到進階③丨假設檢驗
    在上一篇的文章中,我們討論了統計學習的關鍵概念——參數模型、訓練與測試、方差與偏差等等,今天我們再來看一看機器學習的基石概念之一假設檢驗。「A fact is a simple statement that everyone believes. It is innocent, unless found guilty.
  • 3D遊戲開發套件指南(入門篇)
    如果想要提高攻擊次數:我們可以使用接觸傷害源(Contact Damager)組件來對擁有Damageable 組件的對象造成傷害。 在此使用一個箱子和Chomper進行演示:  點擊Play,箱子會下落到在Chomper上,然後呆在那裡,什麼都沒發生。
  • 2019年8月DIY裝機指南:從入門到高端的組裝電腦主機配置推薦
    下面裝機之家分享一下2019年8月DIY裝機指南,同時也為廣大裝機用戶帶來了從入門到高端的組裝電腦主機配置推薦,價格僅提供參考。2019年8月DIY攢機指南一、DIY市場行情:1、CPU:intel的逐漸轉向九代處理器,尤其是F無內置核顯的處理器,由於性價比緣故特別受廣大用戶喜愛,intel處理器前段時間一波漲價,又降了一波,目前價格十分平穩。
  • ALPHA威脅分析平臺-武器庫【郵件自動化檢測】全新上線!
    主要功能如下:失陷情報批量查詢工具:針對辦公網、DMZ伺服器出站IP、域名、URL、批量自動化情報查詢。惡意IP批量查詢工具:針對DMZ伺服器入站IP批量自動化情報查詢。IOC自動化數據流檢測工具:利用大數據和機器學習,支持未知IP、域名、URL人工智慧定性檢測。樣本哈希批量查詢工具。
  • 機器學習入門-stacking思想和案例
    附上原作者的連結http://wulc.me/2018/01/21/stacking%20%E7%9A%84%E5%9F%BA%E6%9C%AC%E6%80%9D%E6%83%B3%E5%8F%8A%E4%BB%A3%E7%A0%81%E5%AE%9E%E7%8E%B0/本文主要介紹機器學習中的一種集成學習的方法stacking,本文首先介紹stacking這種方法的思想
  • 觀點 | AutoML、AutoKeras......這四個「Auto」的自動機器學習方法你分得清嗎?
    這個端到端的過程通常被稱為機器學習工作流(Machine Learning Pipeline)。沒有經驗法則會告訴我們該往哪個方向前進,隨著越來越多的模型不斷被開發出來,即使是選擇正確的模型這樣的工作也變得越來越困難。超參數調優通常需要遍歷所有可能的值或對其進行抽樣、嘗試。然而,這樣做也不能保證一定能找到有用的東西。在這種情況下,自動選擇和優化機器學習工作流一直是機器學習研究社區的目標之一。
  • 高級運維學習進階指南!
    4.幫助進階Ansible技能,在企業中進行Ansible自動化的可擴展設計和操作,使用更好的方法來自動執行任務並有效地使用Ansible,探索如何利用 Ansible的高級功能來執行更複雜的任務5.學會Linux常見的網絡服務的部署,並使用Ansible完成Linux網絡服務的自動化管理6.實現物理環境,虛擬環境下的Linux系統調優,性能調優,網絡調優