1. 引入
德國科學家在2015年時,在NIPS會議上發表了關于“自動機器學習架構”的方法(參考2),并開源了一個叫做auto-sklearn的項目(參考1)。在2020年,他們又對這個auto-sklearn架構進行了優化(參考3)。
初步看來,auto-sklearn能自動選擇sklearn中不同模型,并最終找出最優的ensemble多模型內建學習方案。
2. 安裝
參考4中給出了安裝方法,需要python3.6以上的版本。
- ubuntu上的安裝步驟
sudo apt-get install build-essential swig python3-dev
pip3 install auto-sklearn
auto-sklearn依賴swig,是以要先安裝swig,這是個多語言程式設計相容的庫。
- 使用conda安裝
conda install gxx_linux-64 gcc_linux-64 swig
參考4中還給出了使用docker等進行安裝的更多安裝方式,這裡不再贅述。
3. 代碼示例
下面給出一個簡單的示例代碼(來源于auto-sklearn源碼中的example,簡單修改并增加注釋),代碼含義及關鍵參數解釋見注釋。
# step-01: 導入第三方庫
import sklearn.datasets
import sklearn.metrics
import autosklearn.classification
# step-02: 使用sklearn加載breast_cancer資料集
X, y = sklearn.datasets.load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X, y, random_state=1)
print(X_train.shape, X_test.shape, y_train.shape, y_test.shape)
# (426, 30) (143, 30) (426,) (143,)
# step-03: 訓練模型
automl = autosklearn.classification.AutoSklearnClassifier(
time_left_for_this_task=120, # 尋找合适模型的總時間(按秒計算)
per_run_time_limit=30, # 留給每個模型運作、調優的時間(按秒計算)
tmp_folder='tmp/autosklearn_classification_example_tmp', # 配置檔案、log檔案存儲路徑
)
automl.fit(X_train, y_train, dataset_name='breast_cancer')
# step-04: 最終給出的ensemble模型的細節
print(automl.show_models())
# step-05: Accuracy
predictions = automl.predict(X_test)
print("Accuracy score:", sklearn.metrics.accuracy_score(y_test, predictions))
上面第4步這裡給出出了最終ensemble的模型,包括extra_tree,mlp,random_forest,gradient_boosting,以及他們的參數細節,看上去還是挺複雜的。最終在測試集上的準确率為 0.951048951048951。
4. 模型持久化
可使用joblib對auto-sklearn給出的ensemble模型做持久化,示例代碼如下:
import joblib as jl
jl.dump(automl, 'automl.jl')
m2 = jl.load('automl.jl')
predictions = m2.predict(X_test)
print("Accuracy score:", sklearn.metrics.accuracy_score(y_test, predictions))
5. 關于auto-sklearn更多有價值的參考
auto-sklearn項目描述和官網上給出的tutorial都比較少,查了不少參考資料後,發現的好資料如下:
- api文檔:https://automl.github.io/auto-sklearn/master/index.html
- 原理:兩篇文章,參考2,參考3
- 樣例代碼:https://github.com/automl/auto-sklearn/tree/master/examples
6. 總結
本文給出了安裝、使用auto-sklearn的簡單案例,以及更多有價值的參考資料。
機器學習的實際應用過程中,會花掉大量時間做模型選擇,參數調優,多模型內建學習ensemble。
auto-sklearn能把上面提到這些比較耗時的體力活都自動做完,這也是它最大的優勢。
當然,從筆者的實驗看來,auto-sklearn最終得到的模型,持久化後size都比較大,哪怕隻在簡單資料集上進行訓練。
7. 參考
- https://github.com/automl/auto-sklearn
- https://proceedings.neurips.cc/paper/2015/file/11d0e6287202fced83f79975ec59a3a6-Paper.pdf
- https://arxiv.org/abs/2007.04074
- https://automl.github.io/auto-sklearn/master/installation.html