當前位置:
首頁 > 最新 > 如何使用機器學習預測葡萄酒品質

如何使用機器學習預測葡萄酒品質

作者:Ashwin Hariharan

編譯:weakish

編者按:Udacity機器學習、深度學習導師Ashwin Hariharan以預測葡萄酒品質作為例子,帶你步入機器學習的大門。

機器學習(ML)是人工智慧的一個子領域。它賦予計算機學習的能力,而無需顯式地編程。從搜索趨勢來看,這幾年機器學習的流行度和需求明顯上漲。

這篇機器學習入門教程是我寫的上一篇數據科學教程的姊妹篇。上一篇展示了如何使用數據科學來理解葡萄酒的屬性。如果你還沒有讀過上一篇,推薦首先閱讀一下,你將了解數據科學大概是怎麼回事。

什麼是機器學習?

人類通過過往的經驗學習。利用眼、耳、觸等感官輸入從周圍獲得數據。我們接著以許多有趣、有意義的方式使用這些數據。最常見的,我們使用它對未來做出精確的預測。換句話說,我們學習。

例如,今年的這個時候會下雨嗎?如果你忘記了女友的生日,她會發瘋嗎?紅燈時應該停下嗎?你應該投資某處不動產嗎?Jon Snow在《權力的遊戲》的下一季存活的概率?為了回答這些問題,你需要過去的數據。

另一方面,傳統上計算機不像我們一樣使用數據。它們需要一組明確的指令(演算法)以供遵循。

現在問題來了——計算機可以像人類一樣從過去的經驗(數據)中學習嗎?是的——你可以賦予它們學習和預測未來事件的能力,而無需顯式地編程。從自動駕駛到搜索行星,機器學習的應用場景廣闊無垠。

另外,我讀過一篇很棒的解釋數據科學、機器學習、人工智慧區別的文章。這是一篇比較詳盡全面的文章,所以我在這裡總結一下:

數據科學產生洞見

機器學習產生預測

人工智慧產生行動

這些領域間有許多交叉重疊,因此這些術語經常被不加區別地使用。

融資時,是AI。招聘時,是ML。實現時,是線性回歸。調試時,是printf()

在Netflix,機器學慣用來從用戶的行為數據中學習,顯示推薦。Google搜索顯示和你有關的結果——同樣,這需要使用很多ML技術不斷學習場景背後的數據。在數據科學和ML地帶,數據就是黃金。如果Tyrion Lannister面對ML和AI的世界,他可能會說:

一家公司需要數據,就像劍需要磨刀石才能保持鋒利。

現在我們理解了什麼是機器學習,是時候深入了。

誰應該閱讀這篇教程:

如果你想要入門機器學習,卻因為發現數學,統計學,從頭實現演算法太複雜,本文很適合你。

在你學習的某個階段,你將需要進一步深入——你不可能總是迴避數學!我希望你讀完本文後,能有動機探索這一領域各個深度的問題。

如果你有Python編程基礎,並閱讀過上一篇文章,你可以開始了。

讓我們開始!

我們將學習構建一個基於葡萄酒屬性預測葡萄酒品質的機器學習模型。讀完本文後,你將理解:

不同的ML演算法和技術

如何訓練和創建分類器

構建ML模型的常見錯誤,以及如何擺脫它們

如何分析和解釋模型的表現

機器學習類型

監督學習(本教程將討論這一主題)

顧名思義,監督學習需要人類來「監督」,告訴計算機正確答案。我們傳入包含許多特徵的訓練數據,並給出正確答案。

為了類比,想像計算機是一個如同一張白紙的小孩。他什麼也不知道。

現在,你如何教會Jon Snow貓和狗的區別?答案很直觀——你帶它出去散步,當你看到一隻貓時,你指著貓說:「這是貓。」你繼續走,可能會看到一條狗,所以你指著狗說:「這是狗。」隨著時間的推移,你不斷展示狗和貓,小孩會學習兩者的區別。

當然,你總是可以給Jon看很多貓狗圖片,而不用外出散步。Instagram是你的救星!:P

就我們的葡萄酒數據集而言,我們的機器學習模型將學習葡萄酒的品質(quality)和剩餘屬性的關係。換句話說,它將學習識別特徵和目標(品質)間的模式。

無監督學習

這裡我們不給計算機需要預測的「目標」標籤。相反,我們讓計算機自行發現模式,接著選擇最說得通的模式。這一技術很有必要,因為經常我們甚至不知道要在數據中找出什麼。

強化學習

強化學慣用來訓練智能體的「表現」,以及學習給定場景下的最佳行動,基於獎勵和反饋。這和AI有很多交叉。

除此之外,還有其他類型的ML,比如半監督學習、聚類。

監督學習可以解決什麼問題?

總體來說,監督學慣用於解決兩類問題:

圖片來源:aldro61.github.io

分類: 當你需要將特定觀測歸類為一組。在上圖中,給定一個數據點,你需要分類它是藍點還是紅點。其他例子包括,識別垃圾郵件,分配資訊的類別——比如運動、天氣、科學。

回歸: 用於預測連續值。例如,預測不動產價格。

注意,分類問題不一定是二元的——我們可以有兩個分類以上的問題。

另一方面,判定癌症患者的期望壽命會是一個回歸問題。在這一情形下,我們的模型將需要找到一條能夠很好地概括大多數數據點的直線或曲線。

一些回歸問題也可以被轉換為分類問題。此外,某些特定種類的問題可能既是分類問題,又是回歸問題。

機器學習的機制

大部分監督學習問題分為三步:

第一步:預處理、轉換、分割數據

第一步是分析數據,並為訓練作準備。我們觀察數據的傾向性、分布、特徵的平均數和中位數等統計數據。上一篇教程介紹了這些。

之後我們可以預處理數據,並在必要時應用特徵轉換。

接著,我們將數據分為兩部分——較大的一部分用作訓練,較小的一部分用作測試。分類器將使用訓練數據集進行「學習」。我們需要單獨的數據來測試和驗證,這樣我們可以看到我們的模型在未見數據上工作得有多好。

第二步:訓練

接著我們創建模型。我們通過創建函數或「模型」,並使用數據訓練它做到這一點。函數將使用我們選擇的演算法,使用我們的數據訓練自身,並理解模式(也就是學習)。注意,分類器表現得多好取決於它的老師——我們需要以正確的方式訓練它。

憂心忡忡的父母:如果你所有的朋友跳橋了,你會跟隨他們嗎?機器學習演算法:會。

第三步:測試和驗證

訓練好模型後,我們可以給它新的未見數據,而模型將給出輸出或預測。

第四步:超參數調整

最後,我們將嘗試改善演算法的表現。

現在,在我們深入機器學習演算法之前,讓我們了解下分類或回歸問題中可能出現的誤差。

偏離導致的誤差——精確度和欠擬合

當模型具有足夠多的數據但複雜度不足以捕捉其中的關係時,偏離出現了。模型持續、系統地錯誤表示數據,導致預測的低精確度。這被稱為欠擬合。

簡單而言,當我們擁有一個貧乏的模型時,偏離出現了。例如,當我們試圖基於《權力的遊戲》角色的身高和服飾識別他們是貴族還是農夫時,如果我們的模型只能根據身高劃分和分類角色,那麼它會把Tyrion Lannister(矮人)標記為農夫——這大錯特錯!

另一個例子,當我們想要通過顏色和形狀分類目標(例如復活節彩蛋)時,如果我們的模型只能根據顏色劃分和分類目標,它將持續地錯誤標記未來的目標——例如將五顏六色的彩虹標記為復活節彩蛋。

就我們的葡萄酒數據集而言,如果我們的機器學習分類器只「喝」一種葡萄酒,它會欠擬合。:P

另一個例子是本質上為多項式的連續數據,而模型只能表示線性關係。在這一情形下,我們傳給模型再多的數據也無濟於事,因為模型無法表示內在的關係。為了克服偏離導致的誤差,我們需要更複雜的模型。

方差導致的誤差——準確率和欠擬合

方差是衡量模型對訓練數據的子集有多「敏感」的測度。

訓練模型時,我們通常使用有限數量的樣本。如果我們使用隨機選擇的數據子集反覆訓練模型,我們會期望它的預測會因為特定樣本的不同而不同。

出現一些方差是正常的,但過多方差意味著模型無法將其預測推廣到更大的數據集。在這一場景下,模型在已見數據上表現得很精確,但在未見數據點上表現得很糟糕。對訓練集高度敏感也稱為過擬合,一般在模型過於複雜時出現。

通常我們可以通過訓練更多數據降低模型預測的方差,提升預測的準確率。如果無法獲得更多數據,我們也可以通過限制模型的複雜度控制方差。

對於程序員而言,挑戰在於使用能夠解決問題的最優演算法,避免高偏離或高方差,因為:

增加偏離將減少方差

增加方差將減少偏離

這通常被稱為偏離和方差的折衷。關於這點的細節,可以參考scott.fortmann-roe.com/docs/BiasVariance.html

和傳統編程不同,當你試圖找到機器學習和深度學習問題的最佳模型時,常常需要涉及大量基於試錯的方法。

現在,你需要對可以用來訓練模型的一些演算法有個概念。我不會深入數學或底層的實現細節,但應該足以讓你觀其大略。

一些最常用的機器學習演算法:

1. 高斯樸素貝葉斯

這個方法在20世紀50年代就出現了。它屬於概率分類器或條件概率演算法家族,假定特徵之間相互獨立。對識別垃圾郵件和分類資訊之類的分類問題而言,樸素貝葉斯很有效。

2. 決策樹

基本上這是一個類樹的數據結構,作用和流程圖差不多。決策樹是一種使用類樹的數據結構建模決策和可能結果的分類演算法。演算法工作的方式是:

將數據集的最佳屬性作為樹的根節點。

節點,或者說分岔處,經常被稱為「決策節點」。它通常表示一個測試或條件(比如是多雲還是晴天)。

分岔表示每個決策的輸出。

葉節點表示最終輸出,即標籤(在分類問題中),或離散值(在回歸問題中)。

3. 隨機森林

單獨使用時,決策樹傾向於過擬合。而隨機森林有助於糾正可能出現的過擬合。隨機森林使用多棵決策樹——使用大量不同的決策樹(預測不同),結合這些樹的結果以得到最終輸出。

隨機森林使用一種稱為bagging的集成演算法,這種演算法有助於減少方差和過擬合。

給定訓練集X = x1, …, xn,相應標籤/輸出Y = y1, …, yn,bagging反覆(B次)選擇訓練集中的一個隨機樣本(有放回)。

基於這些樣本訓練決策樹。

通過分類樹的多數投票做出最終分類。

除此之外,還有其他機器學習演算法,比如支持向量機,集成方法和很多非監督學習方法。

現在,是時候開始我們的訓練了!

首先,我們需要預備我們的數據

在機器學習的遊戲中,你回歸,或者你分類

在這篇教程中,我們將把回歸問題轉換為分類問題。所有評分低於5分的葡萄酒分類為0(差),評分為5分或6分的葡萄酒分類為1(一般),7分以上的葡萄酒分類為2(好)。

如你所見,我們有了一個新的列quality_categorical(品質類別),基於之前選擇的區間分類品質評分。quality_categorical列將作為目標值,而其他列作為特徵。

接著,創建數據的訓練子集和測試子集:

在上面的代碼中,我們使用了sklearn的train_test_split方法。該方法接受特徵數據(X)和目標標籤(y)作為輸入。它打亂數據集,並將其分為兩部分——80%用於訓練,剩餘20%用於測試。

接著,我們將使用一種演算法訓練,並評估其表現

我們需要一個函數,接受我們選擇的演算法、訓練數據集、測試數據集。函數將運行訓練,接著使用一些表現測度評估演算法的表現。

最終我們編寫了一個可以使用任意3種選定的演算法的函數,並為每種演算法進行訓練。然後匯總結果,並加以可視化。

輸出將類似:

上圖第一行為訓練數據上的表現,第二行為測試數據上的表現。這些表現測度意味著什麼?請繼續閱讀……

分類問題的表現測度

精確度

最簡單也最常用的測度,正確預測除以數據點總數。

何時精確度不是一個良好的表現指標?

有時,數據集中的類別分布會有很嚴重的傾向性,也就是說,某些分類有很多數據點,而另一些分類的數據點要少得多。讓我們看一個例子。

在一個由100封郵件組成的數據集中,10封是垃圾郵件,其他90封不是。這意味者數據集有傾向性,並不是均勻分布的。

現在,想像一下,我們訓練一個預測是否是垃圾郵件的分類器。它的表現是90%精確率。聽起來很不錯?並非如此。

分類器可以標記或預測所有100封郵件為「非垃圾郵件」,而仍然能得到90%的精確度!但這個分類器完全無用,因為它把所有郵件都分類為非垃圾郵件。

所以,精確度並不總是一個良好的指標。在特定情況下,其他測度能幫助我們更好地評估模型:

準確率

準確率告訴我們,分類為垃圾郵件的郵件中有多少確實是垃圾郵件,即真陽性/(真陽性 + 假陽性)

召回

召回或靈敏度告訴我們確實是垃圾郵件的郵件中有多少被分類為垃圾郵件,即真陽性/(真陽性 + 假陰性)

我們之前提到的具有90%精確度的分類器,它的準確率和召回是多少呢?讓我們算一下——它的真陽性是0,假陽性是0,假陰性是10。根據前面提到的公式,我們的分類器的準確率和召回均為0——相當反常的評分!現在看起來不那麼好了,不是嗎?

F1評分

F1為準確率(precision)和召回(recall)的調和平均數:

就F1而言,β = 1. 上式是F評分的公式,β值越大,越強調準確率。

現在,讓我們回顧下我們的ML演算法的表現:

這些結果表明,高斯樸素貝葉斯的表現不像決策樹和隨機森林那麼好。

你覺得為什麼高斯樸素貝葉斯的表現不佳?(提示: 你可以往上滾動,重新閱讀高斯樸素貝葉斯的解釋!)

特徵重要性

scikit-learn提供的一些分類演算法,有一個特徵重要性屬性,可以讓你查看基於選定演算法的每個特徵的重要性。

比如,scikit-learn中的隨機森林分類器帶.feature_importance_:

結果如下:

上圖顯示了5個最重要的特徵。酒精含量和揮發性酸水平看起來是最具影響力的因子,接著是硫酸鹽、檸檬酸、固定酸度。

超參數調整和優化

你也許已經注意到了,機器學習和數據科學有關。像任何科學一樣,它從一些先驗觀測開始。接著你做出假說,運行一些試驗,然後分析它們多大程度上重現了之前的觀測。這被稱為科學方法,其實這和工程過程也很相似。

假說可以被認為是「假定」。創建分類器的時候,我們首先假設一些演算法,在我們看來,這些演算法的效果應該不錯。但我們的假說也可能不對。常常,我們需要調整我們的假說,看看它們能不能做得更好。

當選擇機器學習模型時,我們做了一些關於它們的超參數的假定。超參數是特殊類型的配置變數,其值無法通過數據集直接計算。數據科學家或機器學習工程師需要通過試驗找出這些超參數的最佳值。這一過程稱為超參數調整。

現在,就隨機森林演算法而言,哪些可能是它的超參數?

森林中決策樹的數目

尋找樹的最佳分岔時考慮的特徵數

樹的最大深度,即根節點至葉節點的最長路徑

就這些超參數而言,我們的隨機森林分類器使用scikit-learn的默認值。

scikit-learn提供了一個非常方便的API,讓我們可以在「網格」中指定超參數的不同值,然後通過scikit-learn的GridSearchCV API使用這些超參數的可能組合訓練並進行交叉驗證,給出最優配置。這樣我們就不用手工運行這麼多迭代。

好了。你可以看到,我們模型的表現略有提升。

使用模型進行預測

最終,給我們的模型多個特徵的一組值,看看它的預測:

恭喜!你成功搭建了你自己的機器學習分類器,該分類器可以預測好酒和烈酒。

思考題

你的分類器更適合檢測一般的葡萄酒,還是更適合檢測好的葡萄酒?你認為可能的原因是什麼?

你會向釀酒廠推薦你的分類器嗎?為什麼?

如果使用回歸技術,而不是分類技術,模型的表現將如何?

接下來呢?

嘗試在白葡萄酒數據集上預測酒的品質

去Kaggle逛逛,看看不同的數據集,嘗試下你覺得有趣的數據集

編寫一個使用你的機器學習模型的API服務,然後創建一個web應用/移動應用

最後,別忘了參考以下資源:

《Machine Learning for Humans》第一章:為什麼機器學習至關重要

《Machine Learning for Humans》第二章:監督學習(一)

《Machine Learning for Humans》第三章:監督學習(二)

Machine Learning Mastery

Intro to Machine Learning - Udacity

A Visual Introduction to Machine Learning - r2d3.us

A Tour of Machine Learning Algorithms - Machine Learning Mastery

40 Interview Questions asked at Data Science and Machine Learning Startups

凡人皆須飲酒,到死方休!(譯者註:原文為「Until then, Valar Alcoholis!」此句仿照《《權力的遊戲》中的高等瓦雷利亞語,Valar Morghulis、Valar Dohaeris,凡人皆有一死、凡人皆在侍奉。)祝你今年的(再)解答都能達到出色的F1評分!

原文地址:https://medium.freecodecamp.org/using-machine-learning-to-predict-the-quality-of-wines-9e2e13d7480d


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

希望我在開始第一個機器學習項目之前就了解的那些事兒
安信證券–機器學習與量化投資:避不開的那些事

TAG:機器學習 |