> Photo by Lenin Estrada on Unsplash
"機器學習的聖盃之一是使越來越多的特徵工程過程自動化。"佩德羅·多明戈斯(Pedro Domingos)
介紹AutoML是指自動機器學習。它說明了如何在組織和教育水平上自動化機器學習的端到端過程。機器學習模型基本上包括以下步驟:
· 資料讀取和合並,使其可供使用。
· 資料預處理是指資料清理和資料整理。
· 最佳化功能和模型選擇過程的位置。
· 將其應用於應用程式以預測準確的值。
最初,所有這些步驟都是手動完成的。但是現在隨著AutoML的出現,這些步驟可以實現自動化。AutoML當前分為三類:
a)用於自動引數調整的AutoML(相對基本的型別)
b)用於非深度學習的AutoML,例如AutoSKlearn。此型別主要應用於資料預處理,自動特徵分析,自動特徵檢測,自動特徵選擇和自動模型選擇。
c)用於深度學習/神經網路的AutoML,包括NAS和ENAS以及用於框架的Auto-Keras。
為什麼需要AutoML?機器學習的需求日益增長。組織已經在應用程式級別採用了機器學習。仍在進行許多改進,並且仍然有許多公司正在努力為機器學習模型的部署提供更好的解決方案。
為了進行部署,企業需要有一個經驗豐富的資料科學家團隊,他們期望高薪。即使企業確實擁有優秀的團隊,通常也需要更多的經驗而不是AI知識來決定哪種模型最適合企業。機器學習在各種應用中的成功導致對機器學習系統的需求越來越高。即使對於非專家也應該易於使用。AutoML傾向於在ML管道中自動執行儘可能多的步驟,並以最少的人力保持良好的模型效能。
AutoML具有三個主要優點:
· 它透過自動化最重複的任務來提高效率。這使資料科學家可以將更多的時間投入到問題上,而不是模型上。
· 自動化的ML管道還有助於避免由手工作業引起的潛在錯誤。
· AutoML是朝著機器學習民主化邁出的一大步,它使每個人都可以使用ML功能。
讓我們看看以不同的程式語言提供的一些最常見的AutoML庫:
Python1.auto-sklearnauto-sklearn是一種自動機器學習工具包,是scikit-learn估計器的直接替代品。Auto-SKLearn將機器學習使用者從演算法選擇和超引數調整中解放出來。它包括功能設計方法,例如一站式,數字功能標準化和PCA。該模型使用SKLearn估計器來處理分類和迴歸問題。Auto-SKLearn建立管道並使用貝葉斯搜尋來最佳化該渠道。在ML框架中,透過貝葉斯推理為超引數調整添加了兩個元件:元學習用於使用貝葉斯初始化最佳化器,並在最佳化過程中評估配置的自動集合構造。
Auto-SKLearn在中小型資料集上表現良好,但無法生成在大型資料集中具有最先進效能的現代深度學習系統。
例
import sklearn.model_selectionimport sklearn.datasetsimport sklearn.metricsimport autosklearn.regressiondef main(): X, y = sklearn.datasets.load_boston(return_X_y=True) feature_types = (['numerical'] * 3) + ['categorical'] + (['numerical'] * 9) X_train, X_test, y_train, y_test = \ sklearn.model_selection.train_test_split(X, y, random_state=1) automl = autosklearn.regression.AutoSklearnRegressor( time_left_for_this_task=120, per_run_time_limit=30, tmp_folder='/tmp/autosklearn_regression_example_tmp', output_folder='/tmp/autosklearn_regression_example_out', ) automl.fit(X_train, y_train, dataset_name='boston', feat_type=feature_types) print(automl.show_models()) predictions = automl.predict(X_test) print("R2 score:", sklearn.metrics.r2_score(y_test, predictions))if __name__ == '__main__':main()
官方網站:在此處查詢文件
2. FeatureTools它是用於自動功能工程的python庫。
安裝
用pip安裝
python -m pip install featuretools
或透過conda上的Conda-forge頻道:
conda install -c conda-forge featuretools
附加元件
我們可以執行以下命令單獨安裝或全部安裝附件
python -m pip install featuretools[complete]
更新檢查器—接收有關FeatureTools新版本的自動通知
python -m pip install featuretools[update_checker]
TSFresh基本體-在Featuretools中使用tsfresh中的60多個基本體
python -m pip install featuretools[tsfresh]
例
>> import featuretools as ft>> es = ft.demo.load_mock_customer(return_entityset=True)>> es.plot()
Featuretools可以為任何"目標實體"自動建立一個特徵表
>> feature_matrix, features_defs = ft.dfs(entityset=es, target_entity="customers")>> feature_matrix.head(5)
3. MLBoxMLBox是功能強大的自動化機器學習python庫。根據官方文件,它具有以下功能:
· 快速讀取和分散式資料預處理/清理/格式化
· 高度強大的功能選擇和洩漏檢測以及精確的超引數最佳化
· 最新的分類和迴歸預測模型(深度學習,堆疊,LightGBM等)
· 使用模型解釋進行預測,MLBox已在Kaggle上進行了測試,並顯示出良好的效能。· 管道
MLBox體系結構
MLBox主軟體包包含3個子軟體包:
· 預處理:讀取和預處理資料
· 最佳化:測試或最佳化各種學習者
· 預測:預測測試資料集上的目標
4. TPOTTPOT代表基於樹的管道最佳化工具,它使用遺傳演算法最佳化機器學習管道.TPOT建立在scikit-learn的基礎上,並使用自己的迴歸器和分類器方法。TPOT探索了數千種可能的管道,並找到最適合資料的管道。
TPOT透過智慧地探索成千上萬的可能管道來找到最適合我們資料的管道,從而使機器學習中最繁瑣的部分自動化。
TPOT完成搜尋後,它將為我們提供找到的最佳管道的Python程式碼,因此我們可以從那裡修改管道。
TPOT建立在scikit-learn的基礎上,因此它生成的所有程式碼都應該看起來很熟悉……無論如何,如果我們熟悉scikit-learn。
TPOT仍在積極開發中。
例子
分類
這是具有手寫數字資料集光學識別功能的示例。
from tpot import TPOTClassifierfrom sklearn.datasets import load_digitsfrom sklearn.model_selection import train_test_splitdigits = load_digits()X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, train_size=0.75, test_size=0.25, random_state=42)tpot = TPOTClassifier(generations=5, population_size=50, verbosity=2, random_state=42)tpot.fit(X_train, y_train)print(tpot.score(X_test, y_test))tpot.export(‘tpot_digits_pipeline.py’)
此程式碼將發現達到98%的測試精度的管道。應將相應的Python程式碼匯出到tpot_digits_pipeline.py檔案,其外觀類似於以下內容:
import numpy as npimport pandas as pdfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.linear_model import LogisticRegressionfrom sklearn.model_selection import train_test_splitfrom sklearn.pipeline import make_pipeline, make_unionfrom sklearn.preprocessing import PolynomialFeaturesfrom tpot.builtins import StackingEstimatorfrom tpot.export_utils import set_param_recursive# NOTE: Make sure that the outcome column is labeled ‘target’ in the data filetpot_data = pd.read_csv(‘PATH/TO/DATA/FILE’, sep=’COLUMN_SEPARATOR’, dtype=np.float64)features = tpot_data.drop(‘target’, axis=1)training_features, testing_features, training_target, testing_target = \ train_test_split(features, tpot_data[‘target’], random_state=42)# Average CV score on the training set was: 0.9799428471757372exported_pipeline = make_pipeline( PolynomialFeatures(degree=2, include_bias=False, interaction_only=False), StackingEstimator(estimator=LogisticRegression(C=0.1, dual=False, penalty=”l1")), RandomForestClassifier(bootstrap=True, criterion=”entropy”, max_features=0.35000000000000003, min_samples_leaf=20, min_samples_split=19, n_estimators=100))# Fix random state for all the steps in exported pipelineset_param_recursive(exported_pipeline.steps, ‘random_state’, 42)exported_pipeline.fit(training_features, training_target)results = exported_pipeline.predict(testing_features)
迴歸
TPOT可以最佳化管道以解決迴歸問題。以下是使用波士頓房屋價格資料集的最小工作示例。
from tpot import TPOTRegressorfrom sklearn.datasets import load_bostonfrom sklearn.model_selection import train_test_splithousing = load_boston()X_train, X_test, y_train, y_test = train_test_split(housing.data, housing.target, train_size=0.75, test_size=0.25, random_state=42)tpot = TPOTRegressor(generations=5, population_size=50, verbosity=2, random_state=42)tpot.fit(X_train, y_train)print(tpot.score(X_test, y_test))tpot.export(‘tpot_boston_pipeline.py’)
這將導致流水線達到約12.77均方誤差(MSE),tpot_boston_pipeline.py中的Python程式碼應類似於:
import numpy as npimport pandas as pdfrom sklearn.ensemble import ExtraTreesRegressorfrom sklearn.model_selection import train_test_splitfrom sklearn.pipeline import make_pipelinefrom sklearn.preprocessing import PolynomialFeaturesfrom tpot.export_utils import set_param_recursive# NOTE: Make sure that the outcome column is labeled ‘target’ in the data filetpot_data = pd.read_csv(‘PATH/TO/DATA/FILE’, sep=’COLUMN_SEPARATOR’, dtype=np.float64)features = tpot_data.drop(‘target’, axis=1)training_features, testing_features, training_target, testing_target = \ train_test_split(features, tpot_data[‘target’], random_state=42)# Average CV score on the training set was: -10.812040755234403exported_pipeline = make_pipeline( PolynomialFeatures(degree=2, include_bias=False, interaction_only=False), ExtraTreesRegressor(bootstrap=False, max_features=0.5, min_samples_leaf=2, min_samples_split=3, n_estimators=100))# Fix random state for all the steps in exported pipelineset_param_recursive(exported_pipeline.steps, ‘random_state’, 42)exported_pipeline.fit(training_features, training_target)results = exported_pipeline.predict(testing_features)
Github連結:-https://github.com/EpistasisLab/tpot
5 LightwoodLightwood就像機器學習的樂高玩具。
一個基於Pytorch的框架,它將機器學習問題分解為較小的塊,可以與一個目標無縫地粘合在一起:
· 讓它變得如此簡單,以至於您只需要一行程式碼就可以構建預測模型。
安裝我們可以從pip安裝Lightwood:
pip3 install lightwood
注意:根據我們的環境,在上面的命令中我們可能必須使用pip而不是pip3。
鑑於簡單的sensor_data.csv,我們可以預測sensor3的值。
從Lightwood匯入預測變數
from lightwood import Predictor
訓練模型。
import pandassensor3_predictor = Predictor(output=['sensor3']) .learn(from_data=pandas.read_csv('sensor_data.csv'))
現在我們可以預測sensor3的值。
prediction = sensor3_predictor.predict(when={'sensor1':1, 'sensor2':-1})
官方連結:https://github.com/mindsdb/lightwood
6. MindsDBMindsDB是現有資料庫的開源AI層,可讓您輕鬆使用SQL查詢來開發,訓練和部署最新的機器學習模型。
官方連結:https://github.com/mindsdb/mindsdb
7. mljar-supervisedmljar-supervised是一個自動化的機器學習Python軟體包,可用於表格資料。它旨在為資料科學家節省時間time。它抽象了預處理資料,構建機器學習模型以及執行超引數調整以找到最佳模型common的通用方法。這不是黑盒子,因為您可以確切地看到ML管道的構造方式(每個ML模型都有詳細的Markdown報告)。
在mljar-supervised中,將幫助您:
· 解釋和理解您的資料,
· 嘗試許多不同的機器學習模型,
· 透過分析建立有關所有模型的詳細資訊的Markdown報告,
· 儲存,重新執行和載入分析和ML模型。
它具有三種內建的工作模式:
· 解釋模式,非常適合於解釋和理解資料,其中包含許多資料解釋,例如決策樹視覺化,線性模型係數顯示,排列重要性和資料的SHAP解釋,
· 執行構建用於生產的ML管道,
· 競爭模式,用於訓練具有整合和堆疊功能的高階ML模型,目的是用於ML競賽中。
官方連結:-https://github.com/mljar/mljar-supervised
8. Auto-KerasAuto-Keras是由DATA Lab開發的用於自動機器學習(AutoML)的開源軟體庫。Auto-Keras建立在深度學習框架Keras之上,提供自動搜尋深度學習模型的體系結構和超引數的功能。
Auto-Keras遵循經典的Scikit-Learn API設計,因此易於使用。當前版本提供了在深度學習期間自動搜尋超引數的功能。
在Auto-Keras中,趨勢是透過使用自動神經體系結構搜尋(NAS)演算法來簡化ML。NAS基本上使用一組演算法來自動調整模型,以取代深度學習工程師/從業人員。
官方連結:https://github.com/keras-team/autokeras
9,神經網路智慧 NNI用於神經體系結構搜尋和超引數調整的開源AutoML工具包。NNI提供了CommandLine Tool以及使用者友好的WebUI來管理訓練實驗。使用可擴充套件的API,您可以自定義自己的AutoML演算法和培訓服務。為了使新使用者容易使用,NNI還提供了一組內建的最新AutoML演算法,併為流行的培訓平臺提供了開箱即用的支援。
10. Ludwig路德維希(Ludwig)是一個工具箱,可讓使用者無需編寫程式碼即可訓練和測試深度學習模型。它建立在TensorFlow之上,Ludwig基於可擴充套件性原則構建,並基於資料型別抽象,可以輕鬆新增對新資料型別和新模型架構的支援,可供從業人員快速培訓和測試深度學習模型以及由研究人員獲得的強基準進行比較,並具有實驗設定,可透過執行相同的資料處理和評估來確保可比性。
路德維希提供了一組模型體系結構,可以將它們組合在一起以為給定用例建立端到端模型。舉例來說,如果深度學習圖書館提供了建造建築物的基礎,路德維希提供了建造城市的建築物,您可以在可用建築物中進行選擇,也可以將自己的建築物新增到可用建築物中。
· 無需編碼:不需要任何編碼技能即可訓練模型並將其用於獲取預測。
· 通用性:新的基於資料型別的深度學習模型設計方法使該工具可在許多不同的用例中使用。
· 靈活性:經驗豐富的使用者對模型的建立和培訓具有廣泛的控制權,而新使用者則會發現它易於使用。
· 可擴充套件性:易於新增新的模型架構和新的特徵資料型別。
· 可理解性:深度學習模型的內部通常被認為是黑匣子,但是路德維希(Ludwig)提供了標準的視覺化效果來了解其效能並比較其預測。
· 開源:Apache License 2.0
官方連結:-https://github.com/uber/ludwig
11. AdaNetAdaNet是基於TensorFlow的輕量級框架,可在最少的專家干預下自動學習高質量的模型。AdaNet建立在AutoML最近的努力基礎上,以提供快速的,靈活的學習保證。重要的是,AdaNet提供了一個通用框架,不僅用於學習神經網路體系結構,而且還用於學習整合以獲得更好的模型。
AdaNet具有以下目標:
· 易於使用:提供熟悉的API(例如Keras,Estimator)用於訓練,評估和提供模型。
· 速度:可用計算進行擴充套件,並快速生成高質量的模型。
· 靈活性:允許研究人員和從業人員將AdaNet擴充套件到新穎的子網體系結構,搜尋空間和任務。
· 學習保證:最佳化提供理論學習保證的目標。
官方連結:https://github.com/tensorflow/adanet
12.Darts(可差分架構搜尋)該演算法基於架構空間中的連續鬆弛和梯度下降。它能夠有效地設計用於影象分類的高效能卷積體系結構(在CIFAR-10和ImageNet上),以及用於語言建模的迴圈體系結構(在Penn Treebank和WikiText-2上)。只需要一個GPU。
官方連結:-https://github.com/quark0/darts
13. automl-gs提供一個輸入的CSV檔案和一個您希望預測為automl-gs的目標欄位,並獲得訓練有素的高效能機器學習或深度學習模型以及本機Python程式碼管道,使您可以將該模型整合到任何預測工作流中。沒有黑匣子:您可以確切地看到如何處理資料,如何構建模型以及可以根據需要進行調整。
automl-gs是一種AutoML工具,與Microsoft的NNI,Uber的Ludwig和TPOT不同,它提供了零程式碼/模型定義介面,可在多個流行的ML / DL框架中以最少的Python依賴關係獲得最佳化的模型和資料轉換管道。
官方連結:-https://github.com/minimaxir/automl-gs
R14. AutoKeras的R介面AutoKeras是用於自動機器學習(AutoML)的開源軟體庫。它是由德克薩斯農工大學的DATA Lab和社群貢獻者開發的。AutoML的最終目標是為資料科學或機器學習背景有限的領域專家提供易於訪問的深度學習工具。AutoKeras提供了自動搜尋深度學習模型的體系結構和超引數的功能。
在RStudio TensorFlow for R部落格上檢視AutoKeras部落格文章。
官方文件:https://github.com/r-tensorflow/autokeras
Scala15. TransmogrifAITransmogrifAI(發音為trăns-mŏgˈrə-fī)是用Scala編寫的AutoML庫,它在Apache Spark之上執行。它的開發重點是透過機器學習自動化來提高機器學習開發人員的生產率,以及一個用於強制執行編譯時型別安全,模組化和重用的API。透過自動化,它實現了接近手動調整模型的精度,時間減少了近100倍。
如果您需要機器學習庫來執行以下操作,請使用TransmogrifAI:
· 數小時而不是數月內即可構建生產就緒的機器學習應用程式
· 在沒有博士學位的情況下建立機器學習模型在機器學習中
· 構建模組化,可重用,強型別的機器學習工作流程
官方連結:https://github.com/salesforce/TransmogrifAI
Java16. GlaucusGlaucus是基於資料流的機器學習套件,它結合了自動機器學習管道,簡化了機器學習演算法的複雜過程,並應用了出色的分散式資料處理引擎。對於跨領域的非資料科學專業人士,幫助他們以簡單的方式獲得強大的機器學習工具的好處。
使用者只需要上傳資料,簡單配置,演算法選擇,並透過自動或手動引數調整來訓練演算法。該平臺還為培訓模型提供了豐富的評估指標,因此非專業人員可以最大限度地發揮機器學習在其領域中的作用。整個平臺結構如下圖所示,主要功能是:
· 接收多源資料集,包括結構化,文件和影象資料;
· 提供豐富的數學統計功能,圖形介面使使用者輕鬆掌握資料情況;
· 在自動模式下,我們實現了從預處理,特徵工程到機器學習演算法的全管道自動化;
· 在手動模式下,它極大地簡化了機器學習流程,並提供了自動資料清理,半自動特徵選擇和深度學習套件。
其他工具17. H20 AutoMLH2O AutoML介面設計為具有儘可能少的引數,因此使用者所需要做的只是指向他們的資料集,標識響應列,並可選地指定時間限制或訓練的總模型數量的限制。
在R和Python API中,AutoML與其他H2O演算法使用相同的資料相關引數x,y,training_frame,validation_frame。大多數時候,您需要做的就是指定資料引數。然後,您可以為max_runtime_secs和/或max_models配置值,以在執行時設定明確的時間或模型數量限制。
官方連結:https://github.com//h2oai/h2o-3/blob/master/h2o-docs/src/product/automl.rst
18. PocketFlowPocketFlow是一個開源框架,用於以最少的人力來壓縮和加速深度學習模型。深度學習廣泛用於計算機視覺,語音識別和自然語言翻譯等各個領域。但是,深度學習模型通常在計算上很昂貴,這限制了在計算資源有限的移動裝置上的進一步應用。
PocketFlow旨在為開發人員提供一個易於使用的工具包,以提高推理效率而幾乎不降低效能或不降低效能。開發人員只需指定所需的壓縮和/或加速比,然後PocketFlow將自動選擇適當的超引數以生成用於部署的高效壓縮模型。
官方連結:-https://github.com/Tencent/PocketFlow
19.RayRay提供了用於構建分散式應用程式的簡單通用API。
Ray與以下庫打包在一起,以加快機器學習的工作量:
· Tune:可伸縮超引數調整
· RLlib:可擴充套件的強化學習
· RaySGD:分散式培訓包裝器
· Ray Serve:可擴充套件和可程式設計服務
使用以下方式安裝Ray:pip install ray
官方連結:https://github.com/ray-project/ray
20. SMAC3SMAC是用於演算法配置的工具,可以跨一組例項最佳化任意演算法的引數。這還包括ML演算法的超引數最佳化。主要核心包括貝葉斯最佳化和積極的競速機制,可有效地確定兩種配置中哪一種的效能更好。
有關其主要思想的詳細說明,請參閱
Hutter, F. and Hoos, H. H. and Leyton-Brown, K.Sequential Model-Based Optimization for General Algorithm ConfigurationIn: Proceedings of the conference on Learning and Intelligent OptimizatioN (LION 5)
SMAC v3是用Python3編寫的,並經過了Python 3.6和python3.6的持續測試。它的隨機森林用C ++編寫。
結論autoML庫非常重要,因為它們可以自動執行重複任務,例如管道建立和超引數調整。它為資料科學家節省了時間,因此他們可以將更多的時間投入到業務問題上。AutoML還允許每個人代替一小部分人使用機器學習技術。資料科學家可以透過使用AutoML實施真正有效的機器學習來加速ML開發。
讓我們看看AutoML的成功將取決於組織的使用情況和需求。時間將決定命運。但是目前我可以說AutoML在機器學習領域中很重要。
索拉夫·阿南德(Saurav Anand)