Amazon機器學習回顧-機器學習初體驗
英文原文:Review of Amazon Machine learning – first experience with machine learning
我擁有丹麥最好的技術大學的軟件工程學士學位,我還擁有商業碩士學位。
我把自己看成是相當技術型的人才。我的工作是確保公司的開發人員寫出優秀的代碼,以及我們選用合適架構方面的決策。我們做著優秀的工作,客戶貌似喜歡我們(是的,他們堅持買我們的東西!)。
不過我是一名商人。在商言商,我對機器學習和人工智能(由于某種原因,我認為它是一樣的——好吧,換句說法,過去認為是一樣的)感到非常激動。我相信這就是未來,我完全想開發下一代應用了“機器學習”的產品,以此來統治世界。
但是我在機器學習、人工智能、深度學習或我看過的、任何其它奇特的術語方面,沒有相關經驗。
當 Amazon 上線了 Amazon Machine Learning 時,我激動萬分。因為我可以變成一名 AI、機器學習黑客,準備 hack 整個世界。
我觀看了他們的介紹視頻(時長大約 30 分鐘),它看起來非常酷。當主持人演示的時候,它貌似相當簡單。有了這個念頭,我覺得這就是我不得不嘗試的東西。
我對 Amazon Machine Learning 的回顧和體驗
我的一個客戶是丹麥的一家大型網店。我提取了過去 5.5 年的收益數據,大約 2000 行。
這意味著我有了一份文件:
- 創建時間
- 收益
現在我的(幼稚嗎?)命題是:讓我們導入該工具,等 5 分鐘,就得到了一份幾乎完美的、對未來的預測。我想,最大有 5-10% 的誤差。
我打開這個工具,創建了一份新的數據源,準備震驚全世界。失敗了。
Fuck?失敗了?
我核查數據源,哦,在我的列里面沒有空格。還算合理,重試一下。
失敗。
可能是它不喜歡我的時間格式。很明顯,丹麥的時間格式不是主流的,才給出了錯誤。
我打算找到我的 Python 技巧,導入這份數據,再看看。
我最終創建了一份新的數據文件,有一些列,ID、正確的時間、最重要的是:格式良好的收益列。
我創建了一個數據源。成功。
現在我準備好了。我最后打敗了這個系統,可以繼續了。
我把收益選為目標數據,把時間選為類別。點擊,點擊,請快快預測。
系統提示 pending(掛起)。
在 10 分鐘后,系統提示數據準備好了!(我猜測,10 分鐘意味著數據是如此地完美,我可以告訴客戶去讓整個商業智能團隊感到激動、并使用我的機器學習技巧。)
輸出了一份文件,有兩列,“score(分數)”一列的數字形如“0.631”、“0.521”。
我試著看了下接口,找不到“預測未來值”的按鈕。
我繼續隨便點擊,沒有反應。在我的 Amazon 存儲里,出現了一些奇怪的圖片、奇怪的數字和奇怪的文件。
我本可以放棄的……
我可能想得太簡單了(你能夠看得出來),但是至少我明白了我的局限。
我來到 Upwork(早期的 Odesk),尋求幫助。淘汰了一群差勁的申請人,我找到了我的救星。
來自巴西的 Mario Filho 在其個人主頁給出了報價(20 美元/小時):
我對使用寬泛的機器學習算法富有經驗,包括監督學習【注1】(分類問題【注2】、回歸分析【注3】)和非監督式學習【注4】(聚類【注5】),用數據解決現實世界的問題。
如果你雇傭我,我將采取以下步驟來確保你的數據項目成功:
- 理解你的目標和期望。
- 清理和準備數據。
- 開發符合技術標準的模型。
- 報告測試環境下的性能。
- 部署模型到生產環境。
看起來像是我需要的家伙。或許他從來沒有用過 Amazon Machine Learning,但是我肯定“0.631”、“0.521”的結果對于他而言,要比我有意義得多。
(小推薦:如果你需要機器學習方面的幫助,請聯系他在 LinkedIn 上的主頁:https://www.linkedin.com/in/mariofilho ——非常有幫助、友好、深諳這方面的東東!我認為他不會一直保持當前的報價——但是,即使再高一些,也是值得的。)
我給他發送了我的訂單收益,告訴他,如果有結果,我們做一個視頻錄制【注5】。
兩小時后,Mario 準備好了。
天哪:Amazon Machine Learning 太復雜了
我在屏幕錄制里看到的第一個東東是他寫的長達 49 行的 Python “小”腳本,用于美化數據。我被觸動了:不支持對其它類型文件的“upload button”的點擊操作?
真相是:不支持。接下來的 30 分鐘是令人驚奇的。
Mario 做了多份數據源(很明顯,你需要針對你的數據、測試和評估的數據源)。他做了批預測,他做了你需要得到真實數據的所有工作。
我被觸動了。
我想,在看完初始化的介紹視頻之后,我有了一個機會。
孩子,我錯了。我自己搞定是絕對沒有可能的。
最后,我們試著上傳一個文件做為數據源,我們能夠用來產生一個對 2015-5-7(我們直到 2015-5-6 才有收益)的預測。
我們得到了一個數字。
我將其和真實數據比較,發現我們有 14% 的誤差幅度。
我正準備告訴 Mario 這是多么棒,但是 Mario 已經寫了下面的 Python 小函數(好吧,因為他是巴西的?),然后運行:
def mape (y_true,y_pred):
print ‘MAPE’, np.abs ((y_true – y_pred) / y_true) .mean ()
結果表明,我們的誤差有 34%。
34%?太……差勁了!
我震驚了!34%?
我不能給客戶說,讓他們的商業智能團隊對 34% 的誤差幅度感到激動!
Mario 讓我冷靜一下,他對我說,有一些細節需要考慮:
- 你不得不清理離群值的數據集(明顯的數據點)
- 我們可以從普通的機器學習技巧中獲益,比如標準化【注6】
- Aamzon 使用非常簡單的線性回歸技術。他指出了有幫助的、關于梯度增強決策方面的東東。
- 為數據的具體子集創建模型(比如每個 SKU、或地區的模型)
- 特征工程:創建相關特征,探索它們之間的交互(我仍然根本不知道它的意思……很可能是重要的東東)
他對我說,機器學習是艱苦卓絕的工作,你不得不和你的數據泡在一起,然后才能期望更好的結果。
很明顯,這意味著機器學習很難。
在和 Mario 談了 30 分鐘后,他在 Skype 給我寫道:
“最后一件事(我保證),我運行梯度增強決策樹模型,只是想看看發生了什么,平均絕對百分誤差下降到了 25%。這是好的信號,一個更加復雜的模型,經過調教參數,可以給出更好的誤差。”
現在,我們正在靠近最好的情況!再做些額外的工作,誰知道會不會降低到 15-20%?
不管怎樣,我對這個結果感到非常可悲。這么說吧,我們付出了大量努力,將誤差幅度降到了 15%。這對于預測未來不是非常好。
不過,我犯了一個大錯誤:我不理解什么是機器學習。
Amazon Machine Learning 是讓人厭煩的數學,而不是意欲統治世界的邪惡 AI。
Amazon Machine Learning 相當簡單。
它僅僅要做的是大量的數學,它是線性回歸。它是簡單的、大量矩陣計算,然后從模型中找到可選值。
機器學習不理解你的數據。機器學習是統計學和計算機科學的簡單組合。
回頭看看,我太幼稚了。
當然,我該怎樣期望比 25% 更好的誤差呢?使用常規思維,這是可以理解的,它不可能去預測。
或許如果它真的理解數字后面的背景,它有大腦,有更多的數據。然后它可能會更好。
但是 Amazon Machine Learning 屬于簡單的數學。
Amazon Machine Learning 不是面向你們普通開發人員的
是這樣的。我應該多看一些,我可能已經閱讀了文章和視頻,甚至閱讀了 Mario 發給我的文章(咳咳)。
但是從用戶角度看,它遠沒有準備好。
它不是你們這些普通開發人員能夠坐下來使用的工具。
它需要你理解一些非常基礎的機器學習。看到像 Mario 從來沒有用過此工具的這種人能夠很快理解它,是非常有意思的。
但是我,從來沒有接觸過它,是沒有機會理解它的。
我確信它是一個偉大的工具。在合適的幫助下,我確信它是非常有用的。但是它無法解決世界饑餓或預測我的口袋里明天會有多少錢;然而,它是一次有趣的體驗。
- 注1:監督式學習(英語:Supervised learning),是一個機器學習中的方法,可以由訓練資料中學到或建立一個模式(函數 / learning model),并依此模式推測新的實例。http://zh.wikipedia.org/wiki/%E7%9B%A3%E7%9D%A3%E5%BC%8F%E5%AD%B8%E7%BF%92
- 注2:分類是指識別出樣本所屬的類別。識別前是否需要進行訓練,可分為有監督分類和無監督分類。http://zh.wikipedia.org/wiki/%E5%88%86%E7%B1%BB%E9%97%AE%E9%A2%98
- 注3:回歸分析(英語:Regression Analysis)是一種統計學上分析數據的方法,目的在于了解兩個或多個變數間是否相關、相關方向與強度,并建立數學模型以便觀察特定變數來預測研究者感興趣的變數。http://zh.wikipedia.org/wiki/%E8%BF%B4%E6%AD%B8%E5%88%86%E6%9E%90
- 注4:非監督式學習是一種機器學習的方式,并不需要人力來輸入標簽。它是監督式學習和強化學習等策略之外的一種選擇。在監督式學習中,典型的任務是分類和回歸分析,且需要使用到人工預先準備好的范例(base)。http://zh.wikipedia.org/wiki/%E9%9D%9E%E7%9B%A3%E7%9D%A3%E5%BC%8F%E5%AD%B8%E7%BF%92
- 注5:屏幕錄制(或截屏)是利用數字方式錄制電腦屏幕輸出,也被稱為視頻屏幕捕獲,常含音頻旁白。術語“屏幕錄制” (en:Screencast)與相關術語 “屏幕截圖”(en:Screenshot)的比較:屏幕截圖是電腦屏幕上的圖片;而屏幕錄制本質上是一個隨著時間的變化,用戶在電腦屏幕上看到的電影, 音頻旁白使其更具吸引力。http://zh.wikipedia.org/wiki/%E8%9E%A2%E5%B9%95%E9%8C%84%E5%BD%B1
- 注6:在統計學以及一些統計學應用領域,標準化有著一系列涵義。舉個最簡單的例子,率的標準化指的是參照某個標準來調整兩組資料的構成使其能夠形 成參考,比如兩者有著不同的尺寸和規格,如果要比較兩個總率時,往往按照某個統一的標準(如統一的內部構成)來進行修正,以消除內部構成不同所造成的對結 果的影響。http://zh.wikipedia.org/wiki/%E6%A0%87%E5%87%86%E5%8C%96_(%E7%BB%9F%E8%AE%A1%E5%AD%A6)
譯文: 《Amazon 機器學習回顧-機器學習初體驗 》 臘八粥