寫給產品經理的幾種機器學習算法原理


一、機器學習的過程

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

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

這個訓練數據的過程通常也被解釋為:

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

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

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

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

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

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

通過以上機器學習的過程可以看出來,實質上,機器學習是:通過已知經驗找到規律來進行預測。

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

對於適合用機器學習解決的問題,台大的林軒田教授為我們總結了三個要素:

  1. 有規律可以學習
  2. 編程很難做到
  3. 有能夠學習到規律的數據

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

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

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

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

1. 感知機Perceptron Learning Algorithm,PLA

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

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

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

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

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

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

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

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

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

首先看看關於感知機的數學定義:

我們可以轉換到幾何的方式去看這個問題:

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

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

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

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

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

感知機利用梯度下降法的訓練過程

這種方式對於模型的訓練非常快速,計算量相對較小。

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

2. 線性回歸Linear regression,LR

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

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

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

如下圖所示:

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

該這么辦?

我們可以用一條線去盡量准的擬合這些數據,如果有新的數據輸入進來,我們就可以找到對應的預測點:

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

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

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

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

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

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

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

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

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

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

3. 邏輯回歸 Logistic regression,LR

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

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

如果對於上面的感知機算法來說,目標是為了找到一個能夠將正負樣本完全分開的超平面的話,從另外一個層面看感知機算法就相當於是一個躍階函數。

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

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

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

如果一個新的樣本點我們計算出來結果等於0.01——只是比0大了一點點,就被分類為正樣本,這樣在實際應用的時候就可能會不夠准確。同時,這個函數在0處有一個躍階導致這一點不連續,在數學上也不好處理。

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

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

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

對於這個模型的解釋和感知機也稍微有些區別。

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

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

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

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

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

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

但是,我們也關心樣本分類的准確性。

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

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

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

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

邏輯回歸與感知機相比,有三方面的優勢:

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

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

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

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

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

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

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

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

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

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

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

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

比如:比較3個最近的數據,那么K=3。

最后,選擇K個最相似的數據中出現次數最多的分類,作為新數據的分類。

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

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

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

K近鄰分類算法的優缺點都非常明顯。

優點主要有兩個方面:

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

缺點則是:計算復雜度比較高。

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

基於KNN算法的特點,目前主要應用在文本分類與商品推薦等場景。

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

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

貝葉斯分類是一類分類算法的總稱,這類算法均以貝葉斯定理和特征條件獨立假設為基礎,故統稱為貝葉斯分類。

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

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

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

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

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

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

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

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

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

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

朴素貝葉斯分類器的核心在於訓練模型階段——需要計算每個類別在訓練樣本中的出現頻率,以及每個特征屬性划分對每個類別的條件概率估計,並將結果記錄。

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

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

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

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

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

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

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

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

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

朴素貝葉斯分類器的以下優點:

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

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM