自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何使用Auto-Sklearn和Auto-PyTorch實現(xiàn)自動化機器學(xué)習(xí)

譯文
人工智能 機器學(xué)習(xí) 自動化
如今,機器學(xué)習(xí)(ML)正在廣泛地影響著商業(yè)、工程、以及研究等領(lǐng)域。通常,機器學(xué)習(xí)水平的進步,與軟件和自動化的深入迭代有著密切的關(guān)系。

[[430082]]

【51CTO.com快譯】引言

如今,機器學(xué)習(xí)(ML)正在廣泛地影響著商業(yè)、工程、以及研究等領(lǐng)域。通常,機器學(xué)習(xí)水平的進步,與軟件和自動化的深入迭代有著密切的關(guān)系。只要人類的某項活動,需要依賴計算機去進行重復(fù)性和判斷性的處理,我們就可以通過機器學(xué)習(xí)來執(zhí)行與實現(xiàn)。當(dāng)然,面對各種不確切的待解決問題,我們需要通過定義搜索空間、以及具體的學(xué)習(xí)算法,來訓(xùn)練計算機去自行判定與解決。

目前,機器學(xué)習(xí)已經(jīng)憑借著有效的深度學(xué)習(xí),進入了2.0的時代。它們不但可以更好地預(yù)測蛋白模型的數(shù)據(jù)擬合,而且能夠在圍棋、Dota II、星際爭霸II等方面擊敗專業(yè)的人類玩家,以及創(chuàng)建各種十分連貫的文本和語音交互式響應(yīng)。您可以通過鏈接,進一步了解機器學(xué)習(xí)對于不同行業(yè)的影響。當(dāng)然,這些也都離不開各種被稱為AutoML的開源工具、以及將ML進行實際應(yīng)用的優(yōu)秀實踐。

什么是AutoML?

作為一大類技術(shù)和工具,AutoML可以被用于各種自動化的搜索與學(xué)習(xí)場景中。例如,我們將貝葉斯優(yōu)化應(yīng)用于統(tǒng)計學(xué)習(xí)算法的超參數(shù)(hyperparameter),或是將深度學(xué)習(xí)模型運用于神經(jīng)架構(gòu)的搜索。這些多樣化的生態(tài)系統(tǒng),目前已被編錄到了AutoML.ai中。其中,最著名的AutoML軟件包之一便是:Auto-SciKit-Learn(或稱Auto-Sklearn)。它榮獲了2014年至2016年的ChaLearn AutoML挑戰(zhàn)賽的獲勝者

Auto-Sklearn是由德國的自動化機器學(xué)習(xí)研究小組所開發(fā)。作為一個Python包,Auto-Sklearn的構(gòu)建密切遵循了SciKit-Learn的使用模式,這也是它得名為“Auto-SciKit-Learn”的原因。

除了Auto-Sklearn,F(xiàn)reiburg-Hannover的AutoML小組還開發(fā)了Auto-PyTorch庫。在下面的簡單示例中,我們將使用這兩個代碼庫,作為進入AutoML的切入點。

AutoML的演示

首先,我們來設(shè)置所需要的軟件包和依賴項。在此,我們使用Python 3的virtualenv,來管理演示項目的虛擬環(huán)境。當(dāng)然,您也可以使用Anaconda(譯者注:一種開源的Python發(fā)行版本)和pip,它們的工作方式都是類似的。

下面是在Ubuntu等基于Unix的系統(tǒng)上,設(shè)置運行環(huán)境的各種命令。如果您使用的是Windows,則可以從Anaconda提示符中通過輸入命令,來設(shè)置環(huán)境。雖然Auto-Sklearn的文檔建議用戶,從它們的requirements.txt依賴文件處開始安裝,但是就本例中的代碼而言,并不需要如此。

  1. create and activate a new virtual environment virtualenv automl --python=python3 source automl/bin/activate   
  2. # install auto-sklearn pip install auto-sklearn 

值得注意的是,如果您對兩個AutoML庫使用相同的環(huán)境,那么可能會發(fā)生沖突。因此我們需要為Auto-PyTorch創(chuàng)建第二個環(huán)境。而且該環(huán)境中的Python應(yīng)不低于3.7版本。

  1. deactivate virtualenv autopt –-python=python3.7 source autopt/bin/activate # install auto-pytorch from the github repo git clone https://github.com/automl/Auto-PyTorch.git cd Auto-PyTorch pip install -e . pip install numpy==1.20.0 pip install ipython 

我們在運行上述pip install -e,及其后面的兩個install語句時,可能會碰到如下奇怪錯誤。經(jīng)研究,我們可以通過將NumPy版本升級到1.20.0,予以修復(fù)。

  1. ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject 

如果您想為該項目做出貢獻,或想查看最新的運行代碼,請查閱如下開發(fā)分支。

  1. # (optional) git checkout development # make sure to switch back to the primary branch for the tutorial git checkout master 

由于本示例的其余代碼均使用Python來編寫,因此請您啟用Python提示符、Jupyter筆記本或文本編輯器。

本示例將包含使用標(biāo)準(zhǔn)的SciKit-Learn、Auto-Sklearn和Auto-PyTorch分類器(classifier)的基本分類演示。我們將針對每個場景,使用SciKit-Learn中的單一內(nèi)置數(shù)據(jù)集。而每個演示都會通過共享代碼的方式,來導(dǎo)入通用的依賴項,并加載和拆分對應(yīng)的數(shù)據(jù)集。

  1. import time import sklearn import sklearn.datasets 
  2. #** load and split data ** data, target = sklearn.datasets.load_iris(return_X_y=True 
  3. # split n = int(data.shape[0] * 0.8)  
  4. train_x = data[:n] train_y = target[:n] test_x = data[n:] test_y = target[n:] 

上面有關(guān)設(shè)置數(shù)據(jù)集的代碼,將被用于本示例中的每個演示模塊上。

為了節(jié)省時間,我們使用了小型的“iris”數(shù)據(jù)集(其中包括:150個樣本、4個特征和3個標(biāo)簽類別)。您完全可以在閱讀完本示例后,去試用更為復(fù)雜的數(shù)據(jù)集。

sklearn.datasets的其他分類數(shù)據(jù)集,則包括:糖尿病(load_diabetes)數(shù)據(jù)集和數(shù)字?jǐn)?shù)據(jù)集(load_digits)。其中,糖尿病數(shù)據(jù)集帶有569個樣本,每個樣本具有30個特征和2個標(biāo)簽類別;而數(shù)字?jǐn)?shù)據(jù)集則帶有1797個樣本,每個樣本具有64個特征(對應(yīng)著8x8的圖像),以及10個標(biāo)簽類別。

在開始使用sklearn的AutoML分類器之前,讓我們通過默認(rèn)的設(shè)置,從vanilla sklearn中訓(xùn)練各種標(biāo)準(zhǔn)化的分類器。雖然我們有許多可供選擇的方式,但是我們在此會沿用k最近鄰(k-nearest neighbors)分類器、支持向量機(support vector machine)分類器、以及多層感知器(multilayer perceptron)。

  1. # import classifiers from sklearn.svm import SVC from sklearn.neural_network import MLPClassifier from sklearn.neighbors import KNeighborsClassifier 
  2. # instantiate with default parameters knn = KNeighborsClassifier() mlp = MLPClassifier() svm = SVC() 

SciKit-Learn通過使用友好的擬合/預(yù)測(fit/predict)API,使得訓(xùn)練模型的過程變得輕而易舉。同時,Auto-Sklearn和Auto-PyTorch兩個軟件包也保留了相同的API,這使得三者中的任一訓(xùn)練模型,不但相似,而且易用。

  1. t0 = time.time() knn.fit(train_x, train_y) mlp.fit(train_x, train_y) svm.fit(train_x, train_y) t1 = time.time() 

同樣,各種模型的評估也比較簡單。SciKit-Learn分類模型提供一種預(yù)測方法,可被用于接收輸入數(shù)據(jù),預(yù)測標(biāo)簽,進而通過將其傳遞給sklearn.metrics.accuracy_score,來計算準(zhǔn)確度。

下面的代碼可使用k最近鄰、支持向量機,以及在最后一個代碼段中訓(xùn)練的多層感知器分類器,來計算保留測試集的各種預(yù)測和預(yù)測精度。

  1. knn_predict = knn.predict(test_x) train_knn_predict = knn.predict(train_x)  
  2. svm_predict = svm.predict(test_x) train_svm_predict = svm.predict(train_x)  
  3. mlp_predict = mlp.predict(test_x) train_mlp_predict = mlp.predict(train_x)  
  4. knn_accuracy = sklearn.metrics.accuracy_score(test_y, knn_predict) train_knn_accuracy = sklearn.metrics.accuracy_score(train_y,train_knn_predict)  
  5. svm_accuracy = sklearn.metrics.accuracy_score(test_y, svm_predict) train_svm_accuracy = sklearn.metrics.accuracy_score(train_y,train_svm_predict)  
  6. mlp_accuracy = sklearn.metrics.accuracy_score(test_y, mlp_predict) train_mlp_accuracy = sklearn.metrics.accuracy_score(train_y,train_mlp_predict)  
  7. print(f"svm, knn, mlp test accuracy: {svm_accuracy:.4f}," \ f"{knn_accuracy:.4}, {mlp_accuracy:.4}") print(f"svm, knn, mlp train accuracy: {train_svm_accuracy:.4f}," \ f"{train_knn_accuracy:.4}, {train_mlp_accuracy:.4}") print(f"time to fit: {t1-t0}"

iris數(shù)據(jù)集上的Sklearn分類器

這些模型對于iris訓(xùn)練數(shù)據(jù)集雖然十分有效,但是它們在訓(xùn)練集和測試集之間仍存在這顯著的差距。

下面,讓我們使用來自autosklearn.classification的AutoSKlearnClassifier類,對多種類型的機器學(xué)習(xí)模型,執(zhí)行超參數(shù)的搜索,并保留其中最適合的集合。如下代碼段所示,在引入通用import,并設(shè)置訓(xùn)練和測試數(shù)據(jù)集的拆分之后,我們需要導(dǎo)入并實例化AutoML分類器。

  1. import autosklearn from autosklearn.classification import AutoSklearnClassifier as ASC 
  2. classifier = ASC() classifier.time_left_for_this_task = 300  
  3. t0 = time.time() classifier.fit(train_x, train_y) t1 = time.time()  
  4. autosk_predict = classifier.predict(test_x) train_autosk_predict = classifier.predict(train_x) 
  5. autosk_accuracy = sklearn.metrics.accuracy_score( \ test_y, autosk_predict \ ) train_autosk_accuracy = sklearn.metrics.accuracy_score( \ Train_y,train_autosk_predict \ )  
  6. print(f"test accuracy {autosk_2_accuracy:.4f}") print(f"train accuracy {train_autosk_2_accuracy:.4f}") print(f"time to fit: {t1-t0}"

iris數(shù)據(jù)集上的Auto-Sklearn分類器集成

如果您不去設(shè)置time_left_for_this_task的默認(rèn)值(3600秒,即一小時),那么帶有AutoSklearnClassifier的fit方法,運行起來非常耗時。顯然,這對于簡單的iris數(shù)據(jù)集來說,是不可接受的。為此,該軟件包的配套文檔有提到,在初始化分類器對象時,時間限制應(yīng)當(dāng)被設(shè)置為輸入?yún)?shù)。

當(dāng)然,您也可以在啟用了交叉驗證的情況下,去運行fit方法。為此,您需要使用refit方法、最佳模型、以及超參數(shù),在整個訓(xùn)練數(shù)據(jù)集上進行再次訓(xùn)練。而在具體實踐中,我們發(fā)現(xiàn),與默認(rèn)設(shè)置相比,在使用交叉驗證和refit時,測試集的準(zhǔn)確率會從80%略升至86.67%(請參見下表)。

值得注意的是,在使用了predict方法去擬合AutoSklearnClassifier對象之后,我們的推理過程,會使用在AutoML超參數(shù)搜索期間,找到的最佳模型集合。

最后,讓我們來討論另一個適合深度學(xué)習(xí)的AutoML包:Auto-PyTorch。與Auto-Sklearn類似,Auto-PyTorch非常容易上手。在運行如下代碼段之前,請切換到Auto-PyTorch環(huán)境,以確保有合適的依賴項可用。

  1. import autoPyTorch from autoPyTorch import AutoNetClassification as ANC 
  2. model = ANC(max_runtime=300, min_budget=30, max_budget=90, cuda=False 
  3. t0 = time.time() model.fit(train_x, train_y, validation_split=0.1) t1 = time.time()  
  4. auto_predict = model.predict(test_x) train_auto_predict = model.predict(train_x)  
  5. auto_accuracy = sklearn.metrics.accuracy_score(test_y, auto_predict) train_auto_accuracy = sklearn.metrics.accuracy_score(train_y, train_auto_predict)  
  6. print(f"auto-pytorch test accuracy {auto_accuracy:.4}") print(f"auto-pytorch train accuracy {train_auto_accuracy:.4}"

在導(dǎo)入常用的imports,并拆分了數(shù)據(jù)之后,您可以看到:

iris數(shù)據(jù)集上的Auto-PyTorch分類器

由上述結(jié)果可知,Auto-PyTorch在擬合iris數(shù)據(jù)集方面十分高效,產(chǎn)生訓(xùn)練和測試的準(zhǔn)確度可達90秒。這比我們之前訓(xùn)練的自動化SciKit-Learn分類器,以及具有默認(rèn)參數(shù)的標(biāo)準(zhǔn)化sklearn分類器,都要好許多。

小結(jié)

總的說來,AutoML的價值主要源于超參數(shù)搜索的自動化方面。AutoML額外的抽象層和自動化超參數(shù)搜索,會提高經(jīng)典的數(shù)據(jù)科學(xué)、以及機器學(xué)習(xí)工作流的實用性、性能和效率。只要使用得當(dāng),AutoML工具不僅能夠提高應(yīng)用項目的性能,而且可以降低超參數(shù)的冗長,讓架構(gòu)搜索更具成本效益。

目前,諸如Auto-Sklearn、Auto-PyTorch、Auto-WEKA等AutoML軟件包,可以成為任何機器學(xué)習(xí)或數(shù)據(jù)科學(xué)工具的有力補充。其中,Auto-PyTorch已經(jīng)獲得了Apache 2.0的許可證,而Auto-Sklearn也可以使用BSD 3-Clause的許可證。當(dāng)然,為了讓這兩個軟件包能夠正常工作,我們需要將NumPy升級到1.20.0,以及其他各種小修小補。

原文標(biāo)題:AutoML: Using Auto-Sklearn and Auto-PyTorch,作者:Kevin Vu

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2021-10-14 09:55:28

AnsibleanacronLinux

2024-02-04 09:43:53

機器人物聯(lián)網(wǎng)

2024-06-11 10:41:14

2022-07-12 14:31:55

機器學(xué)習(xí)人工智能工具

2020-05-14 07:00:00

Linuxauto-cpufreCPU速度

2022-02-09 10:04:35

財務(wù)自動化深度學(xué)習(xí)機器學(xué)習(xí)

2021-09-08 16:03:12

Kubernetes 安全開源

2024-03-25 08:00:00

人工智能

2021-05-24 14:13:44

人工智能機器學(xué)習(xí)數(shù)據(jù)

2020-01-16 09:00:00

AI人工智能ML

2014-05-13 11:44:07

亞馬遜云游戲

2017-11-01 15:38:54

機器學(xué)習(xí)數(shù)據(jù)科學(xué)資源

2021-12-15 23:41:09

機器學(xué)習(xí)人工智能技術(shù)

2021-09-17 15:56:14

數(shù)據(jù)平臺自動化

2021-11-19 10:55:03

GitOps運維自動化

2022-11-15 17:07:40

開發(fā)自動化前端

2017-08-28 16:09:13

機器學(xué)習(xí)自動化Hyperopt

2020-04-29 11:28:54

智能自動化機器人流程自動化AI

2018-08-31 09:55:38

Ansible網(wǎng)絡(luò)自動化

2020-03-18 09:23:24

Python數(shù)據(jù)SQL
點贊
收藏

51CTO技術(shù)棧公眾號