12.13 機器學習:AutoGluon介紹及示例

介紹AutoGluon

AutoGluon是一個新的開源 AutoML庫,可針對涉及圖像,文本和表格數據集的實際應用,自動進行深度學習(DL)和機器學習(ML)。無論您是機器學習新手還是經驗豐富的從業人員,AutoGluon都能簡化您的工作流程。使用AutoGluon,您可以僅使用幾行Python代碼來開發和完善深度學習模型。

機器學習:AutoGluon介紹及示例

主要特點

從歷史上看,要創建機器學習模型,需要大量的背景知識,經驗和人力。數據準備,特徵工程,驗證拆分,缺失值處理和模型選擇只是機器學習應用程序必須解決的許多任務中的一部分。一個特別困難的任務是選擇超參數。

超參數代表用戶在構建模型時必須做出的許多選擇,例如數據處理步驟,神經網絡體系結構以及訓練期間使用的優化程序。每個超參數都以不透明的方式影響機器學習模型的預測性能,而越強大的模型(如深度神經網絡)需要調優的超參數越多。輕微的超參數修改可能會顯著地改變模型的質量。由於通常不清楚如何做出這些決策,開發人員通常手動調整他們的ML管道的各個方面,這可能需要多次迭代和艱苦的人力工作。
AutoGluon將前面提到的所有任務都自動化,從而創造了一種真正無需手動的體驗。AutoGluon將利用可用的計算資源來找到最強的ML方法。
AutoGluon使您能夠自動實現圖像分類、對象檢測、文本分類等監督學習任務。每個任務的超參數通過貝葉斯優化、超帶和強化學習等優化算法自動選擇。使用AutoGluon,您不必熟悉底層模型,因為所有超參數都將自動調優到默認範圍內,這些默認範圍對於特定的任務和模型來說性能良好。


對於專業的ML從業人員,AutoGluon允許輕鬆地自定義此過程。例如,您可以為某些超參數指定要值範圍,也可以使用AutoGluon自動調整自定義模型的各個方面。如果您可以訪問多臺機器,AutoGluon可以很容易地將其計算分佈到這些機器上,以便更快地返回經過訓練的模型。

AutoGluon示例

安裝

# CUDA 10.0 and a GPU for object detection is recommended
# We install MXNet to utilize deep learning models
pip install --upgrade mxnet-cu100
pip install autogluon
機器學習:AutoGluon介紹及示例

對象檢測示例

我們以對象檢測的任務為例來演示AutoGluon的簡單接口。在對象檢測中,不僅要識別圖像中的對象,而且要用邊界框定位它們。

我們將使用AutoGluon在一個用於演示目的(以確保快速運行時)的數據集上訓練一個對象檢測器。數據集是使用VOC數據集的摩托車類別生成的。在下面的Python代碼中,我們首先導入AutoGluon,將將對象檢測指定為任務,將數據下載到我們的機器上,最後將數據加載到Python中:

import autogluon as ag
from autogluon import ObjectDetection as task
url = 'https://autogluon.s3.amazonaws.com/datasets/tiny_motorbike.zip'
data_dir = ag.unzip(ag.download(url))
dataset = task.Dataset(data_dir, classes=('motorbike',))
機器學習:AutoGluon介紹及示例

接下來,我們可以通過調用fit()函數來使用AutoGluon訓練一個檢測器模型:

detector = task.fit(dataset)

在這個對fit()的調用中,AutoGluon在不同的網絡配置和優化超參數下訓練許多模型,選擇其中最好的作為最終返回的檢測器。在沒有任何用戶輸入的情況下,對fit()的調用還自動利用了最新的深度學習技術,例如預訓練的YOLOv3網絡的遷移學習。我們可以使用predict()方法在新圖像上測試訓練過的檢測器:

url = 'https://autogluon.s3.amazonaws.com/images/object_detection_example.png'
filename = ag.download(url)
index, probabilities, locations = detector.predict(filename)
機器學習:AutoGluon介紹及示例

機器學習:AutoGluon介紹及示例

AutoGluon的predict函數自動加載測試圖像,並輸出每個被檢測對象的預測對象類別、類概率和邊界框位置。將自動生成如上所示的可視化圖像。

表格數據示例

最常見的數據形式是表格數據集。它們由結構化數據組成,通常位於CSV文件或數據庫中。在表格數據集中,每一列代表某個變量的測量值(也稱為特徵),每一行代表單獨的數據點。AutoGluon可用於訓練基於同一行中的其他列來預測特定列值的模型,並且能夠泛化到以前未見過的實例。


我們將要訓練的數據集是成人收入分類數據集。該數據集包含約48,000個人的信息,包括數字特徵(例如年齡)和分類特徵(例如職業)。該數據集通常用於預測個人收入。在此示例中,我們將預測一個人的年收入是否超過50,000美元。我們將使用80%的數據來訓練,並使用20%的數據來測試生成的AutoGluon預測器。使用AutoGluon,無需指定驗證數據。AutoGluon將使用提供的訓練數據最優地分配驗證集。
舉例來說,在Python代碼中,首先導入AutoGluon並指定一個任務,在這個任務中,我們將使用TabularPrediction處理表格數據。然後我們從S3上的CSV文件加載數據集。只需調用一次fit(), AutoGluon就可以處理數據並訓練一個稱為“預測器”的ML模型集合,該模型能夠預測數據中的“類”變量。它將使用其他列作為預測特徵,如個人的年齡、職業和教育程度。這個模型的集合包括ML中經過測試的算法,如LightGBM、CatBoost和深度神經網絡,它們始終優於邏輯迴歸等更傳統的ML模型。
注意,我們不需要進行任何數據處理,特徵工程設計,甚至不需要聲明預測問題的類型。AutoGluon自動準備數據並推斷我們的問題是迴歸還是分類(包括它是二元還是多元)。經過訓練的預測器模型將保存到task.fit()調用中指定的位置。

from autogluon import TabularPrediction as task
train_path = 'https://autogluon.s3.amazonaws.com/datasets/AdultIncomeBinaryClassification/train_data.csv'
train_data = task.Dataset(file_path=train_path)

predictor = task.fit(train_data, label='class', output_directory='ag-example-out/')
機器學習:AutoGluon介紹及示例

現在我們的預測器模型已經訓練完畢,我們將對以前看不見的測試數據進行預測。我們可以直接使用返回的預測變量,也可以從指定的輸出目錄中加載它。

predictor = task.load('ag-example-out/')
test_path = 'https://autogluon.s3.amazonaws.com/datasets/AdultIncomeBinaryClassification/test_data.csv'
test_data = task.Dataset(file_path=test_path)
y_test = test_data['class']
test_data_nolabel = test_data.drop(labels=['class'],axis=1)
y_pred = predictor.predict(test_data_nolabel)
y_pred_proba = predictor.predict_proba(test_data_nolabel)
print(list(y_pred[:5]))
print(list(y_pred_proba[:5]))
機器學習:AutoGluon介紹及示例

['<= 50K','<= 50K','> 50K','<= 50K','<= 50K']
[0.077471,0.0093894,0.973065,0.0021249,0.001387]
現在我們來看一下模型排行榜:

leaderboard = predictor.leaderboard(test_data)
機器學習:AutoGluon介紹及示例

AutoGluon的模型排行榜

該排行榜顯示了AutoGluon訓練的每個模型,它們在測試和驗證數據上的得分以及訓練時間(以秒為單位)。可以看出,weighted_ensemble在驗證和測試集上表現得最好,達到了87.76%的準確性。

最後

在本文中,我們介紹了AutoGluon,它旨在為ML專家和新手提供最佳的機器學習和深度學習體驗。


分享到:


相關文章: