機器學習概念和經典演算法,我用大白話給你講清楚了!入門必看

在資料領域,很多人都在說機器學習,但是隻有很少的人能說清楚怎麼回事。網上關於機器學習的文章,大多都是充斥各種定理的厚重學術三部曲(我搞定半個定理都夠嗆),或是關於人工智慧、資料科學魔法以及未來工作的天花亂墜的故事。

儘管資料分析實際工作中用到機器學習的機會真的不多,但我覺得它仍是數分從業者所需的技能之一,所以今天這篇文章,主要對那些想了解機器學習的人做一個簡單的介紹。不涉及高階原理,只用簡單的語言來談現實世界的問題和實際的解決方案。不管你是一名程式設計師還是管理者,都可以看懂。

怎麼理解什麼叫機器學習

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

用機器學習的術語來說,Billy發明了“迴歸”(regression) — — 基於已知的歷史資料預測了一個數值(價格)。當人們試圖估算eBay上一部二手iPhone的合理價格或是計算一場燒烤聚會需要準備多少肋排時,他們一直在用類似Billy的方法 — — 每人200g? 500?

大家都希望能有一個簡單的公式來解決世界上所有的問題,但是顯然這是不可能的。

讓我們回到買車的情形,現在的問題是,除了車齡外,它們還有不同的生產日期、數十種配件、技術條件、季節性需求波動……天知道還有哪些隱藏因素……普通人Billy沒法在計算價格的時候把這些資料都考慮進去,換我也同樣搞不定。

我們需要機器人來幫他們做數學。因此,這裡我們採用計算機的方法 — — 給機器提供一些資料,讓它找出所有和價格有關的潛在規律,相比於真人在頭腦中仔細分析所有的依賴因素,機器處理起來要好得多,就這樣,機器學習誕生了。

機器學習的3個組成部分

拋開所有和人工智慧(AI)有關的扯淡成分,機器學習唯一的目標是基於輸入的資料來預測結果,就這樣。所有的機器學習任務都可以用這種方式來表示,否則從一開始它就不是個機器學習問題。

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

1. 資料

獲取資料有兩種主要途徑 — — 手動或者自動。手動採集的資料混雜的錯誤少,但要耗費更多的時間 — — 通常花費也更多。自動化的方法相對便宜,你可以蒐集一切能找到的資料(但願資料質量夠好)。

一些像Google這樣聰明的傢伙利用自己的使用者來為他們免費標註資料,還記得ReCaptcha(人機驗證)強制你去“選擇所有的路標”麼?他們就是這樣獲取資料的,還是免費勞動!幹得漂亮。如果我是他們,我會更頻繁地展示這些驗證圖片,不過,等等……

好的資料集真的很難獲取,它們是如此重要,以至於有的公司甚至可能開放自己的演算法,但很少公佈資料集。

2. 特徵

如果資料是以表格的形式儲存,特徵就對應著列名,這種情形比較簡單。但如果是100GB的貓的圖片呢?我們不能把每個畫素都當做特徵。這就是為什麼選擇適當的特徵通常比機器學習的其他步驟花更多時間的原因,特徵選擇也是誤差的主要來源。人性中的主觀傾向,會讓人去選擇自己喜歡或者感覺“更重要”的特徵 — — 這是需要避免的。

3. 演算法

概念區分

“人工智慧”是整個學科的名稱,類似於“生物學”或“化學”。

“機器學習”是“人工智慧”的重要組成部分,但不是唯一的部分。

“神經網路”是機器學習的一種分支方法,這種方法很受歡迎,不過機器學習大家庭下還有其他分支。

“深度學習”是關於構建、訓練和使用神經網路的一種現代方法。本質上來講,它是一種新的架構。在當前實踐中,沒人會將深度學習和“普通網路”區分開來,使用它們時需要呼叫的庫也相同。

經典機器學習演算法

儘管經典演算法被廣泛使用,其實原理很簡單,你可以很容易地解釋給一個蹣跚學步的孩子聽。它們就像是基本的算術 — — 我們每天都在用,甚至連想都不想。下面給大家講一些經典的機器學習演算法:

有監督學習

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

無監督學習就意味著機器在一堆動物圖片中獨自完成區分誰是誰的任務。資料沒有事先標註,也沒有“老師”,機器要自行找出所有可能的模式。後文再討論這些。

很明顯,有“老師”在場時,機器學的更快,因此現實生活中有監督學習更常用到。有監督學習分為兩類:

分類(classification),預測一個物件所屬的類別;
迴歸(regression),預測數軸上的一個特定點;

分類(Classification)

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

分類演算法常用於:

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

常用的演算法:樸素貝葉斯、決策樹、Logistic迴歸、K近鄰、支援向量機

機器學習主要解決“分類”問題。這臺機器好比在學習對玩具分類的嬰兒一樣:這是“機器人”,這是“汽車”,這是“機器-車”……額,等下,錯誤!錯誤!

在分類任務中,你需要一名“老師”。資料需要事先標註好,這樣機器才能基於這些標籤來學會歸類。一切皆可分類 — — 基於興趣對使用者分類,基於語言和主題對文章分類(這對搜尋引擎很重要),基於型別對音樂分類(Spotify播放列表),你的郵件也不例外。

樸素貝葉斯演算法廣泛應用於垃圾郵件過濾。機器分別統計垃圾郵件和正常郵件中出現的“偉哥”等字樣出現的頻次,然後套用貝葉斯方程乘以各自的概率,再對結果求和 — — 哈,機器就完成學習了。

後來,垃圾郵件製造者學會了如何應對貝葉斯過濾器 — — 在郵件內容後面新增很多“好”詞 — — 這種方法被諷稱為“貝葉斯中毒”。樸素貝葉斯作為最優雅且是第一個實用的演算法而載入歷史,不過現在有其他演算法來處理垃圾郵件過濾問題。

再舉一個分類演算法的例子。

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

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

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

“樹”就是這樣產生的。分支越高(接近根節點),問題的範圍就越廣。所有分析師都能接受這種做法並在事後給出解釋,即使他並不清楚演算法是怎麼回事,照樣可以很容易地解釋結果(典型的分析師啊)!

決策樹廣泛應用於高責任場景:診斷、醫藥以及金融領域。

最廣為人知的兩種決策樹演算法是 CART 和 C4.5.

如今,很少用到純粹的決策樹演算法。不過,它們是大型系統的基石,決策樹整合之後的效果甚至比神經網路還要好。這個我們後面再說。

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

按理說,支援向量機應該是最流行的分類方法。只要是存在的事物都可以用它來分類:對圖片中的植物按形狀歸類,對文件按類別歸類等。

SVM背後的思想很簡單 — — 它試圖在資料點之間繪製兩條線,並儘可能最大化兩條線之間的距離。如下圖示:

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

經驗法則表明,資料越複雜,演算法就越複雜。對於文字、數字、表格這樣的資料,我會選擇經典方法來操作。這些模型較小,學習速度更快,工作流程也更清晰。對於圖片、影片以及其他複雜的大資料,我肯定會研究神經網路。

就在5年前,你還可以找到基於SVM的人臉分類器。現在,從數百個預訓練好的神經網路模型中挑選一個模型反而更容易。不過,垃圾郵件過濾器沒什麼變化,它們還是用SVM編寫的,沒什麼理由去改變它。甚至我的網站也是用基於SVM來過濾評論中的垃圾資訊的。

迴歸(Regression)

“畫一條線穿過這些點,嗯~這就是機器學習”

迴歸演算法目前用於:

股票價格預測
供應和銷售量分析
醫學診斷
計算時間序列相關性
常見的迴歸演算法有:線性迴歸、多項式迴歸

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

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

如果畫出來的是直線,那就是“線性迴歸”,如果線是彎曲的,則是“多項式迴歸”。它們是迴歸的兩種主要型別。其他型別就比較少見了。不要被Logistics迴歸這個“害群之馬”忽悠了,它是分類演算法,不是迴歸。

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

聚類

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

聚類演算法目前用於:

市場細分(顧客型別,忠誠度)
合併地圖上鄰近的點
影象壓縮
分析和標註新的資料
檢測異常行為
常見演算法:K均值聚類、Mean-Shift、DBSCAN

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

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

就像分類演算法一樣,聚類可以用來檢測異常。使用者登陸之後的有不正常的操作?讓機器暫時禁用他的賬戶,然後建立一個工單讓技術支援人員檢查下是什麼情況。說不定對方是個“機器人”。我們甚至不必知道“正常的行為”是什麼樣,只需把使用者的行為資料傳給模型,讓機器來決定對方是否是個“典型的”使用者。

這種方法雖然效果不如分類演算法那樣好,但仍值得一試。

降維

“將特定的特徵組裝成更高階的特徵 ”

“降維”演算法目前用於:

推薦系統
漂亮的視覺化
主題建模和查詢相似文件
假圖識別
風險管理

常用的“降維”演算法:主成分分析、奇異值分解、潛在狄裡克雷特分配、潛在語義分析、t-SNE (用於視覺化)

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

將2D資料投影到直線上(PCA)

對人們來說,相對於一大堆碎片化的特徵,抽象化的概念更加方便。

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

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

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

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

關聯規則學習(Association rule learning)

“在訂單流水中查詢模式”

“關聯規則”目前用於:

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

常用的演算法:Apriori、Euclat、FP-growth

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

經典的“啤酒與尿布”的故事原理就是關聯規則應用,比如說,一位顧客拿著一提六瓶裝的啤酒去收銀臺。我們應該在結賬的路上擺放尿布嗎?人們同時購買啤酒和尿布的頻次如何?我們還可以用它來預測其他哪些序列? 能否做到在商品佈局上的作出微小改變就能帶來利潤的大幅增長?

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

關注數據君的臉書:

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/