從Google Cloud繪制的AutoML的工作原理圖可以看出,我們使用者只需要給其提供數(shù)據(jù)源,以及好壞樣本(或者不需要),然后后面的一切都交給AutoML組件去完成。
我們可以認識到AutoML大大降低了機器學習模型的開發(fā)門檻,但是我們還是需要了解這里面的原理的,這里涉及了機器學習的幾個關(guān)鍵節(jié)點的內(nèi)容,需要我們特別關(guān)注。
其中最為重要的是自動化特征工程了,一般縮寫為“Auto FE”,主要是包括了預(yù)處理、特征選擇、特征提取、元學習等等的操作,把每一個環(huán)節(jié)的處理邏輯寫到腳本里,結(jié)合一些策略讓邏輯更加科學,結(jié)果更加合理。
第二個就是自動化模型選擇,也叫Automated Model Selection,簡稱AMS,就是根據(jù)實際的數(shù)據(jù)來選擇合適的算法。因為大多數(shù)的算法都是有超參數(shù)的,這時候AutoML是需要進行自動化的超參數(shù)優(yōu)化的,英文叫做Hyperparameter Optimization,簡稱HPO,在學習中了解到這塊的知識研究還是蠻豐富的,主要有下面的一些方法:
還有一個概念就是NAS,即Neural Architecture Search(神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索),因為目前深度學習應(yīng)用很廣泛了,很多時候是需要搭建一個深度神經(jīng)網(wǎng)絡(luò),這里面涉及的參數(shù)是真的多,按照傳統(tǒng)的超參數(shù)優(yōu)化的方法顯得十分吃力,所以也有了這個NAS的概念,而關(guān)于NAS的研究方法,主要有下面幾種:
目前AutoML工具我們可以從兩個途徑來進行獲取學習:
從Awesome-AutoML-Papers(https://github.com/hibayesian/awesome-automl-papers#projects)里有一張AutoML工具的對比圖,大家可以瀏覽一波。
名稱 | 支持類型 | 編程語言 |
---|---|---|
AdaNet | NAS | Python |
Advisor | HPO | Python |
AMLA | HPO, NAS | Python |
ATM | HPO | Python |
Auger | HPO | Python |
Auto-Keras | NAS | Python |
AutoML Vision | NAS | Python |
AutoML Video Intelligence | Python | |
AutoML Natural Language | NAS | Python |
AutoML Translation | NAS | Python |
AutoML Tables | AutoFE, HPO | Python |
auto-sklearn | HPO | Python |
auto_ml | HPO | Python |
BayesianOptimization | HPO | Python |
BayesOpt | HPO | C++ |
comet | HPO | Python |
DataRobot | HPO | Python |
DEvol | NAS | Python |
Driverless AI | AutoFE | Python |
FAR-HO | HPO | Python |
H2O AutoML | HPO | Python, R, Java, Scala |
HpBandSter | HPO | Python |
HyperBand | HPO | Python |
Hyperopt | HPO | Python |
Hyperopt-sklearn | HPO | Python |
Hyperparameter Hunter | HPO | Python |
Katib | HPO | Python |
MateLabs | HPO | Python |
Milano | HPO | Python |
MLJAR | HPO | Python |
nasbot | NAS | Python |
neptune | HPO | Python |
NNI | HPO, NAS | Python |
Optunity | HPO | Python |
R2.ai | HPO | ------ |
RBFOpt | HPO | Python |
RoBO | HPO | Python |
Scikit-Optimize | HPO | Python |
SigOpt | HPO | Python |
SMAC3 | HPO | Python |
TPOT | AutoFE, HPO | Python |
TransmogrifAI | HPO | Scala |
Tune | HPO | Python |
Xcessiv | HPO | Python |
SmartML | HPO | R |
這里會簡單地講一下auto-sklearn的框架,讓大家對這個學習框架有一定的了解,接下來就會拿官方的栗子來說明一下怎么使用,然后羅列一下這個auto-sklearn可以做什么內(nèi)容,讓大家對這個框架的功能有一定的了解。
二話不說,先在本地安裝一下這個包,直接pip install auto-sklearn
走起,如果安裝失敗可能是因為缺少依賴項,可以試試:
curl https://raw.githubusercontent.com/automl/auto-sklearn/master/requirements.txt | xargs -n 1 -L 1 pip install
如果出現(xiàn)Failed to connect to raw.githubusercontent.com port 443: Connection refused
的報錯,初步估計是DNS污染,可以查看相關(guān)攻略:https://github.com/hawtim/blog/issues/10
如果安裝失敗,可以按照官網(wǎng)網(wǎng)站的指導(dǎo)再試試:https://automl.github.io/auto-sklearn/master/installation.html
相關(guān)學習傳送門:
我們從上面官方文檔可以知道(可能需要番羽Q,所以我就把相關(guān)的example的code下載下來了,大家可以后臺回復(fù)“automl”獲?。?/span>,auto-sklearn的功能主要有下面的截圖所示,包括分類模型、回歸模型的構(gòu)建,模型評估方法的支持等,涵蓋了我們主要的基礎(chǔ)建模需求。
auto-sklearn顧名思義應(yīng)該是和我們常用的scikit-learn有一定的關(guān)系,確實對的,auto-sklearn就是基于scikit-learn進行開發(fā)的自動化機器學習庫,所以如果我們熟悉scikit-learn的使用,那么對于這個auto-sklearn就很好理解了的,不熟悉其實也沒有關(guān)系,也蠻簡單的,后續(xù)我拿一些小栗子來說明一下,主要圍繞兩個核心的分類接口和回歸接口API:AutoSklearnClassifier
和 AutoSklearnRegressor
。
我們直接在官方文檔里看下這個API的參數(shù),如下圖所示:
參數(shù)的數(shù)量還是蠻多的,我們簡單介紹兩個Parameters:
簡單調(diào)用一下:
# 導(dǎo)入相關(guān)包
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') # 忽略代碼警告
# 導(dǎo)入手寫數(shù)字的數(shù)據(jù)集
digits = load_digits() # 加載數(shù)據(jù)集
# 劃分數(shù)據(jù)集為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(
digits.data, digits.target, test_size=0.3, random_state=42) # 切分數(shù)據(jù)集
# 調(diào)用Auto-sklearn
# 限制算法搜索最大時間,更快得到結(jié)果
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)
我們繼續(xù)看官方文檔里的API參數(shù),如下圖所示:
參數(shù)也是照樣很多,
總結(jié)來說這兩個API的參數(shù)幾乎是一樣的,正所謂一份學習double享受,jeng!同樣的我們簡單地調(diào)用一下,這次我們用房價預(yù)測的數(shù)據(jù)集,這是一個很經(jīng)典的回歸算法的數(shù)據(jù)集。
# 導(dǎo)入相關(guān)包
from sklearn.datasets import load_boston
from autosklearn.regression import AutoSklearnRegressor
# 導(dǎo)入數(shù)據(jù)集
boston = load_boston() # 加載數(shù)據(jù)集
# 限制算法搜索最大時間,更快得到結(jié)果
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)
我們評估一個機器學習模型的好壞需要量化的指標,而我們常用的幾個像準確率、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
我們可以看出其實大多數(shù)的評估指標都涵蓋了,具體怎么用,建議可以去看看官方文檔看看例子~
介紹完了機器學習框架的原理以及其中一個產(chǎn)品的簡單使用,順便也介紹下深度學習的自動化機器學習框架,深度學習在近幾年十分大熱,神經(jīng)網(wǎng)絡(luò)在很多時候的表現(xiàn)也是讓人吃驚,確實也很有必要去了解一下。
towardsdatascience.com
可以從上圖看出目前最流行的深度學習框架有TensorFlow、Keras和PyTorch,今天我們不展開這些框架的學習,篇幅有限也不好展開(主要是我也不熟哈哈哈),我們今天就來講講Auto-Keras的簡單使用,畢竟今天的主要還是自動化機器學習。
Auto-Keras框架是由DATA Lab開發(fā)的,由Keras官方團隊維護。它主要提供了神經(jīng)結(jié)構(gòu)搜索(NAS)和超參數(shù)自動優(yōu)化(HPO),其后端依賴于scikit-learn、TensorFlow和PyTorch,我們還是把一些常用的地址貼一下:
安裝的話也是比較簡單,可以使用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
我們從官網(wǎng)文檔里可以看出主要是支持圖片分類、圖片生成、文本分類、文本生成等,算是涵蓋了計算機視覺和自然語言處理的常用應(yīng)用場景了。
import sys
sys.path.append('autokeras') # 鏈接到 Auto-Keras 庫
同樣的,我們可以看看官方文檔:
我們導(dǎo)入自帶的MNIST手寫字符分類數(shù)據(jù)集,樣本數(shù)據(jù)形狀為28x28的灰度圖像,已經(jīng)轉(zhuǎn)為了numpy數(shù)組。
# 導(dǎo)入相關(guān)包
import tensorflow as tf
from autokeras.image.image_supervised import ImageClassifier
# 加載數(shù)據(jù)集
(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()
# 實例化模型,verbose=True 輸出訓練過程參數(shù)
clf = ImageClassifier(verbose=True)
# 訓練模型,最大時間設(shè)為 30 分鐘
clf.fit(X_train, y_train, time_limit=30 * 60)
# 評估模型
clf.evaluate(X_test, y_test)
那如果是針對那些數(shù)據(jù)集本身是圖片的呢,又可以如何操作?也可以參考下面的例子:
# 下載圖片數(shù)據(jù)
!wget -nc 'https://labfile.oss.aliyuncs.com/courses/1357/load_raw_image_data.zip'
!unzip -o 'load_raw_image_data.zip' # 解壓數(shù)據(jù)
# 導(dǎo)入相關(guān)包
import pandas as pd
from autokeras.image.image_supervised import load_image_dataset
# 讀取數(shù)據(jù)
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 輸出訓練過程參數(shù)
clf = ImageClassifier(verbose=True)
# 訓練模型,最大時間設(shè)為 30 分鐘
clf.fit(X_train, y_train, time_limit=30 * 60)
# 評估模型
clf.evaluate(X_test, y_test)
同樣的,我們可以看看官方文檔:
NLP有十分豐富的應(yīng)用,比如文本分類、情感分析、機器翻譯、智能問答等,在Auto-Keras中也有類似的APIs可以用,我們拿其中一個文本分類預(yù)測來看看。
# 下載數(shù)據(jù)集(關(guān)于電影影評的積極與消極情緒的識別)
!wget -nc 'https://labfile.oss.aliyuncs.com/courses/1357/imdb-reviews.zip'
!unzip -o 'imdb-reviews.zip'
# 導(dǎo)入相關(guān)包
import pandas as pd
from sklearn.model_selection import train_test_split
from autokeras.text.text_supervised import TextClassifier
# 導(dǎo)入數(shù)據(jù)
reviews = pd.read_csv('imdb-reviews.csv')
# 劃分數(shù)據(jù)集
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要求輸入的為獨熱編碼后的數(shù)組
y_train_ = pd.get_dummies(y_train).values
y_test_ = pd.get_dummies(y_test).values
# 實例化模型,verbose=True 輸出訓練過程參數(shù)
clf = TextClassifier(verbose=True)
clf.fit(X_train, y_train, time_limit=30 * 60)
# 評估模型
clf.evaluate(X_test, y_test)
聯(lián)系客服