機器學習入門系列:關於機器學習演算法你需要了解的東西、如何開發機器學習模型?

一、關於機器學習演算法 你需要了解的東西

摘要 對學習演算法進行分類是基於構建模型時所需的數據:數據是否需要包括輸入和輸出或僅僅是輸入,需要多少個數據點以及何時收集數據。根據上述分類原則,可以分為4個主要的類別:監督學習、無監督學習、半監督學習和強化學習。

我們上次已經討論了機器學習能夠影響的業務類型。參見:機器學習能為你的業務做什麼?(機器學習入門系列第一篇)

現在,讓我們來回顧一下你需要了解的技術術語,這樣你才能高效地與數據科學團隊進行合作,並協助他們,讓他們的工作成果可以對你的業務產生儘可能大的影響(或至少讓你知道他們在說什麼)。

演算法、模型和數據

從概念層面上來講,我們正在構建一個機器,給這個機器一組輸入數據,然後通過找到數據中的模式並從中學習,能夠產生某種預期的輸出。

一種非常常見的情況就是讓機器在一組輸入數據中查找,然後產生相對應的輸出數據。機器在輸入數據中識別出模式,並創建一組複雜的規則,然後將其應用於以前從未見過的輸入併產生所需的輸出。例如,給定房屋的面積、地址和房間數(輸入),我們來預測房屋的銷售價格(輸出)。假設我們有10000組這樣的數據,包括房屋的面積、地址、房間數量,以及銷售價格。則機器會基於這些數據「訓練」自己,即識別出房間面積、地址、房間數影響房屋價格的模式,這樣,只要我們給出一個從未見過的房子的3個輸入項,就可以預測出房子的價格了。

數據科學家的作用是找到給定輸入並能夠獲得預期輸出的最佳機器。她有多個模板,對於機器來說,稱之為**演算法**。從這些模板中生成的解決具體問題的機器被稱為**模型**。模板有各種不同的選項和設置,可以通過調整這些選擇和設置來從同一模板生成不同的模型。還可以使用不同的模板或調整相同模板的設置來生成多個模型,以便測試出哪個模型能提供最佳結果。

請注意,模型輸出只是在一定概率上對決策是正確的或者有用的。模型並不是100%正確的,而是根據模型所看到的大量數據而進行的「最佳猜測」。模型看到的數據越多,提供有用輸出的可能性就越大。

數據科學家用來「訓練」機器的已知輸入和輸出集合(即讓模型識別數據中的模式並創建規則)叫做「**訓練集**」。該數據用於與一個或多個「模板」一起創建用於解決問題的一個或多個模型。記住,即使只使用了一個「模板」(演算法),也可以通過調整某些選項來從同一模板生成多個模型。

在得到了幾個「訓練過」的模型之後,就必須對它們進行檢查,看看它們是否能正常工作,哪一個最有效。用來檢查的一組新的數據稱為「**驗證集**」。將驗證集作為輸入,然後運行模型,查看哪一個模型輸出的結果最接近驗證集的輸出。在我們上面的例子中,就是看哪一種模型預測出來的房屋的價格與實際售價最接近。在這個階段中,需要有一組新的數據來作為驗證集,因為這些模型是根據訓練集創建的,所以它們在訓練集上能夠工作得很好,不會給出真實的結果。

一旦驗證了哪種模型性能最佳並選擇了最優者,我們的數據科學家就需要確定該模型的實際性能,也就是說,這個最好的模型在解決問題方面到底好到什麼程度。再一次,我們需要另外一個新的數據集,因為模型在訓練集和驗證集上都能表現良好!這最後一個數據集稱為「**測試集**」。在我們的例子中,系統會檢查對於用測試集作為輸入預測出來的房價有多接近測試集的實際價格。

「學習」的類型

應用於解決機器學習問題的演算法類型取決於你所擁有的數據。對學習演算法進行分類是基於構建模型時所需的數據:數據是否需要包括輸入和輸出或僅僅是輸入,需要多少個數據點以及何時收集數據。根據上述分類原則,可以分為4個主要的類別:監督學習、無監督學習、半監督學習和強化學習。

1. 監督學習

我們在上一節中詳細討論的案例描述了我們所說的「監督學習」。這種學習類型需要有大量**標記數據**示例,即由輸入和相應的輸出組成的數據。在我們的房屋價格示例中,「標記」是指用模型預測的結果來對輸入進行標記。

在監督學習演算法中可以看到標記數據(也稱為「**參考標準**」數據),從這些數據中學習並根據這些實例進行預測。他們需要大量的標記數據:雖然數據的數量取決於用例,但幾百個數據點是最起碼的。

使用監督學習解決的兩個經典問題是:

  • 回歸。根據其他明顯的數據集對變數產生的影響來推斷未知變數的值。在時間預測中有兩個常見用途。例如,我們之前的那個根據位置和面積等變數來預測住宅價格的例子,以及預測未來價格,例如,根據歷史和目前的價格數據,預測房屋從現在到一年以後的價格。回歸是一種統計方法,它用於確定自變數(你已擁有的數據)與其所需預測值的因變數之間的關係。
  • 分類。確定實體屬於多個類別中的哪一個類別。這可以是一個二元分類,例如,確定某個帖子是否會像病毒一樣傳播(是/否);也可以是多標籤分類,例如,在產品照片上標記合適的類別(可能有數百個類別)。

2. 無監督學習

在無監督學習中,演算法在試圖識別數據中模式的時候,無需使用預期結果來標記數據集。數據是「未標記的」,即沒有附加任何有意義的標記。通過無監督學習方法可以解決一些經典問題:

  • 聚類給定某個相似性標準,找出哪些與其他另外一個更相似。使用聚類的一個領域是文本搜索,例如,返回的搜索結果包含了很多非常相似的文檔。聚類可用來將它們進行分組,讓用戶更方便地識別出差異較大的文檔。
  • 關聯。根據某種關係將對象分類到不同的桶中,這樣,桶中某個物體的存在預示著另一個物體也存在。比如類似於「買了xxx的人也買了yyy」這樣的推薦問題:如果對大量的購物車進行分析,則可以看出,購物車中商品xxx的存在很有可能暗示著產品yyy也在購物車中,那麼,你可以立即向將產品xxx放入購物車的人推薦產品yyy。
  • 異常檢測在需要標記和處理的數據中識別意外模式。標準的應用範圍包括了對複雜系統的欺詐檢測和健康監測。

3. 半監督學習

這是監督學習和無監督學習混合的結果,在這種「學習」中,演算法需要一些訓練數據,但是比監督學習的要少很多(可能要差一個數量級)。其演算法可以是在監督學習和無監督學習中使用的方法的擴展:分類、回歸、聚類、異常檢測等等。

4. 強化學習

演算法以有限的數據集開始,在學習的同時,還可以獲得更多關於其預測的反饋信息,以進一步改善學習效果。

正如你所看到的,除了要解決的問題類型外,你所擁有的數據量也會影響到你所能使用的學習方法。這也適用於另一種方式:你需要使用的學習方法可能需要比你現在擁有的更多的數據,這樣才能有效地解決你的問題。我們稍後再討論這個。

其他常見的「流行語」

在你的工作中,還會遇到其他一些術語。了解他們與我們今天談論到的類別之間的關係很重要。

深度學習與上面的那些定義並沒有什麼關係。它只是應用特定類型的系統來解決學習問題,其解決方案可以是監督的,也可以是無監督的,等等。

人工神經網路(ANN)是一種學習系統,它試圖通過不同層上的「神經」網路來模擬我們大腦的工作方式。神經網路至少有一個輸入層(即數據被攝入網路的一組神經元),一個輸出層(將結果傳遞出來的神經元)以及兩者之間的一個或多個層,稱為「隱藏層」(真正做計算工作的層)。深度學習只是使用具有多個隱藏層的神經網路來完成學習任務。如果你曾經使用過這樣的網路,恭喜你,你也可以合理地扔掉這個時髦術語了!

集合方法或**綜合學習**是使用多個模型來獲得結果,這樣比利用單個模型獲得的結果要更好。這些模型可以採用不同的演算法,或是使用不同參數的相同演算法。比如,對於某種類型的預測,你有一組模型,每一個模型都能產生一個預測,有一些處理方法能夠平衡不同的預測結果,並決定應該輸出什麼樣的組合。集合方法通常用於監督學習(它們在預測問題中非常有用),但也可以用於無監督學習。你的數據科學團隊可能會測試這些方法,並在適當的時候使用它們。

自然語言處理(NLP)是計算機科學領域的一門研究機器理解語言的學科。不是所有類型的NLP都使用機器學習。例如,如果我們生成一個「標籤雲」(一個詞出現在文本中的次數的視覺表示法),這就不涉及學習。對語言和文字的更加複雜的分析和理解往往需要機器學習。這裡有一些例子:

  • 關鍵字生成。理解正文的主題並自動為其創建關鍵字。
  • 語言歧義。從一個詞或一句句子的多種可能的解釋中確定相關的含義。
  • 情緒分析理解在文字中表達出來的情緒的積極或者消極的程度。
  • 命名實體提取在文本中識別公司、人員、地點、品牌等等;當這些名稱並不特殊時,要提取出來就會特別困難(例如,公司「微軟」比公司「目標」更容易識別,因為「目標」是英文中的一個單字)。

NLP不僅用於機器學習領域裡面向語言的應用,例如chatbots,它也被廣泛用於準備和預處理數據,這樣,這些數據才能成為許多機器學習模型的有用輸入。我們稍後在討論這個。

請注意:上面的定義是為了表達其主要思想,讓大家更易理解;對於詳細的科學定義,請參考其他來源。

問題如何影響解決方案(另外還有一些關鍵的機器學習概念)

用機器學習來實現的戰略目標將決定許多下游決策。為了確保你的數據科學團隊能為業務生成正確的解決方案,了解一些基本的機器學習概念及其對業務目標的影響是非常重要的。

演算法的選擇

在問題定義上的一個小變動可能需要有一個完全不同的演算法來解決,或者至少要使用不同的數據輸入來構建不同的模型。一個能夠為用戶識別照片類型的約會網站可以使用無監督學習技術(比如聚類)來識別常見的主題。而如果要向特定的某個人推薦潛在的約會對象,則網站可能要使用基於輸入的監督學習,輸入數據需具體到個人,例如他們已經看過的照片。

特徵的選擇

機器學習模型識別數據中的模式。輸入到模型中的數據被組織成特徵(也稱為變數或屬性):這些特徵都是相關的、大部分獨立的數據片段,描述了你想要預測或識別的現象的某些方面。

以前文提到的那家希望優先考慮貸款申請人外展服務的公司為例。如果我們將問題定義為「根據客戶轉換的可能性優先考慮」,我們將會得到包括類似客戶對公司各種外展活動的響應率等特徵。如果我們將問題定義為「優先考慮最可能償還貸款的客戶」,我們就不會得到這些特徵,因為它們與評估客戶的可能性無關。

目標函數的選擇

目標函數是你要優化的目標,或者是模型試圖預測的結果。例如,如果你向用戶推薦他們可能感興趣的商品,則模型的輸出可能是用戶在看到商品時點擊該商品的概率,也可能是用戶購買商品的概率。目標函數的選擇主要取決於業務目標,在這個例子中,你對用戶的參與感興趣(目標函數可能是點擊或停留的時間)還是對營業收入感興趣(目標函數是購買)?另一個要考慮的關鍵因素是數據的可用性:對於要學習的演算法,你必須提供大量「標記」為正(用戶看到並點擊的產品)或負(用戶看到的產品,但沒有點擊)的數據點。

文章原標題《What You Need to Know About Machine Learning Algorithms and Why You Should Care》,作者:Yael Gavish,譯者:夏天,審校:主題曲哥哥。

------------------------------------------------------------------------------------

二、如何開發機器學習模型?

摘要: 創建一個優秀的機器學習模型跟創建其他產品是一樣的:首先從構思開始,把要解決的問題和一些潛在的解決方案放在一起考慮。一旦有了明確的方向,就可以對解決方案進行原型化,然後對它進行測試以確定是否滿足需求,不妨看看本文是如何一步一步實現的。

建模步驟一覽

從較高的層次上來講,創建一個優秀的機器學習模型跟創建其他任何產品是一樣的:首先從構思開始,把要解決的問題和一些潛在的解決方案放在一起考慮。一旦有了明確的方向,就可以對解決方案進行原型化,然後對它進行測試以確定是否滿足需求。你需要在構思、原型設計和測試之間不斷地迭代,直到你的解決方案足夠好,並能夠投入市場,此時你就可以將其產品化,並發布出去。現在,我們來看看每個階段的細節吧。

由於數據是機器學習的重要組成部分,因此我們需要在產品開發過程之上進行數據分層,因此我們的流程如下所示:

  • 構思。讓待解決的關鍵問題和針對解決方案的潛在數據輸入保持一致。
  • 數據準備。以一種有用的格式收集和獲取數據,以便對模型進行理解和學習。
  • 原型與測試。建立一個或一組模型來解決問題,測試它們執行和迭代的程度,直到有一個模型能得到令人滿意的結果。
  • 產品化。讓模型以及數據收集與處理穩定化、規模化,以便在生產環境中生成有用的輸出。

構思

這個階段的目標是要讓模型解決的關鍵問題、目標函數和潛在的輸入作為一個整體與模型保持一致。

  • 與問題保持一致。如前所述,機器學習可用於解決真正的業務問題。請確保你的團隊和公司中的所有利益相關者就你正在解決的問題以及如何使用解決方案達成一致。
  • 選擇目標函數。待解決的問題決定了模型的目標是什麼。模型試圖預測的目標函數是什麼?你是否在查找數據中的模式?例如,將照片集按照某種特徵分成多個組。
  • 定義質量指標。你如何衡量模型的質量?在沒有看到真正結果的時候,一般很難預見可接受的質量,但目標的定向性對此是有幫助的。
  • 集思廣益所有可能的輸入。你的目標是確定哪些數據可以幫你解決問題或者做出決定。最有幫助的問題是:「專家會如何處理這個問題」。考慮一下解決方案將以什麼樣的變數或者數據為基礎。每一個可能影響人類判斷的因素是否都應該測試。請儘可能廣泛地搜集這些問題的答案。了解關鍵因素可能需要有商業方面專業的知識,這是企業或者產品人員需要在此階段中頻繁參與的重要原因之一。數據團隊將不得不將這些潛在的輸入轉化為模型特徵。請注意,為了將輸入轉換為特徵,可能需要額外的處理,後面我們會詳細討論這個。

數據準備

本階段的目標是收集原始數據,並將其作為原型模型的輸入。你可能需要對原始數據進行複雜的轉換才能使其成為輸入數據。例如,假設你的某個特徵是消費者對品牌的看法:你首先需要找到消費者談論品牌的相關來源。如果品牌名稱包括常用詞(例如「蘋果」),則需要將品牌名稱與一般情況下的含義(與水果有關)區分開來,然後再通過觀點分析模型來運行,所有這些都要在構建原型之前完成。並非所有的特徵構建起來都很複雜,但有些可能需要耗費大量的工作。

讓我們來更詳細地了解一下這個階段需要做什麼:

  • 以最快的速度收集數據。首先,確定缺少了哪些數據。在某些情況下,你可能需要對必要的輸入分解到「構建塊」級別,或者是到代理級別,這樣才能更方便地獲取到數據。一旦確定下來缺少哪些數據,就要以最快捷、最簡單的方法去獲取。對於不可擴展的方法,比如手工下載或購買數據樣本,即使代價有點高但可能卻是最實際的方法。在這個階段採集太多的數據通常沒有太大的意義,因為你不了解數據是否有用,哪種格式最好,等等。商業人士應該參與到這個階段中來,因為他們可以協助數據專家們從大量的渠道獲取到原本不太容易獲取的數據。請注意,在監督學習演算法中,你不僅需要用於模型特徵的數據,你還需要為模型的目標函數提供數據點,以進行訓練、驗證以及測試模型。回到房價那個例子,為了建立一個預測房價的模型,你需要一些包含房價的房屋信息!
  • 數據清洗與規範化。在這個階段中,數據科學或工程團隊將承擔起主要的工作職責。他們將投入大部分的精力把構思和原始數據轉化為實際的模型。數據集需要進行檢查和清洗,以避免使用不良數據以及不相關的異常值等等。同時,數據還可能會以不同的比例進行轉換,以使其更容易地與其他數據集一致,並能一起使用。特別是在處理文字和圖像的時候,通常需要對數據進行預處理,以提取相關的信息。例如,將太多太大的圖像插入模型可能會導致信息過量而無法處理,因此你可能需要降低圖片的質量、使用圖像的其中一部分或僅使用對象輪廓。對於文本,你可能需要檢測與文本相關的實體,進行觀點分析,查找常用的n-gram(經常用於表示一定數量單詞的序列)或執行各種其他的轉換。這些通常可由現成的庫來實現,無需重新發明輪子。

原型與測試

這個階段的目標是獲得一個模型的原型,測試並對它進行迭代,直到能夠得到一個足夠好並且能夠用於生產的的模型。

  • 構建原型。一旦數據準備完畢,數據科學團隊就可以開始研究實際的模型了。這個階段涉及到大量的實驗,比如選擇最相關的特徵、測試多種演算法等。這並不是一個簡單的任務,獲得用於生產模型在時間計划上並不好把控。
  • 驗證和測試原型。在這個階段中,數據科學家的職責就是要確保最終生成的模型儘可能的好。他們將根據預定義的質量度量標準來評估模型的性能,比較不同演算法下模型的性能,調整各種參數並對最終的模型進行性能測試。對於監督學習,需要確定模型預測的結果是否能夠滿足你的需求。對於無監督學習,根據問題的不同,有多種不同的性能評估技術。以聚類為例,你可以輕鬆地繪製出在多個維度上聚類的對象。如果演算法使用了關鍵字來標記文檔,那麼關鍵字是否有意義呢?在打標記失敗或重要用例丟失的情況下,是否有明顯的差距呢?這並不能代替更加科學的方法,但在實踐上有助於快速改進。
  • 迭代。此時,你需要與團隊一起來決定是否需要進一步的迭代。該模型與你的預期有多少相符?它是否表現得足夠好,讓你目前的業務狀況得到顯著的改善?是否有特別薄弱的方面?是否需要更多的數據點?你能想到其他特徵來提高性能嗎?是否有替代數據源可以提高模型的輸入質量?等等。這些都需要集思廣益。

產品化

當原型模型能夠很好地解決業務問題,並能進入生產的時候,你就來到了這個階段。請注意,如果尚未準備好進行全面的產品化,你需要首先確定模型要擴展的比例。比如說,對於一個電影推薦工具:你可能是先對少數用戶提供推薦服務,但要為每個用戶提供完整的使用體驗,在這種情況下,模型就要根據每個用戶的相關性對資料庫中的每個電影進行排序。與僅推薦動作電影相比,這是另一個不同的擴展要求。

現在,我們來探討一下有關將模型生產化的更多的技術細節:

  • 增加數據覆蓋率。在很多情況下,你可以用比生產中更少更有限的數據來構建原型。例如,你可以根據特定客戶來構建原型,然後將其擴展到整個客戶群。
  • 擴展數據收集。一旦驗證了哪些數據對模型有用,你需要構建一種可擴展的方式來收集和獲取數據。在原型設計階段,以手動方式來收集數據還是可以的,但是對於生產,你應該儘可能地自動化。
  • 刷新數據。創建一個隨時間刷新數據的機制,以更新現有值或添加新信息。除非由於某種原因不能保留歷史數據,否則系統應該要以某種方式來持續積累更多的數據。
  • 擴展模型。這個包含了數據科學和工程學兩個方面的內容。從數據科學的角度來講,如果你更改了基礎數據,例如擴大了客戶群的數量,就需要重新訓練和測試模型。在特定數據集上工作良好的模型並不一定能適用於更廣泛或其他不同的數據集。從架構上來講,模型需要能夠在數據不斷增長的基礎上及時擴展以進行更頻繁地運行。在電影推薦示例中,可能會有更多的用戶、更多的電影以及有關每個用戶喜好的更多信息。
  • 檢查特殊值。雖然模型也許在整體上可以很好地擴展,但在某些很小但很重要的情況下可能就無法正常工作了。例如,電影推薦的平均使用效果可能還不錯,但對於家長來說,如果他們用自己的賬號為孩子選擇了電影,那麼推薦系統就會顯示兒童電影。這是一個產品設計問題,你需要在產品中將父母自己的建議與為孩子的建議分開來,但是,這並不是模型可以告訴你的。

到目前為止,我所描述的是一個概念性的流程。在現實中,界限一般比較模糊,你經常需要在不同階段之間來回走動。你可能會對數據的供給不滿意,從而考慮重來,或者在模型產品化之後,你發現模型並不能很好的工作,你不得不退回去重新構建原型。

文章原標題《Developing a Machine Learning Model from Start to Finish》,作者:Yael Gavish,譯者:夏天,審校:主題曲哥哥。

文章為簡譯,更為詳細的你容,請查看原文(需要備梯子)大家也可以下載下方的PDF文檔查看原文。

附件下載:click.aliyun.com/m/2908

更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎

推薦閱讀:

一個超省錢的內容推送演算法(乞丐版)
NP=NP? 從計算到智能的終極問題
波士頓動力終於實現類人平衡力!全新演算法賦予機器人擺脫「摔倒」魔咒
從1~N的整數中隨機選M個

TAG:机器学习 | 算法 | 神经网络 |