一文讀懂機器學習

人民中科cognitive 發佈 2022-12-07T01:03:56.943004+00:00

首先他了解到新車價格在2萬美元左右,用過1年的二手車價格是1.9萬美元,2年車就是1.8萬美元,依此類推。

認識世界,就是一個從已知到未知的函數。機器學習,就是預測這個函數,並且使預測結果儘量準確。



本文圍繞機器學習,通過簡單的舉例,通俗易懂的講解機器學習的原理。


機器學習誕生記


機器學習(Machine Learning)本質上就是讓計算機自己在數據中學習規律,並根據所得到的規律對未來數據進行預測。



機器學習基本過程


為什麼我們想要機器去學習?我們通過一個例子來說明。


Billy想買輛車,他想算出每月要存多少錢才付得起。首先他了解到新車價格在2萬美元左右,用過1年的二手車價格是1.9萬美元,2年車就是1.8萬美元,依此類推。

Billy發現一種規律:車的價格取決於車齡,每增加1年價格下降1000美元,但不會低於10000美元。

用機器學習的術語來說,Billy發明了「回歸」(regression)——基於已知的歷史數據預測了一個數值(價格)。

現在的問題是,除了車齡外,它們還有不同的生產日期、數十種配件、技術條件、季節性需求波動等等影響因素。

普通人Billy沒法在計算價格的時候把這些數據都考慮進去,此時,我們需要機器人來幫我們做數學。因此,這裡我們採用計算機的方法——給機器提供一些數據,讓它找出所有和價格有關的潛在規律。


最令人興奮的是,相比於真人在頭腦中仔細分析所有的依賴因素,機器處理起來要好得多。


就這樣,機器學習誕生了。


機器學習的三要素


機器學習唯一的目標是基於輸入的數據來預測結果,所有的機器學習任務都可以用這種方式來表示。


樣本越是多樣化,越容易找到相關聯的模式以及預測出結果。因此,我們需要3個部分來訓練機器:



1、數據

想檢測垃圾郵件?獲取垃圾信息的樣本。想預測股票?找到歷史價格信息。想找出用戶偏好?數據越多樣化,結果越好。


獲取數據有兩種主要途徑——手動或者自動。手動採集的數據混雜的錯誤少,但要耗費更多的時間——通常花費也更多。自動化的方法相對便宜,你可以搜集一切能找到的數據。



2、特徵

也可以稱為「參數」或者「變量」,比如汽車行駛公里數、用戶性別、股票價格、文檔中的詞頻等。換句話說,這些都是機器需要考慮的因素。如果數據是以表格的形式存儲,特徵就對應著列名,這種情形比較簡單。


但如果是100GB的貓的圖片呢?我們不能把每個像素都當做特徵。這就是為什麼選擇適當的特徵通常比機器學習的其他步驟花更多時間的原因,特徵選擇也是誤差的主要來源。人性中的主觀傾向,會讓人去選擇自己喜歡或者感覺「更重要」的特徵——這是需要避免的。



3、算法

最顯而易見的部分,任何問題都可以用不同的方式解決。你選擇的方法會影響到最終模型的準確性、性能以及大小。需要注意一點:如果數據質量差,即使採用最好的算法也無濟於事。這被稱為」垃圾進,垃圾出」(garbae in - garbage out,GIGO)。所以,在把大量心思花到正確率之前,應該獲取更多的數據。



機器學習的方向


在機器學習的世界裡,解決問題的方法從來不是唯一的。因為你總會發現好幾個算法都可以用來解決某個問題,你需要從中選擇最適合的那個。當然,所有的問題都可以用「神經網絡」來處理,但是背後承載算力的硬體成本誰來負擔呢?


目前機器學習主要有4個方向,我們先從一些基礎的概述開始。



經典機器學習算法源自1950年代的純統計學。統計學家們解決的是諸如尋找數字中的模式、估計數據點間的距離以及計算向量方向這樣的形式數學(formal math)問題。


1、有監督學習

經典機器學習通常分為兩類:有監督學習(Supervised Learning)和無監督學習(Unsupervised Learning)。


在「有監督學習」中,有一個「監督者」或者「老師」提供給機器所有的答案來輔助學習,比如圖片中是貓還是狗。「老師」已經完成數據集的劃分——標註「貓」或「狗」,機器就使用這些示例數據來學習,逐個學習區分貓或狗。


無監督學習就意味著機器在一堆動物圖片中獨自完成區分誰是誰的任務。數據沒有事先標註,也沒有「老師」,機器要自行找出所有可能的模式。


很明顯,有「老師」在場時,機器學的更快,因此現實生活中有監督學習更常用到。


有監督學習分為兩類:


分類(classification),預測一個對象所屬的類別;


回歸(regression),預測數軸上的一個特定點;


分類(Classification)

「基於事先知道的一種屬性來對物體劃分類別,比如根據顏色來對襪子歸類,根據語言對文檔分類,根據風格來劃分音樂。」



分類算法常用於:

  • 過濾垃圾郵件;
  • 語言檢測;
  • 查找相似文檔;
  • 情感分析
  • 識別手寫字母或數字
  • 欺詐偵測

常用的算法:

  • 樸素貝葉斯(Naive Bayes)
  • 決策樹(Decision Tree)
  • Logistic回歸(Logistic Regression)
  • K近鄰(K-Nearest Neighbours)
  • 支持向量機(Support Vector Machine)


機器學習主要解決「分類」問題。在分類任務中,你需要一名「老師」。數據需要事先標註好,這樣機器才能基於這些標籤來學會歸類。


舉一個分類算法的例子:

假如現在你需要借一筆錢,那銀行怎麼知道你將來是否會還錢呢?沒法確定。但是銀行有很多歷史借款人的檔案,他們擁有諸如「年齡」、「受教育程度」、「職業」、「薪水」以及——最重要的——「是否還錢」這些數據。

利用這些數據,我們可以訓練機器找到其中的模式並得出答案。找出答案並不成問題,問題在於銀行不能盲目相信機器給出的答案。如果系統出現故障、遭遇黑客攻擊或者喝高了的畢業生剛給系統打了個應急補丁,該怎麼辦?


要處理這個問題,我們需要用到決策樹(Decision Trees),所有數據自動劃分為「是/否」式提問——比如「借款人收入是否超過128.12美元?」——聽起來有點反人類。不過,機器生成這樣的問題是為了在每個步驟中對數據進行最優劃分。




「樹」就是這樣產生的。分支越高(接近根節點),問題的範圍就越廣。決策樹廣泛應用於高責任場景:診斷、醫藥以及金融領域。最廣為人知的兩種決策樹算法是CART和C4.5。


如今,很少用到純粹的決策樹算法。不過,它們是大型系統的基石,決策樹集成之後的效果甚至比神經網絡還要好。


當你在Google上搜索時,正是一堆笨拙的「樹」在幫你尋找答案。搜尋引擎喜歡這類算法,因為它們運行速度夠快。



分類算法有一個非常有用的場景——異常檢測(anomaly detection),如果某個特徵無法分配到所有類別上,我們就把它標出來。現在這種方法已經用於醫學領域——MRI(磁共振成像)中,計算機會標記檢測範圍內所有的可疑區域或者偏差。股票市場使用它來檢測交易人的異常行為以此來找到內鬼。在訓練計算機分辨哪些事物是正確時,我們也自動教會其識別哪些事物是錯誤的。


經驗法則(rule of thumb)表明,數據越複雜,算法就越複雜。對於文本、數字、表格這樣的數據,一般會選擇經典方法來操作。這些模型較小,學習速度更快,工作流程也更清晰。對於圖片、視頻以及其他複雜的大數據,會研究神經網絡。


回歸(Regression)



回歸算法目前用於:

  • 股票價格預測
  • 供應和銷售量分析
  • 醫學診斷
  • 計算時間序列相關

常見的回歸算法有:

  • 線性回歸(Linear Regression)
  • 多項式回歸(Polynomial Regression)


「回歸」算法本質上也是「分類」算法,只不過預測的是不是類別而是一個數值。比如根據行駛里程來預測車的價格,估算一天中不同時間的交通量,以及預測隨著公司發展供應量的變化幅度等。處理和時間相關的任務時,回歸算法可謂不二之選。



回歸算法備受金融或者分析行業從業人員青睞。它甚至成了Excel的內置功能,整個過程十分順暢——機器只是簡單地嘗試畫出一條代表平均相關的線。不過,不同於一個拿著筆和白板的人,機器是通過計算每個點與線的平均間隔這樣的數學精確度來完成的這件事。



如果畫出來的是直線,那就是「線性回歸」,如果線是彎曲的,則是「多項式回歸」。它們是回歸的兩種主要類型。其他類型就比較少見了。


不過,把「回歸」和「分類」搞混也沒關係。一些分類器調整參數後就變成回歸了。除了定義對象的類別外,還要記住對象有多麼的接近該類別,這就引出了回歸問題。


2、無監督學習


無監督學習比有監督學習出現得稍晚——在上世紀90年代,這類算法用的相對較少,有時候僅僅是因為沒得選才找上它們。


有標註的數據是很奢侈的。假設現在我要創建一個——比如說「公共汽車分類器」,那我是不是要親自去街上拍上幾百萬張公共汽車的照片,然後還得把這些圖片一一標註出來?這些可能要花費畢生的時間。


這種情況下該如何呢?除了利用社會眾包機制,可以得到數百萬便宜的勞動力和服務。


我們可以嘗試使用無監督學習。無監督學習通常用於探索性數據分析(exploratory data analysis),而不是作為主要的算法。


聚類(Clustering)


「機器會選擇最好的方式,基於一些未知的特徵將事物區分開來。」


聚類算法目前用於:

  • 市場細分(顧客類型,忠誠度)
  • 合併地圖上鄰近的點
  • 圖像壓縮
  • 分析和標註新的數據
  • 檢測異常行為

常見算法

  • K均值聚類
  • Mean-Shift
  • DBSCAN


聚類是在沒有事先標註類別的前提下來進行類別劃分。好比你記不住所有襪子的顏色時照樣可以對襪子進行分類。聚類算法試圖找出相似的事物(基於某些特徵),然後將它們聚集成簇。那些具有很多相似特徵的對象聚在一起並劃分到同一個類別。有的算法甚至支持設定每個簇中數據點的確切數量。


這裡有個示範聚類的好例子——在線地圖上的標記。當你尋找周圍的素食餐廳時,聚類引擎將它們分組後用帶數字的氣泡展示出來。不這麼做的話,瀏覽器會卡住——因為它試圖將這個時尚都市裡所有的300家素食餐廳繪製到地圖上。



另一個常見的應用場景是圖片壓縮。當圖片保存為PNG格式時,可以將色彩設置為32色。這就意味著聚類算法要找出所有的「紅色」像素,然後計算出「平均紅色」,再將這個均值賦給所有的紅色像素點上。顏色更少,文件更小!


但是,遇到諸如藍綠這樣的顏色時就麻煩了。這是綠色還是藍色?此時就需要K-Means算法出場了。


先隨機從色彩中選出32個色點作為「簇心」,剩餘的點按照最近的簇心進行標記。這樣我們就得到了圍繞著32個色點的「星團」。接著我們把簇心移動到「星團」的中心,然後重複上述步驟直到簇心不再移動為止。剛好聚成32個穩定的簇形。



尋找簇心這種方法很方便,不過,現實中的簇並不總是圓形的。假如你是一名地質學家,現在需要在地圖上找出一些類似的礦石。這種情形下,簇的形狀會很奇怪,甚至是嵌套的。甚至你都不知道會有多少個簇。


K-means算法在這裡就派不上用場了,但是DBSCAN算法用得上。我們把數據點比作廣場上的人,找到任何相互靠近的3個人請他們手拉手。接下來告訴他們抓住能夠到的鄰居的手(整個過程人的站立位置不能動),重複這個步驟,直到新的鄰居加入進來。這樣我們就得到了第一個簇,重複上述過程直到每個人都被分配到簇,搞定。



就像分類算法一樣,聚類可以用來檢測異常。用戶登陸之後有不正常的操作?讓機器暫時禁用他的帳戶,然後創建一個工單讓技術支持人員檢查下情況。說不定對方是個「機器人」。我們甚至不必知道「正常的行為」是什麼樣,只需把用戶的行為數據傳給模型,讓機器來決定對方是否是個「典型的」用戶。這種方法雖然效果不如分類算法那樣好,但仍值得一試。


降維(Dimensionality Reduction)

「將特定的特徵組裝成更高級的特徵 」



「降維」算法目前用於:

  • 推薦系統
  • 漂亮的可視化
  • 主題建模和查找相似文檔
  • 假圖識別
  • 風險管理

常用的「降維」算法:

  • 主成分分析(Principal Component Analysis ,PCA)
  • 奇異值分解(Singular Value Decomposition ,SVD)
  • 潛在狄里克雷特分配( Latent Dirichlet allocation, LDA)
  • 潛在語義分析( Latent Semantic Analysis ,LSA, pLSA, GLSA),
  • t-SNE (用於可視化)


早年間,「硬核」的數據科學家會使用這些方法,他們決心在一大堆數字中發現「有趣的東西」。Excel圖表不起作用時,他們迫使機器來做模式查找的工作。於是他們發明了降維或者特徵學習的方法。


將2D數據投影到直線上(PCA)


對人們來說,相對於一大堆碎片化的特徵,抽象化的概念更加方便。舉個例子,我們把擁有三角形的耳朵、長長的鼻子以及大尾巴的狗組合出「牧羊犬」這個抽象的概念。相比於特定的牧羊犬,我們的確丟失了一些信息,但是新的抽象概念對於需要命名和解釋的場景時更加有用。作為獎勵,這類「抽象的」模型學習速度更快,訓練時用到的特徵數量也更少,同時還減少了過擬合。


這些算法在「主題建模」的任務中能大顯身手。我們可以從特定的詞組中抽象出他們的含義。潛在語義分析(LSA)就是搞這個事情的,LSA基於在某個主題上你能看到的特定單詞的頻次。比如說,科技文章中出現的科技相關的詞彙肯定更多些,或者政治家的名字大多是在政治相關的新聞上出現,諸如此類。


我們可以直接從所有文章的全部單詞中來創建聚類,但是這麼做就會丟失所有重要的連接(比如,在不同的文章中battery 和 accumulator的含義是一樣的),LSA可以很好地處理這個問題,所以才會被叫做「潛在語義」(latent semantic)。


因此,需要把單詞和文檔連接組合成一個特徵,從而保持其中的潛在聯繫——人們發現奇異值分解(SVD)能解決這個問題。那些有用的主題簇很容易從聚在一起的詞組中看出來。



推薦系統和協同過濾是另一個高頻使用降維算法的領域。如果你用它從用戶的評分中提煉信息,你就會得到一個很棒的系統來推薦電影、音樂、遊戲或者你想要的任何東西。


關聯規則學習(Association rule learning)

「在訂單流水中查找模式」



「關聯規則」目前用於:

  • 預測銷售和折扣
  • 分析「一起購買」的商品
  • 規劃商品陳列
  • 分析網頁瀏覽模式

常用的算法:

  • Apriori
  • Euclat
  • FP-growth


用來分析購物車、自動化營銷策略以及其他事件相關任務的算法都在這兒了。


比如說,一位顧客拿著一提六瓶裝的啤酒去收銀台。我們應該在結帳的路上擺放花生嗎?人們同時購買啤酒和花生的頻次如何?關聯規則很可能適用於啤酒和花生的情形,但是我們還可以用它來預測其他哪些序列? 能否做到在商品布局上的作出微小改變就能帶來利潤的大幅增長?


這個思路同樣適用電子商務,那裡的任務更加有趣——顧客下次要買什麼?


規則學習在機器學習的範疇內似乎很少提及。經典方法是在對所有購買的商品進行正面檢查的基礎上套用樹或者集合方法。算法只能搜索模式,但沒法在新的例子上泛化或再現這些模式。


現實世界中,每個大型零售商都會建立了自己專屬的解決方案,本文提及的最高水平的技術就是推薦系統。



機器學習可以讓我們的生活變得更加便利。人們不斷地提出各種利用機器學習的方法,一場工業革命正在悄然發生。


責編:岳青植
監製:李紅梅


文章來源:《不拽術語,如何通俗地講解機器學習?》新機器視覺,內容有刪減

關鍵字: