寫給產(chǎn)品經(jīng)理的幾種機器學習算法原理

7 評論 23365 瀏覽 225 收藏 27 分鐘

本文用盡量直白的語言、較少的數(shù)學知識給各位產(chǎn)品經(jīng)理講清楚:“機器學習的過程”、“什么問題適合機器學習?”以及“各個算法的原理是什么?”

一、機器學習的過程

機器學習的過程:從本質(zhì)上來說,就是通過一堆的訓(xùn)練數(shù)據(jù)找到一個與理想函數(shù)(f)相接近的函數(shù)。

在理想情況下,對于任何適合使用機器學習的問題,在理論上都是會存在一個最優(yōu)的函數(shù)讓每個參數(shù)都有一個最合適的權(quán)重值,但在現(xiàn)實應(yīng)用中不一定能這么準確得找到這個函數(shù)。所以,我們要去找與這個理想函數(shù)相接近的函數(shù)。只要是能夠滿足我們的使用的函數(shù),我們就認為是一個好的函數(shù)。

這個訓(xùn)練數(shù)據(jù)的過程通常也被解釋為:

在一堆的假設(shè)函數(shù)(Hypothesis set)中,它是包含了各種各樣的假設(shè),其中包括好的和壞的假設(shè)。

我們需要做的就是:從這一堆假設(shè)函數(shù)中挑選出它認為最好的假設(shè)函數(shù)(g)——這個假設(shè)函數(shù)是與理想函數(shù)(f)最接近的。

機器學習這個過程就像是:在數(shù)學上,我們知道了有一個方程和一些點的坐標,用這些點來求這個方程的未知項從而得出完整的方程。

但在機器學習上,我們往往很難解出來這個完整的方程是什么。所以,我們只能通過各種手段求最接近理想情況下的未知項取值,使得這個結(jié)果最接近原本的方程。

二、什么問題適合用機器學習解決

機器學習不是萬能的,并不能解決所有的問題。

通過以上機器學習的過程可以看出來,實質(zhì)上,機器學習是:通過已知經(jīng)驗找到規(guī)律來進行預(yù)測。

銀行想知道應(yīng)該發(fā)放多少貸款給某個客戶時,可以根據(jù)過往成功放貸的數(shù)據(jù)找出每個貸款區(qū)間的人群特點、自身的房車資產(chǎn)狀況等,再看看這個客戶的特點符合哪個區(qū)間,以此去確定應(yīng)該發(fā)放多少貸款,這就是適合用機器學習去解決的問題。

對于適合用機器學習解決的問題,臺大的林軒田教授為我們總結(jié)了三個要素:

  1. 有規(guī)律可以學習
  2. 編程很難做到
  3. 有能夠?qū)W習到規(guī)律的數(shù)據(jù)

只要滿足這三個條件的問題,我們都可以挑選合適的算法去解決。

基于以上的條件,通常我們可以用機器學習解決三類問題:

  1. 預(yù)測(回歸):根據(jù)已知數(shù)據(jù)和模型,預(yù)測不同客戶應(yīng)該發(fā)放的貸款額度是多少
  2. 判別(分類):與預(yù)測有點類似,也是根據(jù)模型判別這個客戶屬于過往哪一類客戶的概率有多大
  3. 尋找關(guān)鍵因素:客戶的屬性非常多,通過模型我們可以找出對放貸影響最大的因素是什么

三、幾種常見的模型和算法

1. 感知機Perceptron Learning Algorithm,PLA

感知機學習算法是一種二分類的線性分類算法,一般用來解決二分類(只存在兩個結(jié)果)的問題。

例如:判斷“一個同學的考試成績合格還是不合格?”、“銀行會不會給某個客戶發(fā)放貸款?”等。

這種只存正、負兩個結(jié)果的問題,就稱為二分類的問題。

感知機學習算法的原理非常好理解,有點類似考試的概念:

把很多個影響因素看成每道題的得分。因為不同題目的權(quán)重不同,所以我們每道題的得分由權(quán)重(重要程度)和這個因素的得分相乘,最后把所有題目的得分加起來看看有沒有超過60分(閾值)。如果超過了就是及格了(正結(jié)果),即對應(yīng)的輸出值為1,如果沒有超過就是不及格(負結(jié)果),對應(yīng)的輸出值為-1。

還是以剛才銀行貸款的例子來解釋:

通常銀行判斷在“給不給某個客戶放貸款?”時,都是已經(jīng)掌握了客戶的各種信息(如:年薪、負債情況、社保繳費、公積金等等)。

因為數(shù)據(jù)的維度不同,描述的單位也不同,我們需要把這些數(shù)據(jù)按照各自維度的標準統(tǒng)一成可以量化的評分——可以按照年薪在5W以下得1分、5-10W得2分這樣的方式進行量化。

每個維度的重要程度都不同,所以我們在相加的時候需要考慮為每個值加上一個權(quán)重,再看看最后得出來的結(jié)果有沒有高過放款的閾值評分——如果高過這個分數(shù)就放款,低過這個分數(shù)就不放款。

首先看看關(guān)于感知機的數(shù)學定義:

我們可以轉(zhuǎn)換到幾何的方式去看這個問題:

在二維空間內(nèi),訓(xùn)練的數(shù)據(jù)就變成了平面上的一個點,這些數(shù)據(jù)里面有正樣本以及負樣本(成功放貸款的以及沒有放貸款的)。

感知機算法的學習過程就是:找到一個平面(在二維中表現(xiàn)為一條線)——能夠把所有的正樣本和負樣本區(qū)分開來。那么,當在應(yīng)用的時候面對新來的客戶,通過模型算出是正結(jié)果,我們就可以給這個客戶發(fā)放貸款;算出來是負結(jié)果,我們就不發(fā)放貸款。

怎么去找到這條線(超平面)呢?

感知機使用的學習策略是“梯度下降法”。

這種方法的思想是:先在平面內(nèi)隨便找一條線,然后開始把樣本點放到平面內(nèi)。當一個點被誤分類——即位于分類超平面錯誤的一側(cè)時,調(diào)整模型的參數(shù)(w和b),使分類超平面向該誤分類點的一側(cè)移動,以減少該誤分類點與超平面的距離,直到超平面越過該誤分類點使其被正確分類為止。

感知機利用梯度下降法的訓(xùn)練過程

這種方式對于模型的訓(xùn)練非常快速,計算量相對較小。

但同時,這樣的計算方式追求最大程度正確劃分、最小化訓(xùn)練數(shù)據(jù)的錯誤,效果類似下圖的直線——會導(dǎo)致比較容易造成過擬合的情況,即:模型對于新數(shù)據(jù)的包容性差,會過度地把新輸入數(shù)據(jù)分成錯誤的類別。

2. 線性回歸Linear regression,LR

講邏輯回歸之前,我們先講講“什么是線性回歸?”。

在統(tǒng)計學中,線性回歸是指:利用稱為線性回歸方程的最小平方函數(shù),對一個或多個自變量和因變量之間關(guān)系進行建模的一種回歸分析。

舉個直觀的例子:深圳春運時的客流量可能是與過年的時間相關(guān)的——越接近過年這天人流量越大。

如下圖所示:

如果客運站想預(yù)測:明天和后天的客流量。

該這么辦?

我們可以用一條線去盡量準的擬合這些數(shù)據(jù),如果有新的數(shù)據(jù)輸入進來,我們就可以找到對應(yīng)的預(yù)測點:

上述例子就是一個最簡單的一元線性回歸分析:y=ax+b。

該式子中只包括一個自變量和一個因變量,且二者的關(guān)系可用一條直線近似表示。在收集的數(shù)據(jù)中,每一個分量,就可以看做一個特征數(shù)據(jù)。

例如:上述例子的日期是一個特征,我們還可以找到地區(qū)、節(jié)假日、其他車站的客流量等等不同的因素,每個特征至少對應(yīng)一個未知的參數(shù)。這樣就形成了一個線性模型函數(shù)。

當特征變多時,上述線性回歸的向量表示形式為:

這個矩陣方程由于計算量太大很難直接去求解,那么我們要怎么樣去找到這根線的位置呢?

在這里我們可以退一步,把參數(shù)求解的問題,轉(zhuǎn)化為求最小誤差的問題,讓實際值與預(yù)測值之間的誤差變得最小,那么我們的預(yù)測值就十分接近實際值了。

這就是損失函數(shù)的來源。在機器學習的算法中,實際上存在大量由于計算量巨大從而無法求解的問題。我們都是把這類問題轉(zhuǎn)化成求最小誤差,即:實際值與預(yù)測值之間的誤差(損失)問題,想辦法求出讓誤差最小的情況,就可以得到問題的最優(yōu)解。

線性回歸方程的損失函數(shù)通常是通過最小二乘法,或者梯度下降法進行求解,在這里我們不展開敘述。

線性回歸是目前運用最廣泛的模型之一,在金融、經(jīng)濟學、醫(yī)學等領(lǐng)域常常用來解決預(yù)測類問題。

通過觀測數(shù)據(jù)集擬合出一個預(yù)測模型,我們就可以知道:一組特定數(shù)據(jù)是否在一段時間內(nèi)會增長或下降?

3. 邏輯回歸 Logistic regression,LR

邏輯回歸實際上也是一個線性回歸模型,但是線性回歸常常用來做預(yù)測,邏輯回歸卻常常用來解決二分類問題。

為什么會有這么大的差異呢?

如果對于上面的感知機算法來說,目標是為了找到一個能夠?qū)⒄摌颖就耆珠_的超平面的話,從另外一個層面看感知機算法就相當于是一個躍階函數(shù)。

我們只需要找到閾值,并且拿輸入的數(shù)據(jù)去對比,得出數(shù)據(jù)是大于還是小于這個閾值,然后就能給出的就是0或1(正/負樣本)的反饋。

對應(yīng)到數(shù)學模型上:我們只需要把算出來的結(jié)果映射到這個躍階函數(shù)上看看大于0還是小于0,就能說他是一個正樣本還是負樣本。

感知器的模型雖然簡單直觀,但問題在于這個模型不夠光滑。

如果一個新的樣本點我們計算出來結(jié)果等于0.01——只是比0大了一點點,就被分類為正樣本,這樣在實際應(yīng)用的時候就可能會不夠準確。同時,這個函數(shù)在0處有一個躍階導(dǎo)致這一點不連續(xù),在數(shù)學上也不好處理。

那么有沒有什么方法可以讓這個函數(shù)更光滑一點呢?

在數(shù)學上剛好存在一個sigmoid函數(shù)有這樣的特性。

這個函數(shù)的輸入范圍是“?∞→+∞”,而值域則光滑地分布在0到1之間。

對于這個模型的解釋和感知機也稍微有些區(qū)別。

感知機:是根據(jù)輸入的條件,判斷是一個正樣本還是負樣本。

而邏輯回歸因為值域分布在0到1之間的特性,所以輸出的是判斷是:一個正樣本或負樣本的概率是多少?

我們的學習策略即是:求所有訓(xùn)練樣本的條件概率之積的最大值——也可以理解為求概率之積盡可能大,這樣模型預(yù)測的效果就會越準確。

邏輯回歸的本質(zhì)上是一個線性回歸模型,只是在特征到結(jié)果的映射中加入了一層函數(shù)映射——即先把特征線性求和,然后使用函數(shù)g(z)將最為假設(shè)函數(shù)來預(yù)測。

我們看到的參數(shù)z,實際上也是一個線性回歸的方程,只不過在這里符號化表示。實際上求解的方式與線性回歸是相同的——都是要通過損失函數(shù)的方式逼近最優(yōu)解。

邏輯回歸的目的是:將樣本分成0或1兩類。

但是,我們也關(guān)心樣本分類的準確性。

例如:一個腫瘤被預(yù)測出來是惡性的,我們也會關(guān)心它是惡性的可能性有多大?

對邏輯回歸的理解也可以是:我們通過概率將樣本分成了0和1兩類。

因為邏輯回歸不像感知機——通過一個固定的閥值去判斷樣本數(shù)據(jù)的正負性,所以在二維平面上也不再是通過一條直線去判斷數(shù)據(jù)。而是變得更加有包容性,可以把一些不能線性區(qū)分的數(shù)據(jù)集區(qū)分開來。

其根本原因就是:sigmoid函數(shù)把因變量和自變量變成了曲線的關(guān)系,使得在函數(shù)在二維平面上的表現(xiàn)更為柔和。這里面損失函數(shù)發(fā)揮了很大的作用,這里不再展開說明。

邏輯回歸與感知機相比,有三方面的優(yōu)勢:

  1. 直接對分類可能性建模,不需要事先假設(shè)數(shù)據(jù)的分布情況。感知機算法中如果不先假設(shè)一下數(shù)據(jù)的分布再去確定線的位置的話,很可能會算錯,但是邏輯回歸算法就避免了這個問題。
  2. 不僅可以預(yù)測出類別,還可以給出具體的概率預(yù)測值。這對預(yù)測結(jié)果有更好的解釋性。
  3. 有很好的數(shù)學性質(zhì),方便計算,工程量較小。

邏輯回歸算法因其是現(xiàn)在最廣泛使用的算法之一,常常用于尋找某一疾病的危險因素、個人信用評估、貸款/金融意圖預(yù)測等等領(lǐng)域。

同時,也可以用來對數(shù)據(jù)做自動判別分析,比如:一條評論是正面還是負面?一個用戶的購買路徑是男性還是女性?預(yù)測用戶會不會購買某種商品?等等。

邏輯回歸應(yīng)用廣泛還是因為它的模型與許多現(xiàn)實問題相吻合,能夠幫助我們快速解決很多實際的問題。

4. K近鄰分類算法 K-Nearest Neighbor,KNN

上面我們說到,感知機以及邏輯回歸實際上都是一種二分類算法,非黑即白。

那,如果遇到多分類問題該如何解決呢?

有一種非常簡單的算法可以幫助我們快速解決這個問題——K近鄰分類算法。

K近鄰分類算法是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。

用官方的解釋來說:所謂K近鄰算法,即存在一個樣本數(shù)據(jù)(訓(xùn)練樣本)集,并且樣本中每個數(shù)據(jù)都存在標簽(類別)——也就是說樣本集中每一個數(shù)據(jù)都被分到一個類別中。輸入新的數(shù)據(jù)后,將新數(shù)據(jù)的每個特征與樣本集中的數(shù)據(jù)對應(yīng)的特征進行比較,然后算法提取樣本集中特征最相似的數(shù)據(jù)的分類標簽,即可以為新輸入的數(shù)據(jù)進行分類。

在訓(xùn)練數(shù)據(jù)集中找到與該實例最鄰近的K個實例, 如果這K個實例的大多數(shù)都屬于同一個分類,就把該輸入實例分類到這個類中。

一般情況下,我們只選擇樣本集中前K個最相似的數(shù)據(jù),這就是K近鄰算法中k的出處(通常K是不大于20的整數(shù))。

比如:比較3個最近的數(shù)據(jù),那么K=3。

最后,選擇K個最相似的數(shù)據(jù)中出現(xiàn)次數(shù)最多的分類,作為新數(shù)據(jù)的分類。

這種思想實際上也非常好理解,有點像“人以類聚,物以群分”的說法——如果你身邊的鄰居都來自同一個公司,那么你極有可能也屬于某個公司;如果你身邊的朋友絕大多數(shù)都屬于某個學校畢業(yè),那么你極有可能也曾經(jīng)在這個學校讀過書。

這種方式也很類似投票機制,新來的數(shù)據(jù)與舊數(shù)據(jù)相比對,多數(shù)都屬于某個類別時,采用少數(shù)服從多數(shù)的原則,給新數(shù)據(jù)歸類。

同樣,我們轉(zhuǎn)化到幾何的方式去看這個算法,KNN可以看成:有那么一堆你已經(jīng)知道分類的數(shù)據(jù),然后當一個新數(shù)據(jù)進入的時候,就開始跟已知數(shù)據(jù)里的每個點求距離,然后挑離這個訓(xùn)練數(shù)據(jù)最近的K個點看看這幾個點屬于什么類型,就把這個新的點歸到這個同屬大多數(shù)的類別里。

K近鄰分類算法的優(yōu)缺點都非常明顯。

優(yōu)點主要有兩個方面:

  1. 精度很高,對異常數(shù)據(jù)也不敏感(所屬類別是由大多數(shù)點決定了,一兩個異常點不會有太大的影響)。
  2. 與上面的PLA、LR算法相比,不需要訓(xùn)練模型,易于實現(xiàn),來一個新數(shù)據(jù)就可以馬上進行比對。

缺點則是:計算復(fù)雜度比較高。

因為要算新數(shù)據(jù)與每一個臨近點的距離,當維度超過二維時這就是一個空間復(fù)雜度很大的矩陣。

基于KNN算法的特點,目前主要應(yīng)用在文本分類商品推薦等場景。

在文本分類中像信息檢索、手寫字識別、機器翻譯這樣的場景都可以使用KNN算法以保證在有限的硬件資源下,提供給用戶一個高效的檢索系統(tǒng)。

5. 樸素貝葉斯分類器 Naive Bayes Classifier,NBC

貝葉斯分類是一類分類算法的總稱,這類算法均以貝葉斯定理和特征條件獨立假設(shè)為基礎(chǔ),故統(tǒng)稱為貝葉斯分類。

而樸素貝葉斯分類是貝葉斯分類中最簡單,也是常見的一種分類方法。

樸素貝葉斯的簡單之處在于:對于給出的待分類項,求解在此待分類項出現(xiàn)的條件下各個類別出現(xiàn)的概率。哪個概率最大,就認為此待分類項屬于哪個類別。

這就有點像我們走在街上,迎面走過來一個黑色皮膚的人,那我們就猜他是非洲人,因為黑人中非洲人最多。

通過上述例子我們可以看到:我們判斷一個人是非洲人基于一個很關(guān)鍵的信息,因為他是黑色皮膚的人。所以,我們的判斷實際上是發(fā)生在“擁有黑色皮膚”這件事的情況下我們的推斷。

這種在其他已知事件發(fā)生的基礎(chǔ)上去計算某件事發(fā)生的概率叫做“條件概率”。一般我們使用貝葉斯定理求解條件概率。

要搞懂貝葉斯定理之前,我們首先要搞懂“什么是正向概率?”和“什么是反向(條件)概率?”。

在貝葉斯研究之前, 人們已經(jīng)能夠計算正向概率。

比如:“假設(shè)袋子里有N個白球M個黑球,你伸手進去摸一把,摸出黑球的概率有多大?”。

然而在我們實際生活中,日常能觀察到的只是事物表面的結(jié)果——往往我們只知道從袋子里取出來的球是什么顏色,并不能看到袋子里的實際情況。這時候我們就希望有一些方法可以通過觀察這些取出來的球的顏色,可以推測出袋子里面黑白球的比例是什么樣的。

我們通過下圖簡單講一下貝葉斯定理的組成:

樸素貝葉斯分類器的核心在于訓(xùn)練模型階段——需要計算每個類別在訓(xùn)練樣本中的出現(xiàn)頻率,以及每個特征屬性劃分對每個類別的條件概率估計,并將結(jié)果記錄。

這一階段是機械性階段,根據(jù)前面討論的公式可以由程序自動計算完成。

讓我們通過一個貝葉斯分類器解決拼寫檢查/糾正的例子加深理解:

當一個用戶輸入了一個不在字典中的單詞時,我們需要去猜測:這個人到底想要輸出的單詞是什么呢?如果用戶輸出了一個theu,那么他到底是想輸入they還是then?到底哪個猜測的可能性更大?

這個問題實際上是在求“已知輸入theu的情況下,我們猜測他想輸出they\then的概率誰更大?”

用上述符號表示即:P(B|A)。

我們可以很容易計算出they\then單詞的詞頻P(B),那么要怎么得到P(A|B)呢?

在這里可以用輸入單詞與正確單詞在鍵盤上的距離來表示P(A|B)——即通過字母在鍵盤上的距離判斷:下輸入哪個字母的可能性更高?

比如:在鍵盤上,Y和U離得更近,所以我們會認為要輸入Y但是不小心按成了U的概率更大一些。

通過上述的信息就可以計算出輸出哪個單詞的概率更大。

樸素貝葉斯分類器的以下優(yōu)點:

  1. 生成式模型,通過計算概率來進行分類,可以用來處理多分類問題而且分類的結(jié)果很容易被解釋
  2. 所需估計的參數(shù)不大,對缺失數(shù)據(jù)不太敏感
  3. 無需復(fù)雜的迭代求解框架,適用于規(guī)模巨大的數(shù)據(jù)集

除了上述說到的拼寫糾正以外,貝葉斯分類器還經(jīng)常被用在垃圾郵件分類、文字廣告過濾、識別惡性評論等等領(lǐng)域。

在許多場景下,樸素貝葉斯分類算法可以與后續(xù)講到的決策樹、神經(jīng)網(wǎng)絡(luò)算法相媲美,而且方法簡單、分類準確率高、速度快。但這個算法也有一些像對輸入數(shù)據(jù)的形式比較敏感、計算先驗概率時的分類決策可能存在錯誤這樣的缺點,在使用的時候還是要根據(jù)具體的場景選擇。

以上簡單介紹了關(guān)于機器學習的一些算法,最后,感謝一下我的同行好友中翹。

#專欄作家#

夏唬人,公眾號:夏唬人,人人都是產(chǎn)品經(jīng)理專欄作家。某廠策略產(chǎn)品經(jīng)理,關(guān)注推薦,搜索,AI策略方向,用數(shù)據(jù)來賦能業(yè)務(wù)。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自 Unsplash,基于 CC0 協(xié)議。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 感謝分享~

    來自江蘇 回復(fù)
  2. 馬克

    回復(fù)
  3. 請問下,我能轉(zhuǎn)發(fā)您的文章到我的個人公眾號嗎?我會標明來源和您的公眾號。

    回復(fù)
    1. 可以

      來自北京 回復(fù)
  4. 看不到下面內(nèi)容??!

    回復(fù)
    1. 這是網(wǎng)站的問題了,可以聯(lián)系一下

      來自北京 回復(fù)
  5. 謝謝分享,很有幫助

    來自北京 回復(fù)