近年來,數據科學呈現出了兩個明顯的趨勢:
1.越來越多的數據分析和模型訓練通過雲計算完成
2.機器學習工作流水線(英文名稱為pipeline)自身正在通過算法進行優化
使用Google Colab進行雲計算
如今,幾乎每個人都擁有自己的計算機。但筆記本電腦和台式電腦一般只適用於日常性的工作。而如今機器學習要處理的數據集越來越大,對算力的要求也越來越高,利用雲計算進行機器學習幾乎是普通用戶的不二選擇。
在本文,我們將用雲上的Jupyter Notebook來運行一個簡單的數據工作流程。使用的是Google最新的黑科技Google Colab——一個免費在線的Jupyter Notebooks(目前只有Python內核)。這個產品的出現意味着無論你身處哪裡,個人電腦是否帶在身邊,只要能聯網,就可以跑自己的機器學習模型。Google的虛擬機上已經配置好了大部分你所需要的數據科學庫,無需配置環境就可以直接使用,而且還可以免費使用一個NVIDIA Tesla K80 GPU!!!
要使用Colab,你只需要能夠聯網(國內的同學需要科學上網)以及一個Google賬號。事不宜遲,趕緊跟隨我一起來探索Google Colab吧。這篇文章對應的notebook在這裡:https://colab.research.google.com/drive/1CIVn-GoOyY3H2_Bv8z09mkNRokQ9jlJ-
複製到Chrome瀏覽器,直接打開,需要登錄Google賬號。打開之後的界面是下面這樣的,點擊文件>在雲端硬盤中保存一份副本。然後你就可以在自己的Drive上打開這個文件進行編輯和運行。

可以說,Google Colab明顯降低了利用雲計算的門檻。不難想象,類似的在線資源在日後將會越來越容易獲得。對於已經在本地電腦用過Jupyter Notebooks的同學來說,這是一個向雲計算過渡的好機會。
適用TPOT進行機器學習自動化
接下來,向同學們介紹另外一樣神器——機器學習自動化(縮寫為Auto-ml)。它能夠通過算法為特定的問題設計和優化機器學習工作流水線。在本文中,機器學習流水線包括以下幾個步驟:
1.特徵預處理: 填充缺失值,縮放,構建新的特徵
2.特徵選擇:降維
3.模型選擇:對多個模型進行評估
4.調參:找到最佳的模型超參數設置
對以上的四個步驟進行組合你可以得到幾乎無限多種流水線,而每個問題的最佳解決方式都不一樣。設計一個機器學習流水線是一個非常消耗時間以及容易踩坑的過程,所以我們一般無法遍歷所有流水線,也就是說你永遠不知道你設計出來的流水線是不是最優的。這個時候,機器學習自動化出現了,它可以幫助你評估成千上萬種可能的流水線的表現,自動找出最優的(或接近最優的)解決方案。
機器學習只是數據科學的一部分,機器學習自動化並不意味着可以替代數據科學家。相反,機器學習自動化可以解放數據科學家的雙手,讓他們可以專註於更有價值的部分,比如數據收集、模型解釋等等
目前已經有許多機器學習自動化的工具——H20、auto-sklearn、Google Cloud AutoML以及接下來我要重點介紹的TPOT(Tree-based Pipeline Optimization Tool,樹型流水線優化工具)。TPOT主要是基於遺傳算法的原理來尋找最佳的機器學習流水線。

遺傳算法對於建立機器學習模型的主要好處就是深度的探索。對於人來說,即使沒有時間的限制,也無法嘗試完所有的預處理、模型、超參數的組合,畢竟個人的知識和想象力是有限的。而遺傳算法對於任何機器學習流水線都不會有初始的偏見(人類可能會根據自己的經驗,產生一些偏見),每一條流水線都會被客觀地評估。此外,遺傳算法中的適應度函數使得流水線探索空間中,最有潛力的組合區域比表現差的區域探索地更為徹底,這也是遺傳算法的一大優勢。
兩者相結合:雲上的機器學習自動化
來來來,這個實現其實很簡單!有了前面所述的背景,我們就可以愉快地在Google Colab上使用TPOT來實現機器學習的自動化。
我們接下來嘗試去解決一個監督回歸的問題 : 通過紐約市的能源數據,我們希望預測出建築物的能源星級。筆者曾經手動地進行特徵工程、降維、模型篩選、調參,最後訓練出了一個Gradient Boosting 回歸模型,在測試集上的平均絕對誤差是9.06。讓我們來看看自動化後得到的模型性能如何?
數據集包含了幾十個連續型數值變量(比如建築的能源使用量和建築面積)以及兩個獨熱編碼的分類變量(地區名與建築類型),總計有82個特徵。
首先,我們需要確定在Google Colab的環境裡面是否已經安裝了TPOT。一般來說,大多數的數據科學包都已經安裝好了,如果要添加新的包,可以使用如下的命令(記得在前面加“!”):

在讀取數據後,我們通常會填充缺失的值以及將特徵歸一化。好消息是,除了前面所述的特徵工程、模型選擇、調參,TPOT還會自動填充缺失值和進行特徵縮放!所以,我們下一步只需要創建TPOT優化器就可以了。

使用默認參數,TPOT優化器會創建100個流水線,每個流水線演化100代,得出這1萬個流水線的評分。使用十折交叉驗證,這意味着將有10萬次訓練要跑!即使我們使用的是Google的計算資源,但還是會有時間限制的。為了避免超出Colab服務器的使用時限(Google只允許12個小時的連續運行時間),我們將設置TPOT的運行時間最大為8小時,儘管TPOT的一般運行時間是幾天,但是通過幾個小時的優化,我們仍然能得到不錯的模型。
我們將設置如下的參數:
● scoring = neg_mean_absolute error : 回歸表現的評估指標
● max_time_minutes = 480: 限制運行時間為8小時
● n_jobs = -1: 使用計算機上的所有可用核心
● verbosity = 2: 訓練時顯示有限的信息
● cv = 5: 使用5折交叉驗證(默認值為10)
當然,還有其他的參數可以設置,但是它們保留默認值也適用於大多數情況,在這裡就不再另外設置。
TPOT優化器的語法設計與Scikit-Learn模型相同,因此我們可以使用.fit方法訓練優化器。

在訓練過程中,我們獲得了如下的信息:

由於時間限制,每個流水線只能演化15代,這意味着我們評估了1500個不同的獨立流水線的得分,已經比我們手動嘗試要多得多了!
一旦模型訓練好了,我們可以通過 tpot.fitted_pipeline_ 查看最優的流水線。我們還可以將模型保存到一個Python腳本中:

由於我們使用的是Google Colab notebook,如果我們要從服務器上將這個流水線下載到本地,則需要使用Google Colab的文件管理庫:
我們可以打開 tpot_exported_pipeline.py 文件查看完整的流水線:

(這個文件的下載地址在文末)
我們可以看到,優化器已經為我們填充了缺失值並且建立了一個完整的流水線!最終的預測模型是一個融合了 LassoLarsCV 和 GradientBoostingRegressor 兩種算法的融合模型(Stacking model)。實話說,如果我自己動手訓練,可能無法得到這樣一個複雜的模型。
現在,激動人心的時刻到了,讓我們來看看模型在測試集上的表現。我們可以使用.score來獲得平均絕對誤差:

這個項目我曾經自己手動花了幾個小時完成,最終得到的Gradient Boosting Regressor 模型得到的平均絕對誤差是9.06。機器學習自動化真的顯著地提高了最終模型的表現,也大幅減少了開發時間。
總結一下
在這篇文章中,我們簡要地介紹了使用雲計算進行機器學習以及機器學習自動化。只要你有谷歌賬號同時能聯網,那麼就可以使用Google Colab 進行開發,運行和分享機器學習工作文件。使用TPOT,可以通過自動化的訓練和評估過程獲得最優的機器學習流水線(包括特徵預處理、模型選擇、調參).另外,我們也意識到,機器學習自動化並不會替代數據科學家,反而它會讓數據科學家能夠抽出更多的時間花在更有價值的工作中。
作為一個新誕生的事物,TPOT已經相對成熟,而且非常易於使用。大家還不趕緊運用這個方法去嘗試解決機器學習的問題(Kaggle上有很多不錯的項目)!在Google Colab 的notebook上運行一個自動化的機器學習項目,簡直未來感十足有木有,而且門檻居然如此之低,不說了,小編突然想在手機上跑下試試~

完美運行!
文中所提到的相關文件下載地址:
https://colab.research.google.com/drive/1CIVn-GoOyY3H2_Bv8z09mkNRokQ9jlJ-
https://github.com/WillKoehrsen/machine-learning-project-walkthrough/blob/master/auto_ml/tpot_exported_pipeline.py
文-William Koehrsen
譯- Allen
原文-https://towardsdatascience.com/automated-machine-learning-on-the-cloud-in-python-47cf568859f
預測房價、狗狗識別、降為分析,硅谷超棒的實戰項目等你挑戰。點擊以下卡片,優達學城創始人 Sebastian 親自教授你人工智能中很重要的建模和算法基礎,快人一步,成為搶手人才!