AutoML領(lǐng)域開源開發(fā)利器AutoGloon之實戰(zhàn)演練 原創(chuàng)
通過本文,你將了解如何借助開源庫AutoGloon成功勝出Kaggle競賽并學(xué)習(xí)擊敗其他對手的技巧。此外,你還會了解到基于AutoGloon框架僅需4行代碼足可以擊敗99%的數(shù)據(jù)科學(xué)家。
引言
在兩項受歡迎的Kaggle比賽中,AutoGloon僅在對原始數(shù)據(jù)進行了4小時的訓(xùn)練后就擊敗了99%的參賽數(shù)據(jù)科學(xué)家(AutoGloon團隊,《AutoGloon:將AutoML用于文本、圖像和表格數(shù)據(jù)》,2020年)。
上面這句話摘自AutoGloon的研究論文(https://arxiv.org/abs/2003.06505),完整地概括了我們本文將要探索的內(nèi)容:一個機器學(xué)習(xí)框架,它以最少的編碼實現(xiàn)了令人印象深刻的性能。你只需要四行代碼就可以建立一個完整的ML管道;否則,這項任務(wù)可能需要數(shù)小時。是的,只有四行代碼!你不妨先一睹為快:
from autogluon.tabular import TabularDataset, TabularPredictor
train_data = TabularDataset('train.csv')
predictor = TabularPredictor(label='Target').fit(train_data,
presets='best_quality')
predictions = predictor.predict(train_data)
這四行代碼通過自動識別每列的數(shù)據(jù)類型完成數(shù)據(jù)預(yù)處理,然后通過找到有用的列組合來實現(xiàn)特征工程,再通過組合來進行模型訓(xùn)練,以便在給定時間內(nèi)識別出性能最好的模型。請注意,在此處代碼中,我甚至沒有指定機器學(xué)習(xí)任務(wù)的類型(回歸/分類),而是由AutoGloon自動進行標簽檢查并自行確定任務(wù)。
我是在提倡這種算法嗎?也不一定。雖然我很欣賞AutoGloon的強大功能,但我更喜歡那些不會將數(shù)據(jù)科學(xué)簡化為Kaggle比賽中的準確性得分的解決方案。然而,隨著這些模型越來越受歡迎和廣泛采用,了解它們是如何工作的,它們背后的數(shù)學(xué)和代碼,以及如何利用或超越它們變得非常重要。
1.AutoGloon概述
AutoGloon是一個由亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)創(chuàng)建的開源機器學(xué)習(xí)庫。它旨在為你處理整個ML過程;具體來說,這包括從準備數(shù)據(jù)到選擇最佳模型并調(diào)整其設(shè)置的整個過程。
AutoGloon庫將簡潔性與一流的性能相結(jié)合。它采用了集成學(xué)習(xí)和自動超參數(shù)調(diào)整等先進技術(shù),以確保你創(chuàng)建的模型高度準確。這意味著,你可以開發(fā)強大的機器學(xué)習(xí)解決方案,而不會陷入技術(shù)細節(jié)的泥潭。
該庫負責(zé)數(shù)據(jù)預(yù)處理、特征選擇、模型訓(xùn)練和評估,這大大減少了建立穩(wěn)健的機器學(xué)習(xí)模型所需的時間和精力。此外,AutoGloon擴展性良好,適用于小型項目和大型復(fù)雜數(shù)據(jù)集。
對于表格數(shù)據(jù),AutoGloon既可以處理分類任務(wù)(將數(shù)據(jù)分類到不同的組中),也可以處理回歸任務(wù)(預(yù)測連續(xù)結(jié)果)。它還支持文本數(shù)據(jù),使其適用于情感分析或主題分類等任務(wù)。此外,它還可以管理圖像數(shù)據(jù),幫助進行圖像識別和物體檢測。
盡管AutoGloon的幾個變體版本是為了更好地處理時間序列數(shù)據(jù)、文本和圖像而構(gòu)建的,但在這里我們將重點關(guān)注處理表格數(shù)據(jù)的變體版本。如果你喜歡這篇文章,并希望未來深入了解它的這個開源庫的變體版本,請告訴我。(AutoGloon團隊,《AutoGloon:將AutoML用于文本、圖像和表格數(shù)據(jù)》,2020年)
2.AutoML概述
(1)什么是AutoML?
AutoML(Automated Machine Learning,自動化機器學(xué)習(xí))的縮寫,是一種將機器學(xué)習(xí)應(yīng)用于現(xiàn)實世界問題的整個過程自動化的技術(shù)。AutoML的主要目標是使機器學(xué)習(xí)更容易訪問和高效,允許人們在不需要深入專業(yè)知識的情況下開發(fā)模型。正如我們已經(jīng)看到的,它可以處理數(shù)據(jù)預(yù)處理、特征工程、模型選擇和超參數(shù)調(diào)整等任務(wù),這些任務(wù)通常既復(fù)雜又耗時(He等,《AutoML:最新技術(shù)綜述》,2019年)。
多年來,AutoML的概念有了顯著的發(fā)展。最初,機器學(xué)習(xí)需要專家的大量手動工作,他們必須仔細選擇特征、調(diào)整超參數(shù)并選擇正確的算法。隨著該領(lǐng)域的發(fā)展,處理越來越大和復(fù)雜的數(shù)據(jù)集的自動化需求也在增長。早期自動化部分流程的努力為現(xiàn)代AutoML系統(tǒng)鋪平了道路。如今,AutoML使用集成學(xué)習(xí)和貝葉斯優(yōu)化等先進技術(shù),以最少的人為干預(yù)創(chuàng)建高質(zhì)量的模型(Feurer等人,“高效和穩(wěn)健的自動機器學(xué)習(xí)”,2015年,鏈接:https://www.arxiv.org/abs/1908.00709)。
近幾年,AutoML領(lǐng)域出現(xiàn)了幾家參與研究團隊,每個參與者都提供其獨特的特征和功能支持。AutoGloon由亞馬遜網(wǎng)絡(luò)服務(wù)公司開發(fā),以其在各種數(shù)據(jù)類型中的易用性和強大性能而聞名(AutoGloon團隊,“AutoGlooN:針對文本、圖像和表格數(shù)據(jù)的AutoML”,2020年)。Google Cloud團隊研發(fā)的AutoML提供了一套機器學(xué)習(xí)產(chǎn)品,允許開發(fā)人員以最小的工作量訓(xùn)練高質(zhì)量的模型。H2O.ai團隊提供了一種H2O AutoML,能夠針對監(jiān)督和非監(jiān)督學(xué)習(xí)任務(wù)提供自動機器學(xué)習(xí)功能(H2O.ai團隊,“H2O AutoML:可擴展的自動機器學(xué)習(xí)”,2020年,鏈接:https://www.automl.org/wp-content/uploads/2020/07/AutoML_2020_paper_61.pdf)。DataRobot團隊則專注于企業(yè)級的AutoML解決方案,旨在為模型部署和管理提供強大的工具支持。微軟的Azure機器學(xué)習(xí)也具有AutoML功能,能夠與其他Azure服務(wù)無縫集成,形成全面的機器學(xué)習(xí)解決方案。
(2)AutoML的關(guān)鍵組件
AutoGluon工作流程如下圖所示:
AutoGloon工作流
任何機器學(xué)習(xí)流水線的第一步都是數(shù)據(jù)預(yù)處理。這包括通過處理缺失值、刪除重復(fù)項和更正錯誤來清理數(shù)據(jù)。數(shù)據(jù)預(yù)處理還包括將數(shù)據(jù)轉(zhuǎn)換為適合分析的格式,例如歸一化值、編碼分類變量和縮放特征。適當(dāng)?shù)臄?shù)據(jù)預(yù)處理至關(guān)重要,因為數(shù)據(jù)的質(zhì)量直接影響機器學(xué)習(xí)模型的性能。
一旦數(shù)據(jù)被清除,下一步就是特征工程。這個過程包括創(chuàng)建新的特征或修改現(xiàn)有的特征,以提高模型的性能。特征工程可以簡單到基于現(xiàn)有數(shù)據(jù)創(chuàng)建新列,也可以復(fù)雜到使用領(lǐng)域知識創(chuàng)建有意義的特征。正確的特征可以顯著增強模型的預(yù)測能力。
準備好數(shù)據(jù)并設(shè)計好特征后,下一步就是模型選擇。有許多算法可供選擇,每種算法都有其優(yōu)缺點,這取決于手頭的問題。AutoML系統(tǒng)能夠評估多個模型,以確定適合于給定任務(wù)的最佳模型。這可能包括比較決策樹、支持向量機、神經(jīng)網(wǎng)絡(luò)和其他模型,看看哪種模型的數(shù)據(jù)表現(xiàn)最好。
選擇模型后,下一個挑戰(zhàn)是超參數(shù)優(yōu)化。超參數(shù)是控制機器學(xué)習(xí)算法行為的設(shè)置,例如神經(jīng)網(wǎng)絡(luò)中的學(xué)習(xí)率或決策樹的深度。找到超參數(shù)的最佳組合可以極大地提高模型性能。AutoML使用網(wǎng)格搜索、隨機搜索等技術(shù),以及貝葉斯優(yōu)化等更先進的方法來自動化這一過程,確保對模型進行微調(diào)以獲得最佳結(jié)果。
最后一步是模型評估和選擇。這涉及到使用交叉驗證等技術(shù)來評估模型對新數(shù)據(jù)的概括程度。各種性能指標,如準確性、精確度、召回率和F1分數(shù),用于衡量模型的有效性。AutoML系統(tǒng)自動化這一評估過程,確保所選模型最適合給定任務(wù)。評估完成后,將選擇性能最佳的模型進行部署(AutoGloon團隊,《AutoGloon:將AutoML用于文本、圖像和表格數(shù)據(jù)》,2020年)。
(3)AutoML的挑戰(zhàn)
雖然AutoML節(jié)省了時間和精力,但它在計算資源方面可能要求很高。超參數(shù)調(diào)整和模型選擇等自動化任務(wù)通常需要運行多次迭代并訓(xùn)練多個模型,這對無法獲得高性能計算的小型組織或個人來說可能是一個挑戰(zhàn)。
另一個挑戰(zhàn)是需要定制。盡管AutoML系統(tǒng)在許多情況下都非常有效,但它們可能并不總是能立即滿足特定的要求。有時,自動化過程可能無法完全捕捉特定數(shù)據(jù)集或問題的獨特方面。用戶可能需要調(diào)整工作流程的某些部分,如果系統(tǒng)沒有提供足夠的靈活性或用戶缺乏必要的專業(yè)知識,這可能會很困難。
盡管存在這些挑戰(zhàn),但AutoML的好處往往大于缺點。它大大提高了生產(chǎn)力,擴大了可訪問性,并提供了可擴展的解決方案,使更多的人能夠利用機器學(xué)習(xí)的力量(Feuer等人,《高效和穩(wěn)健的自動化機器學(xué)習(xí)》,2015年)。
3.AutoGloon庫數(shù)學(xué)理論支持
(1)AutoGloon的架構(gòu)
AutoGloon的架構(gòu)旨在自動化從數(shù)據(jù)預(yù)處理到模型部署的整個機器學(xué)習(xí)工作流程。該體系結(jié)構(gòu)由幾個相互連接的模塊組成,每個模塊負責(zé)流程的特定階段。
第一步是數(shù)據(jù)模塊,它處理加載和預(yù)處理數(shù)據(jù)。該模塊處理諸如清理數(shù)據(jù)、處理缺失值以及將數(shù)據(jù)轉(zhuǎn)換為適合分析的格式等任務(wù)。例如,考慮一個存在缺失值的數(shù)據(jù)集X。數(shù)據(jù)模塊可以使用平均值或中位數(shù)估算這些缺失值:
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(strategy='mean')
X_imputed = imputer.fit_transform(X)
一旦數(shù)據(jù)經(jīng)過預(yù)處理,特征工程模塊就會接管過來。該組件生成新特征或轉(zhuǎn)換現(xiàn)有特征,以增強模型的預(yù)測能力。諸如對分類變量進行一次熱編碼或為數(shù)字數(shù)據(jù)創(chuàng)建多項式特征之類的技術(shù)是常見的。例如,對分類變量進行編碼可能如下所示:
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder()
X_encoded = encoder.fit_transform(X)
AutoGloon的核心是模型模塊。該模塊包括一系列機器學(xué)習(xí)算法,如決策樹、神經(jīng)網(wǎng)絡(luò)和梯度提升機。它在數(shù)據(jù)集上訓(xùn)練多個模型并評估它們的性能。例如,決策樹可以按照以下方式進行訓(xùn)練:
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
超參數(shù)優(yōu)化模塊自動搜索每個模型的最佳超參數(shù)。它使用網(wǎng)格搜索、隨機搜索和貝葉斯優(yōu)化等方法。Snoek等人的論文中詳細介紹了貝葉斯優(yōu)化(2012年:https://arxiv.org/abs/1206.2944),他們建立了一個概率模型來指導(dǎo)搜索過程:
from skopt import BayesSearchCV
search_space = {'max_depth': (1, 32)}
bayes_search = BayesSearchCV(estimator=DecisionTreeClassifier(),
search_spaces=search_space)
bayes_search.fit(X_train, y_train)
訓(xùn)練后,評估模塊使用準確性、精確度、召回率和F1分數(shù)等指標評估模型性能。交叉驗證通常用于確保模型能夠很好地推廣到新數(shù)據(jù):
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5, scoring='accuracy')
mean_score = scores.mean()
AutoGloon的集成模塊非常出色,它將多個模型的預(yù)測結(jié)合起來,生成一個更準確的預(yù)測。采用堆疊、裝袋和混合等技術(shù)。例如,可以使用BaggingClassifier進行裝袋:
from sklearn.ensemble import BaggingClassifier
bagging = BaggingClassifier(base_estimator=DecisionTreeClassifier(),
n_estimators=10)
bagging.fit(X_train, y_train)
最后,部署模塊負責(zé)將最佳模型或集成部署到生產(chǎn)中。這包括導(dǎo)出模型、對新數(shù)據(jù)生成預(yù)測以及將模型集成到現(xiàn)有系統(tǒng)中:
import joblib
joblib.dump(bagging, 'model.pkl')
總之,上述這些組件協(xié)同工作,使機器學(xué)習(xí)管道自動化,使用戶能夠快速高效地構(gòu)建和部署高質(zhì)量的模型。
(2)AutoGloon中的集成學(xué)習(xí)
集成學(xué)習(xí)是AutoGloon的一個關(guān)鍵功能,它增強了提供高性能模型的能力。通過組合多個模型,集成方法提高了預(yù)測的準確性和穩(wěn)健性。AutoGloon利用了三種主要的集成技術(shù):堆疊、裝袋和混合。
堆疊
堆疊涉及在同一數(shù)據(jù)集上訓(xùn)練多個基本模型,并將它們的預(yù)測用作更高級別模型(通常稱為元模型)的輸入特征。這種方法利用了各種算法的優(yōu)勢,使集合能夠做出更準確的預(yù)測。堆疊過程可以用數(shù)學(xué)表示如下:
堆疊公式
這里,h1表示基本模型,h2是元模型。每個基本模型h1取輸入特征xi并產(chǎn)生預(yù)測。然后,這些預(yù)測被用作元模型h2的輸入特征,并最終計算出最終預(yù)測值y^。通過組合不同基礎(chǔ)模型的輸出,堆疊可以捕獲數(shù)據(jù)中更廣泛的模式,從而提高預(yù)測性能。
袋裝
Bagging(Bootstrap Aggregation的縮寫)通過在不同的數(shù)據(jù)子集上訓(xùn)練同一模型的多個實例來提高模型的穩(wěn)定性和準確性。這些子集是通過對原始數(shù)據(jù)集進行隨機采樣并進行替換來創(chuàng)建的。最終預(yù)測通常通過對回歸任務(wù)的所有模型的預(yù)測進行平均或通過對分類任務(wù)進行多數(shù)投票來進行。
從數(shù)學(xué)上講,裝袋可以表示如下:
對于回歸:
Bagging公式中的回歸
對于分類:
裝袋中的分類
這里,hi表示在數(shù)據(jù)的不同子集上訓(xùn)練的第i個模型。對于回歸,最終預(yù)測y^是每個模型所做預(yù)測的平均值。對于分類,最終預(yù)測y^是模型中最頻繁預(yù)測的類別。
裝袋的方差縮減效果可以用大數(shù)定律來說明,該定律指出,來自多個模型的預(yù)測的平均值將收斂到期望值,從而減少總體方差,提高預(yù)測的穩(wěn)定性。可以說明為:
裝袋中的方差縮減
通過對數(shù)據(jù)的不同子集進行訓(xùn)練,裝袋也有助于減少過擬合并提高模型的可推廣性。
混合
混合類似于堆疊,但實現(xiàn)更簡單。在混合中,數(shù)據(jù)被分為兩部分:訓(xùn)練集和驗證集。基本模型在訓(xùn)練集上進行訓(xùn)練,它們在驗證集上的預(yù)測用于訓(xùn)練最終模型,也稱為混合器或元學(xué)習(xí)器?;旌鲜褂昧艘粋€保持驗證集,這可以使其更快地實現(xiàn):
# 簡單訓(xùn)練驗證拆分的混合示例
train_meta, val_meta, y_train_meta, y_val_meta = train_test_split(X, y,
test_size=0.2)
base_model_1.fit(train_meta, y_train_meta)
base_model_2.fit(train_meta, y_train_meta)
preds_1 = base_model_1.predict(val_meta)
preds_2 = base_model_2.predict(val_meta)
meta_features = np.column_stack((preds_1, preds_2))
meta_model.fit(meta_features, y_val_meta)
這些技術(shù)確保最終預(yù)測更加準確和穩(wěn)健,利用多個模型的多樣性和優(yōu)勢來提供卓越的結(jié)果。
(3)超參數(shù)優(yōu)化
超參數(shù)優(yōu)化包括為模型找到最佳設(shè)置,以最大限度地提高其性能。AutoGloon使用貝葉斯優(yōu)化、早期停止和智能資源分配等先進技術(shù)自動化了這一過程。
貝葉斯優(yōu)化
貝葉斯優(yōu)化旨在通過建立目標函數(shù)的概率模型來找到最優(yōu)的超參數(shù)集。它使用過去的評估結(jié)果來做出下一步要嘗試哪些超參數(shù)的明智決定。這對于有效地導(dǎo)航大型和復(fù)雜的超參數(shù)空間特別有用,減少了找到最佳配置所需的評估數(shù)量:
貝葉斯優(yōu)化公式
其中,f(θ)是想要優(yōu)化的目標函數(shù),例如模型精度或損失值。θ表示超參數(shù)。E[f(θ)]是給定超參數(shù)θ的目標函數(shù)的期望值。
貝葉斯優(yōu)化包括兩個主要步驟:
- 代理建模:基于過去的評估,建立一個概率模型,通常是高斯過程,以近似目標函數(shù)
- 采集函數(shù):該函數(shù)通過平衡勘探(嘗試超參數(shù)空間的新區(qū)域)和開發(fā)(專注于已知表現(xiàn)良好的區(qū)域)來確定下一組要評估的超參數(shù)。常見的采集函數(shù)包括預(yù)期改進(EI)和置信上限(UCB)。
與網(wǎng)格或隨機搜索方法相比,該優(yōu)化以迭代方式更新代理模型和采集函數(shù)以收斂于具有較少評估的最優(yōu)超參數(shù)集。
早停技術(shù)
一旦模型在驗證集上的性能停止改善,早停技術(shù)可以防止過擬合,并通過停止訓(xùn)練過程來減少訓(xùn)練時間。AutoGloon在訓(xùn)練過程中監(jiān)測模型的性能,并在進一步訓(xùn)練不太可能產(chǎn)生顯著改進時停止該過程。這項技術(shù)不僅節(jié)省了計算資源,而且確保了模型能夠很好地推廣到新的、看不見的數(shù)據(jù):
from sklearn.model_selection import train_test_split
from sklearn.metrics import log_loss
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2)
model = DecisionTreeClassifier()
best_loss = np.inf
for epoch in range(100):
model.fit(X_train, y_train)
val_preds = model.predict(X_val)
loss = log_loss(y_val, val_preds)
if loss < best_loss:
best_loss = loss
else:
break
資源配置策略
有效的資源分配在超參數(shù)優(yōu)化中至關(guān)重要,尤其是在處理有限的計算資源時。AutoGloon采用了高保真度優(yōu)化等策略,即系統(tǒng)最初使用數(shù)據(jù)子集或更少的迭代輪次來訓(xùn)練模型,以快速評估其潛力。然后為有希望的模型分配更多的資源進行徹底評估。這種方法平衡了勘探和開發(fā),確保計算資源得到有效利用:
多保真度優(yōu)化公式
在這個公式中:
- hi表示第i個模型。
- Ci是與模型hi相關(guān)聯(lián)的成本,例如所使用的計算時間或資源。
- Resource(hi)表示分配給模型hi的總資源的比例。
通過最初訓(xùn)練保真度降低的模型(例如,使用更少的數(shù)據(jù)點或迭代輪次),高保真度優(yōu)化可以快速識別有希望的候選樣本。然后以更高的保真度對這些候選樣本進行訓(xùn)練,確保計算資源得到有效使用。這種方法平衡了超參數(shù)空間的探索與已知良好配置的利用,從而實現(xiàn)高效和有效的超參數(shù)優(yōu)化。
(4)模型評估和選擇
模型評估和選擇確保所選模型在新的、看不見的數(shù)據(jù)上表現(xiàn)良好。AutoGloon使用交叉驗證技術(shù)、性能指標和自動模型選擇標準自動化這一過程。
交叉驗證技術(shù)
交叉驗證包括將數(shù)據(jù)拆分為多個子集,并在不同的子集上訓(xùn)練模型,同時在其余部分上進行驗證。AutoGloon使用k倍交叉驗證等技術(shù),將數(shù)據(jù)劃分為k個子集,對模型進行k次訓(xùn)練和驗證,每次都以不同的子集作為驗證集。這有助于獲得對模型性能的可靠估計,并確保評估不會因特定的訓(xùn)練測試劃分而產(chǎn)生偏差:
交叉驗證精度公式
性能指標
為了評估模型的質(zhì)量,AutoGloon依賴于各種性能指標,這些指標取決于手頭的特定任務(wù)。對于分類任務(wù),常見的指標包括準確性、精密度、召回率、F1分數(shù)和ROC曲線下面積(AUC-ROC)。對于回歸任務(wù),通常使用平均絕對誤差(MAE)、均方誤差(MSE)和R平方等度量。AutoGloon在評估過程中自動計算這些指標,以便全面了解模型的優(yōu)勢和劣勢:
from sklearn.metrics import accuracy_score, precision_score, recall_score,
f1_score
y_pred = model.predict(X_val)
accuracy = accuracy_score(y_val, y_pred)
precision = precision_score(y_val, y_pred)
recall = recall_score(y_val, y_pred)
f1 = f1_score(y_val, y_pred)
自動模型選擇標準
在評估模型后,AutoGloon使用自動標準來選擇性能最好的模型。這包括比較不同模型的性能指標,并選擇在任務(wù)的最相關(guān)指標方面表現(xiàn)出色的模型。AutoGloon還考慮了模型復(fù)雜性、訓(xùn)練時間和資源效率等因素。自動化的模型選擇過程確保所選模型不僅性能良好,而且在現(xiàn)實世界場景中部署和使用也很實用。通過自動化選擇,AutoGloon消除了人為偏見,并確保采用一致和客觀的方法來選擇最佳型號:
best_model = max(models, key=lambda model: model['score'])
4.基于Python的AutoGloon示例工程
在開始使用AutoGloon之前,你需要設(shè)置一下開發(fā)環(huán)境。這涉及到安裝必要的庫和依賴項等操作。
你可以使用pip安裝AutoGloon。為此,只需打開終端或命令提示符,然后運行以下命令:
pip install autogluon
此命令將安裝AutoGloon及其所需的依賴項。
接下來,你需要下載數(shù)據(jù)。你需要安裝Kaggle,以便下載本文提供示例的數(shù)據(jù)集:
pip install kaggle
安裝后,通過在終端中運行這些命令下載數(shù)據(jù)集。請確保你處于與.py文件相同的目錄中:
mkdir data
cd data
kaggle competitions download -c playground-series-s4e6
unzip "Academic Succession/playground-series-s4e6.zip"
或者,你可以從最近的Kaggle競賽“基于學(xué)術(shù)成功數(shù)據(jù)集的分類”中手動下載數(shù)據(jù)集。該數(shù)據(jù)集可免費用于商業(yè)用途(https://creativecommons.org/licenses/by/4.0/)。
一旦環(huán)境設(shè)置好,你就可以使用AutoGloon來構(gòu)建和評估機器學(xué)習(xí)模型。首先,你需要加載并準備數(shù)據(jù)集。AutoGloon使這個過程變得簡單明了。假設(shè)你有一個名為train.CSV的CSV文件,其中包含你的訓(xùn)練數(shù)據(jù):
from autogluon.tabular import TabularDataset, TabularPredictor
# 加載數(shù)據(jù)集
train_df = TabularDataset('data/train.csv')
加載數(shù)據(jù)后,可以使用AutoGloon訓(xùn)練模型。在本例中,我們將訓(xùn)練一個模型來預(yù)測名為“target”的目標變量,并使用準確性作為評估指標。我們還將啟用超參數(shù)調(diào)整和自動堆疊,以提高模型性能:
# 訓(xùn)練模型
predictor = TabularPredictor(
label='Target',
eval_metric='accuracy',
verbosity=1
).fit(
train_df,
presets=['best_quality'],
hyperparameter_tune=True,
auto_stack=True
)
訓(xùn)練結(jié)束后,你可以使用排行榜評估模型的表現(xiàn),排行榜提供了模型在訓(xùn)練數(shù)據(jù)上的表現(xiàn)摘要:
#評估模型
leaderboard = predictor.leaderboard(train_df, silent=True)
print(leaderboard)
排行榜為你提供了AutoGloon訓(xùn)練的所有模型的詳細比較。
現(xiàn)在,讓我們詳細解釋一下上面表格中的幾個關(guān)鍵列及其含義:
- model:此列列出了模型的名稱。例如,RandomForestEntr_BAG_L1指的是使用熵作為標準的隨機森林模型,并使用級別1版本打包。
- score_test:這顯示了模型在數(shù)據(jù)集上的準確性。分數(shù)為1.00表示某些模型具有完美的準確性。與其名稱相反,score_test是在訓(xùn)練過程中使用的訓(xùn)練數(shù)據(jù)集。
- score_val:這顯示了模型在驗證數(shù)據(jù)集上的準確性。請注意這一點,因為它顯示了模型在看不見的數(shù)據(jù)上的表現(xiàn)。
- eval_metric:使用的評估指標,在本例中指準確性。
- pred_time_test:對測試數(shù)據(jù)進行預(yù)測所花費的時間。
- pred_time_val:對驗證數(shù)據(jù)進行預(yù)測所花費的時間。
- fit_time:訓(xùn)練模型所花費的時間。
- pred_time_test_marginal:集合中的模型在測試數(shù)據(jù)集上添加的額外預(yù)測時間。
- pred_time_val_marginal:集合中的模型在驗證數(shù)據(jù)集上添加的額外預(yù)測時間。
- fit_time_marginal:模型在集合中添加的額外訓(xùn)練時間。
- stack_level:表示模型的堆疊級別。1級模型是基礎(chǔ)模型,而2級模型是使用1級模型的預(yù)測作為特征的元模型。
- can_infer:指示模型是否可以用于推理。
- fit_order:訓(xùn)練模型的順序。
查看一下所提供的排行榜數(shù)據(jù),我們可以看到一些模型,如RandomForestEntr_BAG_L1和RandomForest Gini_BAG_L具有完美的訓(xùn)練精度(1000000),但驗證精度略低,這表明可能存在過度擬合。WeightedEnsemble_L2結(jié)合了1級模型的預(yù)測,通常通過平衡其基本模型的強度來顯示良好的性能。
LightGBMLarge_BAG_L1和XGBoost_BAG_L1等模型具有競爭性的驗證分數(shù)以及合理的訓(xùn)練和預(yù)測時間,使其成為最終部署方案的有力候選模型。
fit_time和pred_time列提供了對每個模型的計算效率的深入了解,這對實際應(yīng)用至關(guān)重要。
除了排行榜之外,AutoGloon還提供了一些高級功能,允許你自定義訓(xùn)練過程、處理不平衡的數(shù)據(jù)集和執(zhí)行超參數(shù)調(diào)整。
通過調(diào)整擬合方法的參數(shù),可以自定義訓(xùn)練過程的各個方面。例如,可以更改訓(xùn)練迭代次數(shù),指定要使用的不同算法,或為每個算法設(shè)置自定義超參數(shù)。
from autogluon.tabular import TabularPredictor, TabularDataset
# 加載數(shù)據(jù)集
train_df = TabularDataset('train.csv')
#定義自制超級參數(shù)
hyperparameters = {
'GBM': {'num_boost_round': 200},
'NN': {'epochs': 10},
'RF': {'n_estimators': 100},
}
# 使用定制設(shè)置訓(xùn)練模型
predictor = TabularPredictor(
label='Target',
eval_metric='accuracy',
verbosity=2
).fit(
train_data=train_df,
hyperparameters=hyperparameters
)
不平衡的數(shù)據(jù)集可能具有挑戰(zhàn)性,但AutoGloon提供了有效處理這些數(shù)據(jù)集的工具。可以使用諸如對少數(shù)類進行過采樣、對多數(shù)類進行欠采樣或應(yīng)用成本敏感的學(xué)習(xí)算法等技術(shù)。AutoGloon可以自動檢測和處理數(shù)據(jù)集中的不平衡。
from autogluon.tabular import TabularPredictor, TabularDataset
#加載數(shù)據(jù)集
train_df = TabularDataset('train.csv')
#通過指定自定義參數(shù)處理不平衡的數(shù)據(jù)集
#AutoGloon可以在內(nèi)部處理此問題,但為了清楚起見,在此處指定
hyperparameters = {
'RF': {'n_estimators': 100, 'class_weight': 'balanced'},
'GBM': {'num_boost_round': 200, 'scale_pos_weight': 2},
}
# 使用處理不平衡的設(shè)置來訓(xùn)練模型
predictor = TabularPredictor(
label='Target',
eval_metric='accuracy',
verbosity=2
).fit(
train_data=train_df,
hyperparameters=hyperparameters
)
超參數(shù)調(diào)整對于優(yōu)化模型性能至關(guān)重要。AutoGloon使用貝葉斯優(yōu)化等先進技術(shù)自動完成這一過程。你可以通過在擬合方法中設(shè)置hyperparameter_tune=True來啟用超參數(shù)調(diào)整。
from autogluon.tabular import TabularPredictor, TabularDataset
# 加載數(shù)據(jù)集
train_df = TabularDataset('train.csv')
# 使用超參數(shù)優(yōu)化訓(xùn)練模型
predictor = TabularPredictor(
label='Target',
eval_metric='accuracy',
verbosity=2
).fit(
train_data=train_df,
presets=['best_quality'],
hyperparameter_tune=True
)
超越AutoML模型的可能性
經(jīng)過上面的AutoGloon庫學(xué)習(xí)之后,不妨讓我們繼續(xù)探討如何進一步超越AutoML模型。假設(shè)你的主要目標是改進損失指標,而不是關(guān)注延遲、計算成本或其他指標。
如果你有一個非常適合深度學(xué)習(xí)的大型數(shù)據(jù)集,你可能會發(fā)現(xiàn)實驗深度學(xué)習(xí)架構(gòu)更容易。AutoML框架在這一領(lǐng)域往往很困難,因為深度學(xué)習(xí)需要對數(shù)據(jù)集有深入的了解,而盲目應(yīng)用模型可能會非常耗時和耗費資源。以下是一些可以幫助你開始深度學(xué)習(xí)的資源:
- 《神經(jīng)網(wǎng)絡(luò)背后的數(shù)學(xué)》:深入研究神經(jīng)網(wǎng)絡(luò),這是現(xiàn)代人工智能的支柱,了解其數(shù)學(xué),從頭開始實現(xiàn),并探索其應(yīng)用。文章地址:
- ??https://towardsdatascience.com/the-math-behind-neural-networks-a34a51b93873??
- 《微調(diào)深度神經(jīng)網(wǎng)絡(luò)背后的數(shù)學(xué)》:深入研究微調(diào)神經(jīng)網(wǎng)絡(luò)的技術(shù),了解它們的數(shù)學(xué),從頭開始構(gòu)建它們,并探索它們的應(yīng)用。文章地址:
- ??https://towardsdatascience.com/the-math-behind-fine-tuning-deep-neural-networks-8138d548da69??
- 《LSTM背后的數(shù)學(xué)》:深入LSTM,了解其數(shù)學(xué),并從頭開始實施。文章地址:
??https://towardsdatascience.com/the-math-behind-lstm-9069b835289d??
然而,真正的挑戰(zhàn)在于用傳統(tǒng)的機器學(xué)習(xí)任務(wù)擊敗AutoML。AutoML系統(tǒng)通常使用集成技術(shù),這意味著你最終可能會做同樣的事情。一個好的開始策略可以是首先擬合一個AutoML模型。例如,使用AutoGloon,你可以確定哪些模型表現(xiàn)最好。然后,你可以采用這些模型,重新創(chuàng)建AutoGloon使用的集成架構(gòu)。通過使用Optuna等技術(shù)進一步優(yōu)化這些模型,你可能獲得更好的性能。以下是掌握Optuna的全面指南:
《Optuna的機器學(xué)習(xí)優(yōu)化》:介紹如何在Python中微調(diào)每個機器學(xué)習(xí)算法。Optuna機器學(xué)習(xí)優(yōu)化的終極指南,實現(xiàn)卓越的模型性能。文章地址:
??https://towardsdatascience.com/machine-learning-optimization-with-optuna-57593d700e52??
此外,將領(lǐng)域知識應(yīng)用于特征工程可以為你提供優(yōu)勢。了解數(shù)據(jù)的細節(jié)可以幫助你創(chuàng)建更有意義的功能,從而顯著提高模型的性能。如果可行,請擴充數(shù)據(jù)集以提供更多不同的訓(xùn)練示例,這有助于提高模型的穩(wěn)健性。
通過將上述這些策略與從初始AutoML模型中獲得的見解相結(jié)合,你就可以超越自動化方法并獲得更為卓越的訓(xùn)練結(jié)果。
結(jié)論
AutoGloon通過自動化從數(shù)據(jù)預(yù)處理到模型部署的一切,徹底改變了ML過程。其尖端的架構(gòu)、強大的集成學(xué)習(xí)技術(shù)和復(fù)雜的超參數(shù)優(yōu)化使其成為機器學(xué)習(xí)新手和經(jīng)驗豐富的數(shù)據(jù)科學(xué)家不可或缺的工具。借助于AutoGloon,你可以將復(fù)雜、耗時的任務(wù)轉(zhuǎn)換為簡化的工作流程,使你能夠以前所未有的速度和效率構(gòu)建頂級模型。
然而,要想真正在機器學(xué)習(xí)中脫穎而出,就不能僅僅依賴AutoGloon。將其作為啟動項目的基礎(chǔ),并深入了解有效的模型策略。然后,以此為基礎(chǔ),深入了解你的數(shù)據(jù),并將領(lǐng)域知識應(yīng)用于功能工程。最后,嘗試自定義模型,還要嘗試在AutoGloon的初始產(chǎn)品之外對其進行微調(diào)。
參考文獻
- Erickson,N.、Mueller,J.、Charpentier,P.、Kornblith,S.、Weissenborn,D.、Norris,E.…和Smola,A.(2020)?!禔utoGluon-Tabular: Robust and Accurate AutoML for Structured Data》。arXiv預(yù)印本arXiv:2003.0605。
- Snoek,J.、Larochelle,H.和Adams,R.P.(2012)?!稒C器學(xué)習(xí)算法的實用貝葉斯優(yōu)化》。Advances in neural information processing systems,25。
- Pedregosa,F(xiàn).,Varoquex,G.,Gramfort,A.,Michel,V.,Thirion,B.,Grisel,O.,…和Duchesnay,é。(2011)。《Scikit學(xué)習(xí):Python中的機器學(xué)習(xí)》。Journal of machine learning research,12(10月),2825–2830。
- AutoGloon團隊?!禔utoGluon: AutoML for Text, Image, and Tabular Data》,2020。
- Feuer,Matthias等,《Efficient and Robust Automated Machine Learning》,2015年。
- 何,辛,等。《AutoML: A Survey of the State-of-the-Art》。2020。
- Hutter,F(xiàn)rank等人,《Automated Machine Learning: Methods, Systems, Challenges》,2019年。
- H2O.ai,《H2O AutoML: Scalable Automatic Machine Learning》,2020年。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。
原文標題:AutoML with AutoGluon: ML workflow with Just Four Lines of Code,作者:Cristian Leo
鏈接:
