█ 本文譯自進階研究團隊首席架構師 Etienne Bernard 于2017年10月10日的部落格文章: Building the Automated Data Scientist : The New Classify and Predict
自動化資料科學
想象一下,面包師将資料科學應用程式連接配接到他的資料庫,并問:"我們下周日要賣出多少個羊角面包?" 應用程式将簡單地回答:"根據您記錄的資料和其他因素,如天氣預報,有90%的機會,會賣出62到67個羊角面包。" 面包師可以相應地進行規劃。這就是一個自動化資料科學家的例子,它其實是一個系統,你可以對其抛出任意資料并獲得分析或預測。
将此變為現實的一個關鍵因素是學習預測模型的能力,而人類除了資料之外無需給出任何規範。在 Wolfram 語言中,函數 Classify 和 Predict 就起着這樣的作用。例如,讓我們訓練一個分類器,從美味齒菌(Hedgehog)中識别羊肚菌(Morel):

現在我們可以将得到的 ClassifierFunction 用于新的例子:
我們可以獲得每種可能性的機率:
再舉一個例子,我們來訓練一個預測函數 PredictorFunction 來預測美國一些城市的月平均氣溫(https://datarepository.wolframcloud.com/resources/Sample-Data-US-City-Temperature):
同樣,我們可以使用得到的函數進行預測:
我們可以獲得預測的分布:
正如你所看到的,我們不需要告訴 Classify 和 Predict 變量是什麼,要執行什麼預處理或使用哪種算法,它們是自動化的函數。
Classify 和 Predict 的全新功能
Classify 和 Predict 是大概三年前我們在 Wolfram 語言第10版引入的,并且欣慰地看到它在各種環境中得以使用(我個人最喜歡的是跟宇航員、飛機和 Raspberry Pi 相關,詳見 http://community.wolfram.com/groups/-/m/t/1179035)。在版本11.2中, 我們給兩個函數做了完整的改造。最明顯的更新是引入了一個資訊面闆,以便在訓練期間得到回報:
有了這個面闆,我們可以監控目前最好的方法及目前的準确性,并且可以了解訓練将持續多長時間——這在決定是否值得繼續時非常有用! 如果要停止訓練,有兩種方式:可以通過"停止"按鈕或直接中止運算來實作。在這兩種情況下,Classify 和 Predict 到此前為止的最佳模式被傳回(但是"停止" 中斷更柔和:它等到目前訓練結束時停止)。
在分類器或預測器上使用 ClassifierInformation 和 PredictorInformation 時,将顯示一個類似的面闆:
我們嘗試顯示關于模型的有用資訊,例如在測試集上的準确性、運算新示例所需時間及記憶體大小等。更重要的是,您可以在底部看到一條"學習曲線?imageView2/2/w/1620",顯示作為用于訓練的示例數的函數的損失值(一個嘗試最小化的度量)。通過按左/右箭頭,還可以檢視其他曲線,例如作為訓練樣本數量的函數的準确度:
這類曲線有助于弄清楚是否需要更多的資料進行訓練(例如當曲線趨于平穩時)。我們希望對這些曲線的輕松通路可以簡化模組化工作流程(例如,可能減少使用 ClassifierMeasurements 和 PredictorMeasurements 的需要)。
一項重要更新是 TimeGoal 選項的添加,它允許人們指定訓練需要多長時間,例如:
TimeGoal 的含義與 TimeConstraint 不同:它不是指定一個最大的時間量,而是一個實際上應該達到的目标。設定更高的時間目标 TimeGoal 可以讓自動化系統嘗試更多其他的東西,以便找到更好的模型。 我認為這将使得 TimeGoal 成為 Classify 和 Predict 最重要的選項(緊随其後是 Method 和 PerformanceGoal 選項)。
在方法方面,也發生了一些變化。每個方法都有自己的文檔頁面("LogisticRegression"、"NearestNeighbors" 等),它提供了通用資訊,并允許高手使用各種介紹的選項。我們還添加了 兩個新方法:"DecisionTree" 和 "GradientBoostedTrees",這是資料科學家的最愛。這是一個簡單的預測執行個體:
主要更新
現在我們來看看版本11.2的主要更新,它不是直接可見的:我們重新實作了Classify 和 Predict 确定最優方法和超參數的方式,對給定的資料集(在某種意義上,這是自動化的核心)。 對于有興趣的朋友,我在這裡簡單解釋下這個過程如何适用于 Classify。
訓練分類器需要使用某個方法(如"LogisticRegression"、"RandomForest"等),并且每個方法需要給出一些超參數(如 "L2Regularization" 或 "NeighborsNumber")。自動化過程根據分類器(按配置進行訓練)在測試集上的執行效果,以及分類器的記憶體有多快或多小,選出待用的最佳配置(即最佳方法+超參數)。在沒有實際訓練和測試的情況下,很難判斷給定的配置是否表現良好。我們的程式思想是從多個我們認為可以表現良好的配置(比方說100個)開始,在小資料集上訓練這些配置,并使用在這些"實驗"中收集的資訊,預測配置在完整資料集上的表現。預測并不完美,但它們有助于選出一組有前途的配置,在更大的資料集上訓練,進而收集更多資訊(您可能會注意到這與 Hyperband 過程有一些相似)。這個操作不斷重複,直到隻有幾個配置(有時甚至隻有一個)在完整的資料集被訓練。這是執行此操作的某些配置(每條曲線表示一個不同的配置)的損失函數的可視化:
正如你所看到的,許多配置在10和40個例子上進行了訓練,其中隻有幾個在200個例子上訓練,隻有一個在800個例子上訓練。我們發現,在基準中最終的配置通常是最佳的 (在初始配置集中存在的那些)。此外,由于對較小資料集的訓練更快,是以整個過程所需的時間并不比在完整資料集上訓練一個配置所需的時間長很多, 可以想象,這比在完整資料集上訓練所有配置要快得多!
這種自動化政策除了比以前的版本快之外,也是前面所提到的一些新功能所必要的。例如,該過程直接生成模型性能和學習曲線的估計。此外,它還可以顯示進度條,并快速生成有效的模型,一旦按下停止按鈕即可傳回。最後,它可以根據可用時間量調整中間訓練的次數,進而使得引入 TimeGoal 選項成為可能。
歡迎您使用新版本的 Classify 和 Predict,并将使用過程中的心得和建議回報給我們。通向完全自動化的資料科學家之路還很漫長,但我們離目标越來越近了!