機器學習演算法一覽

IT派發表於2018-07-23

認識人工智慧,還需要理清幾個概念之間的關係:人工智慧是一個大的概念,是讓機器像人一樣思考甚至超越人類;而機器學習是實現人工智慧的一種方法,是使用演算法來解析資料、從中學習,然後對真實世界中的事件做出決策和預測;深度學習是機器學習的一種實現方式,通過模擬人神經網路的方式來訓練網路;而統計學是機器學習和神經網路的一種基礎知識。


640?wx_fmt=png

 

機器學習最大的特點是利用資料而不是指令來進行各種工作,其學習過程主要包括:資料的特徵提取、資料預處理、訓練模型、測試模型、模型評估改進等幾部分。接下來我們重點介紹機器學習過程中的常見演算法。


640?wx_fmt=png

 

機器學習演算法:

是使計算機具有智慧的關鍵



演算法是通過使用已知的輸入和輸出以某種方式“訓練”以對特定輸入進行響應。代表著用系統的方法描述解決問題的策略機制。人工智慧的發展離不開機器學習演算法的不斷進步。

 

機器學習演算法可以分為傳統的機器學習演算法和深度學習。傳統機器學習演算法主要包括以下五類:


  • 迴歸:建立一個迴歸方程來預測目標值,用於連續型分佈預測

  • 分類:給定大量帶標籤的資料,計算出未知標籤樣本的標籤取值

  • 聚類:將不帶標籤的資料根據距離聚整合不同的簇,每一簇資料有共同的特徵

  • 關聯分析:計算出資料之間的頻繁項集合

  • 降維:原高維空間中的資料點對映到低維度的空間中

 

640?wx_fmt=png

 

下面我們將選取幾種常見的演算法,一一介紹。

 

1. 線性迴歸:找到一條直線來預測目標值

 

一個簡單的場景:已知房屋價格與尺寸的歷史資料,問面積為2000時,售價為多少?


640?wx_fmt=png

 

此類問題可以用迴歸演算法來解決。迴歸是指確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法,通過建立一個迴歸方程(函式)來估計特徵值對應的目標變數的可能取值。最常見的是線性迴歸(Y= a X + b),即找到一條直線來預測目標值。迴歸的求解就是求解迴歸方程的迴歸係數(a,b)的過程,並且使誤差最小。房價場景中,根據房屋面積和售價的關係,求出迴歸方程,則可以預測給定房屋面積時的售價。


640?wx_fmt=png

 

線性迴歸的應用非常廣泛,例如:


  1. 預測客戶終生價值:基於老客戶歷史資料與客戶生命週期的關聯關係,建立線性迴歸模型,預測新客戶的終生價值,進而開展針對性的活動。

  2. 機場客流量分佈預測:以海量機場WiFi資料及安檢登機值機資料,通過資料演算法實現機場航站樓客流分析與預測。

  3. 貨幣基金資金流入流出預測:通過使用者基本資訊資料、使用者申購贖回資料、收益率表和銀行間拆借利率等資訊,對使用者的申購贖回資料的把握,精準預測未來每日的資金流入流出情況。

  4. 電影票房預測:依據歷史票房資料、影評資料、輿情資料等網際網路公眾資料,對電影票房進行預測。

 

2. 邏輯迴歸:找到一條直線來分類資料

 

邏輯迴歸雖然名字叫回歸,卻是屬於分類演算法,是通過Sigmoid函式將線性函式的結果對映到Sigmoid函式中,預估事件出現的概率並分類。Sigmoid是歸一化的函式,可以把連續數值轉化為0到1的範圍,提供了一種將連續型的資料離散化為離散型資料的方法。

 

因此,邏輯迴歸從直觀上來說是畫出了一條分類線。位於分類線一側的資料,概率>0.5,屬於分類A;位於分類線另一側的資料,概率<0.5,屬於分類B。例如圖中通過計算患腫瘤的概率,將結果分類兩類,分別位於邏輯分類線的兩側。


640?wx_fmt=png

 邏輯迴歸的應用也非常廣泛,例如:


  1. 醫學界:探索某個疾病的危險因素,根據危險因素預測疾病是否發生,與發生的概率。 

  2. 金融界:預測貸款是否會違約,或放貸之前去估計貸款者未來是否會違約或違約的概率。

  3. 消費行業:預測某個消費者是否會購買某個商品,是否會購買會員卡,從而針對性得對購買概率大的使用者發放廣告,或代金券等等。

 

3. K-近鄰:用距離度量最相鄰的分類標籤

 

一個簡單的場景:已知一個電影中的打鬥和接吻鏡頭數,判斷它是屬於愛情片還是動作片。當接吻鏡頭數較多時,根據經驗我們判斷它為愛情片。那麼計算機如何進行判別呢? 

 

640?wx_fmt=png


可以使用K近鄰演算法,其工作原理如下:


(1)計算樣本資料中的點與當前點之間的距離

(2)演算法提取樣本最相似資料(最近鄰)的分類標籤

(3)確定前k個點所在類別的出現頻率. 一般只選擇樣本資料集中前k個最相似的資料,這就是k-近鄰演算法中k的出處,通常k是不大於20的整數

(4)返回前k個點所出現頻率最高的類別作為當前點的預測分類

 

電影分類場景中,k取值為3,按距離依次排序的三個點分別是動作片(108,5)、動作片(115,8)、愛情片(5,89)。在這三個點中,動作片出現的頻率為三分之二,愛情片出現的頻率為三分之一,所以該紅色圓點標記的電影為動作片。

 

K近鄰演算法的一個常見應用是手寫數字識別。手寫字型對於人腦來說,看到的數字是一幅影象,而在電腦看來這是一個二維或三維陣列,那怎麼對數字進行識別? 


640?wx_fmt=png

 

使用K近鄰演算法的進行識別的具體步驟為:


(1)首先將每個圖片處理為具有相同的色彩和大小:寬高是32畫素x32畫素。

(2)將32*32的二進位制影象矩陣轉換成1*1024的測試向量。

(3)將訓練樣本儲存在訓練矩陣中,建立一個m行1024列的訓練矩陣,矩陣的每行資料儲存一個影象。

(4)計算目標樣本與訓練樣本的距離,選擇前k個點所出現頻率最高的數字作為當前手寫字型的預測分類。

 

4. 樸素貝葉斯:選擇後驗概率最大的類為分類標籤

 

一個簡單的場景:一號碗(C1)有30顆水果糖和10顆巧克力糖,二號碗(C2)有水果糖和巧克力糖各20顆。現在隨機選擇一個碗,從中摸出一顆糖,發現是水果糖。問這顆水果糖(X)最有可能來自哪個碗?


640?wx_fmt=png

 

這類問題可以藉助貝葉斯公式來計算,不需要針對目標變數建立模型。在分類時,通過計算樣本屬於各個類別的概率,然後取概率值大的類別作為分類類別。

 

640?wx_fmt=png


P(X|C) :條件概率, C中X出現的概率

P(C):先驗概率, C出現的概率

P(C|X) :後驗概率,X屬於C類的概率

 

假設有 C1 和 C2 兩個類,由於 P(X)都是一樣的,所以不需要考慮 P(X)

只需考慮如下:

如果 P(X|C1) * P(C1) > P(X|C2) * P(C2),則 P(C1|X) > P(C2|X),得 X 屬於 C1 ;


如果 P(X|C1) * P(C1) < P(X|C2) * P(C2),則 P(C2|X) < P(C2|X),得 X 屬於 C2 。

 

例如上面的例子中:

P(X):水果糖的概率為5/8

P(X|C1):一號碗中水果糖的概率為3/4

P(X|C2):二號碗中水果糖的概率為2/4

P(C1)= P(C2):兩個碗被選中的概率相同,為1/2

則水果糖來自一號碗的概率為:P(C1|X)=P(X|C1)P(C1)/P(X)=(3/4)(1/2)/(5/8)=3/5

水果糖來自二號碗的概率為:P(C2|X)=P(X|C2)P(C2)/P(X)=(2/4)(1/2)/(5/8)=2/5

P(C1|X)>P(C2|X) ,因此這顆糖最有可能來自一號碗。

 

樸素貝葉斯的主要應用有文字分類、垃圾文字過濾,情感判別,多分類實時預測等。

 

5. 決策樹:構造一棵熵值下降最快的分類樹

 

一個簡單的場景:相親時,可能首先檢測相親對方是否有房。如果有,則考慮進一步接觸。如果沒有房,則觀察其是否有上進心,如果沒有,直接Say Goodbye。如果有,則可以列入候選名單。


640?wx_fmt=png

 

這就是一個簡單的決策樹模型。決策樹是一種樹型結構,其中每個內部結點表示在一個屬性上的測試,每個分支代表一個測試輸出,每個葉結點代表一種類別。採用的是自頂向下的遞迴方法,選擇資訊增益最大的特徵作為當前的分裂特徵。

 

決策樹可以應於:使用者分級評估、貸款風險評估、選股、投標決策等。

  

6. 支援向量機(SVM):構造超平面,分類非線性資料

 

一個簡單的場景:要求用一根線將不同顏色的球分開,要求儘量在放更多球之後,仍然適用。


640?wx_fmt=png

 

A、B兩條線都可以滿足條件。再繼續增加球,線A仍可以將球很好的分開,而線B則不可以。


640?wx_fmt=png

 

進一步增加難度,當球沒有明確的分界線,用一條直線已經無法將球分開,該怎麼解決?

640?wx_fmt=png


這個場景中涉及支援向量機的的兩個問題:


(1)當一個分類問題,資料是線性可分時,只要將線的位置放在讓小球距離線的距離最大化的位置即可,尋找這個最大間隔的過程,就叫做最優化。

(2)一般的資料是線性不可分的,可以通過核函式,將資料從二維對映到高位,通過超平面將資料切分。

 

不同方向的最優決策面的分類間隔通常是不同的,那個具有“最大間隔”的決策面就是SVM要尋找的最優解。這個真正的最優解對應的兩側虛線所穿過的樣本點,就是SVM中的支援樣本點,稱為支援向量。

 

SVM的應用非常廣泛,可以應用於垃圾郵件識別、手寫識別、文字分類、選股等。

 

7. K-means:計算質心,聚類無標籤資料

 

在上面介紹的分類演算法中,需要被分類的資料集已經有標記,例如資料集已經標記為○或者×,通過學習出假設函式對這兩類資料進行劃分。而對於沒有標記的資料集,希望能有一種演算法能夠自動的將相同元素分為緊密關係的子集或簇,這就是聚類演算法。

640?wx_fmt=png

舉個具體的例子,例如有一批人的年齡的資料,大致知道其中有一堆少年兒童,一堆青年人,一堆老年人。

 

聚類就是自動發現這三堆資料,並把相似的資料聚合到同一堆中。如果要聚成3堆的話,那麼輸入就是一堆年齡資料,注意,此時的年齡資料並不帶有類標號,也就是說只知道里面大致有三堆人,至於誰是哪一堆,現在是不知道的,而輸出就是每個資料所屬的類標號,聚類完成之後,就知道誰和誰是一堆了。

 

而分類就是,事先告訴你,少年兒童、青年人及老年人的年齡是什麼樣的,現在新來了一個年齡,輸入它的年齡,輸出她屬於的分類。一般分類器是需要訓練的,它才能識別新的資料。

 

K-Means演算法是一種常見的聚類演算法,其基本步驟為:

(1)隨機生成k個初始點作為質心;

(2)將資料集中的資料按照距離質心的遠近分到各個簇中;

(3)將各個簇中的資料求平均值,作為新的質心,重複上一步,直到所有的簇不再改變。

兩個分類間隔越遠,則聚類效果越好。

 

640?wx_fmt=png


K-means演算法的一個案例是:客戶價值細分,精準投資。以航空公司為例,因為業務競爭激烈,企業營銷焦點從產品中心轉為客戶中心;建立合理的客戶價值評估模型,進行客戶分類,進行精準營銷,是解決問題的關鍵。

 

識別客戶價值,通過五個指標:最近消費時間間隔R,消費頻率F,飛行里程 M和折扣係數的平均值C,客戶關係長度L(LRFMC模型)。採用K-Means演算法對客戶資料進行客戶分群,聚成五類(需結合業務的理解與分析來確定客戶的類別數量)繪製客戶群特徵雷達圖。


640?wx_fmt=png

640?wx_fmt=png

客戶價值分析:

重要保持客戶:C、F、M較高,R低。應將資源優先投放到這類客戶身上,進行差異化管理,提高客戶的忠誠度和滿意度。

重要發展客戶:C較高,R、F、M較低。這類客戶入會時長(L)短、當前價值低、發展潛力大,應促使客戶增加在本公司和合作夥伴處的消費。

重要挽留客戶:C、F 或 M 較高,R較高 或 L變小,客戶價值變化的不確定性高。應掌握客戶最新資訊、維持與客戶的互動。

一般和低價值客戶:C、F、M、L低、R較高。這類客戶可能在打折促銷時才會選擇消費。

 

K-means演算法的一個比較有趣的案例是進行影象壓縮。在彩色影象中,每個畫素的大小為3位元組(RGB),可以表示的顏色總數為256 * 256 * 256。利用K-means演算法把類似的顏色分別放在K個簇中,因此只需要保留每個畫素的標籤,以及每個簇的顏色編碼即可完成影象的壓縮。

 

640?wx_fmt=png


8. 關聯分析:挖掘啤酒與尿布(頻繁項集)的關聯規則


20世紀90年代美國沃爾瑪超市中,超市管理人員分析銷售資料時發現 “啤酒”與“尿布”兩件看上去毫無關係的商品會經常出現在同一個購物籃中。經過調查發現,這種現象出現在年輕的父親身上。在美國有嬰兒的家庭中,一般是母親在家中照看嬰兒,年輕的父親去超市買尿布時,往往會順便為自己購買啤酒。如果在賣場只能買到兩件商品之一,他很有可能會放棄購物而去另一家可以同時買到啤酒與尿布的商店。由此,沃爾瑪發現了這一獨特的現象,開始在賣場嘗試將啤酒與尿布擺放在相同區域,讓年輕的父親可以同時找到這兩件商品,從而獲得了很好的商品銷售收入。

 

“啤酒+尿布”故事中利用的就是關聯演算法,比較常見的一種關聯演算法是FP-growth演算法。

演算法中幾個相關的概念:


  • 頻繁項集:在資料庫中大量頻繁出現的資料集合。例如購物單資料中{'啤酒'}、{'尿布'}、{'啤酒', '尿布'}出現的次數都比較多。

  • 關聯規則:由集合 A,可以在某置信度下推出集合 B。即如果 A 發生了,那麼 B 也很有可能會發生。例如購買了{'尿布'}的人很可能會購買{'啤酒'}。

  • 支援度:指某頻繁項集在整個資料集中的比例。假設資料集有 10 條記錄,包含{'啤酒', '尿布'}的有 5 條記錄,那麼{'啤酒', '尿布'}的支援度就是 5/10 = 0.5。

  • 置信度:有關聯規則如{'尿布'} -> {'啤酒'},它的置信度為    {'尿布'} -> {'啤酒'}


假設{'尿布', '啤酒'}的支援度為 0.45,{'尿布'}的支援度為 0.5,則{'尿布'} -> {'啤酒'}的置信度為 0.45 / 0.5 = 0.9。

 

應用比較廣泛,例如:


  1. 用於制定營銷策略。如同啤酒與尿布的例子,超市如果將啤酒和尿布放在相鄰的位置,會增加兩者的銷量。

  2. 用於發現共現詞。在瀏覽器中輸入"普元"時,瀏覽器自動彈出如"普元平臺","普元EOS"等備選記錄。

 

FP-growth演算法一個簡單的案例:通過購物車資料,分析商品之間的關聯關係。


640?wx_fmt=png

 

分析步驟為:

(1)從購物車資料中挖掘出頻繁項集

(2)從頻繁項集中產生關聯規則,計算支援度

(3)輸出置信度

 

頻繁項集

支援度

關聯規則

置信度

{'gloves'}

0.5

{'socks' }-> {'shoes'}

0.75

{'shoes', 'socks'}

0.5

{'shoes'} -> {'socks'}

1.0

{'milk', 'eggs', 'bread'}

0.5

{'eggs', 'bread'} -> {'milk'}

1.0

{'bread'}

0.5

{'bread'} -> {'milk', 'eggs'}

1.0

{'milk', 'bread'}

0.5

{'eggs'} -> {'milk', 'bread'}

1.0

{'gloves', 'socks'}

0.5

{'milk', 'bread'} -> {'eggs'}

1.0

{'shoes'}

0.5

{'milk'} -> {'eggs', 'bread'}

0.75

{'eggs', 'bread'}

0.5

{'milk', 'eggs'} -> {'bread'}

1.0

{'eggs'}

0.5

{'bread'} -> {'milk'}

1.0

{'milk'}

0.67

{'milk'} -> {'eggs', 'bread'}

0.75

{'socks'}

0.67

{'milk', 'eggs'} -> {'bread'}

1.0

{'milk', 'eggs'}

0.5

{'bread'} -> {'milk'}

1.0



{'milk'} -> {'bread'}

0.75

 

根據結果,可以分析出購買了鞋子,極有可能會同時購買襪子;購買了雞蛋與麵包,極有可能會購買牛奶。

 

9. PCA降維:減少資料維度,降低資料複雜度

 

降維是指將原高維空間中的資料點對映到低維度的空間中。因為高維特徵的數目巨大,距離計算困難,分類器的效能會隨著特徵數的增加而下降;減少高維的冗餘資訊所造成的誤差,可以提高識別的精度。

 

 

640?wx_fmt=png


比較常用的是主成分分析演算法(PCA)。它是通過某種線性投影,將高維的資料對映到低維的空間中表示,並期望在所投影的維度上資料的方差最大,以此使用較少的資料維度,同時保留住較多的原資料點的特性。


640?wx_fmt=png

 

例如對數字進行降維,當使用1個特徵向量的時候,3的基本輪廓已經保留下來了,特徵向量使用的越多就越與原始資料接近。

 

 

Anaconda:初學Python、

入門機器學習的首選


 

已經瞭解了機器學習過程中使用的演算法,那麼該如何動手實踐呢?

 

Anaconda是初學Python、入門機器學習的首選。它是一個用於科學計算的Python發行版,提供了包管理與環境管理的功能,可以很方便地解決多版本python並存、切換以及各種第三方包安裝問題。

 

640?wx_fmt=png

 

整合包功能:

  1. NumPy:提供了矩陣運算的功能,其一般與Scipy、matplotlib一起使用,Python建立的所有更高層工具的基礎,不提供高階資料分析功能

  2. Scipy:依賴於NumPy,它提供便捷和快速的N維向量陣列操作。提供模組用於優化、線性代數、積分以及其它資料科學中的通用任務。

  3. Pandas:基於NumPy 的一種工具,該工具是為了解決資料分析任務而建立的,包含高階資料結構,以及和讓資料分析變得快速、簡單的工具

  4. Matplotlib:Python最著名的繪相簿

 

其中, Scikit-Learn是Anaconda中整合的開源機器學習工具包,主要涵蓋分類,迴歸和聚類演算法,可以直接呼叫傳統機器學習的演算法進行使用。同時Anaconda也相容Google開發的第二代人工智慧系統TensorFlow,進行深度學習的開發。

 

最後通過一個基於Python的決策樹案例,來直觀瞭解一下機器學習的過程。

貸款申請的決策樹,用以對未來的貸款申請進行分類。

 

具體實現過程:

(1)準備資料集:從貸款申請樣本資料表中,選取對訓練資料具有分類能力的特徵

(2)構建樹:選擇資訊增益最大的特徵作為分裂特徵構建決策樹

(3)資料視覺化:使用Matplotlib對資料進行視覺化

(4)執行分類:用於實際資料的分類。例如輸入測試資料[0,1],它代表沒有房子,但是有工作,分類結果為“房貸”。

 

640?wx_fmt=png

∞∞∞

640?wx_fmt=jpeg&wx_lazy=1

IT派 - {技術青年圈}持續關注網際網路、區塊鏈、人工智慧領域640?wx_fmt=jpeg


公眾號回覆“IT派”

邀你加入IT派 { 技術交流群 } 

相關文章