機器學習
回目錄
一種實現(xiàn)人工智能的方法
智能是現(xiàn)代生活中一個很常見的詞,例如智能手機、智能家居產(chǎn)品、智能機器人等,但是不同的場合智能的含義也不一樣。我們所說的“人工智能”(Artificial Intelligence, AI)則是指讓機器像人一樣思考,具備人類的智能。
從誕生至今,人工智能這個領域經(jīng)歷了一次又一次的繁榮與低谷,其發(fā)展上大體上可以分為“推理期”,“知識期”和“學習期”。推理期主要注重邏輯推理但是感知器過于簡單;知識期雖然建立了各種各樣的專家系統(tǒng),但是自主學習能力和神經(jīng)網(wǎng)絡資源能力都不足。學習期機器能夠自己學習知識,而直到1980年后,機器學習因其在很多領域的出色表現(xiàn),才逐漸成為熱門學科。近代,隨著互聯(lián)網(wǎng)、云計算、大數(shù)據(jù)的發(fā)展,以及GPU、芯片和軟件技術的提升,深度學習開始興起,拓展了人工智能的領域范圍,也推動著社會從數(shù)字化向智能化的變革。
GitHub
人工智能的主要包含幾個部分:首先是感知,包括視覺、語音、語言;然后是決策,例如做出預測和判斷;最后是反饋,如果想做一套完整的系統(tǒng),就像機器人或是自動駕駛,則需要一個反饋。 人工智能眾多的能力中,很重要的一個能力是其學習能力-機器學習,它是人工智能的核心,是使計算機具有智能的關鍵。不能自我學習,人工智能也只是徒有其表。
GitHub
認識人工智能,還需要理清幾個概念之間的關系:人工智能是一個大的概念,是讓機器像人一樣思考甚至超越人類;而機器學習是實現(xiàn)人工智能的一種方法,是使用算法來解析數(shù)據(jù)、從中學習,然后對真實世界中的事件做出決策和預測;深度學習是機器學習的一種實現(xiàn)方式,通過模擬人神經(jīng)網(wǎng)絡的方式來訓練網(wǎng)絡;而統(tǒng)計學是機器學習和神經(jīng)網(wǎng)絡的一種基礎知識。
GitHub
機器學習最大的特點是利用數(shù)據(jù)而不是指令來進行各種工作,其學習過程主要包括:數(shù)據(jù)的特征提取、數(shù)據(jù)預處理、訓練模型、測試模型、模型評估改進等幾部分。接下來我們重點介紹機器學習過程中的常見算法。
GitHub
2. 機器學習算法:是使計算機具有智能的關鍵
回目錄
是使計算機具有智能的關鍵 算法是通過使用已知的輸入和輸出以某種方式“訓練”以對特定輸入進行響應。代表著用系統(tǒng)的方法描述解決問題的策略機制。人工智能的發(fā)展離不開機器學習算法的不斷進步。 機器學習算法可以分為傳統(tǒng)的機器學習算法和深度學習。傳統(tǒng)機器學習算法主要包括以下五類:
回歸:建立一個回歸方程來預測目標值,用于連續(xù)型分布預測
分類:給定大量帶標簽的數(shù)據(jù),計算出未知標簽樣本的標簽取值
聚類:將不帶標簽的數(shù)據(jù)根據(jù)距離聚集成不同的簇,每一簇數(shù)據(jù)有共同的特征
關聯(lián)分析:計算出數(shù)據(jù)之間的頻繁項集合
降維:原高維空間中的數(shù)據(jù)點映射到低維度的空間中
GitHub
下面我們將選取幾種常見的算法,一一介紹。
線性回歸:找到一條直線來預測目標值
一個簡單的場景:已知房屋價格與尺寸的歷史數(shù)據(jù),問面積為2000時,售價為多少?
GitHub
此類問題可以用回歸算法來解決。回歸是指確定兩種或兩種以上變量間相互依賴的定量關系的一種統(tǒng)計分析方法,通過建立一個回歸方程(函數(shù))來估計特征值對應的目標變量的可能取值。 最常見的是線性回歸(Y= a X + b),即找到一條直線來預測目標值。回歸的求解就是求解回歸方程的回歸系數(shù)(a,b)的過程,并且使誤差最小。 房價場景中,根據(jù)房屋面積和售價的關系,求出回歸方程,則可以預測給定房屋面積時的售價。
GitHub
線性回歸的應用非常廣泛,例如:
預測客戶終生價值: 基于老客戶歷史數(shù)據(jù)與客戶生命周期的關聯(lián)關系,建立線性回歸模型,預測新客戶的終生價值,進而開展針對性的活動。
機場客流量分布預測: 以海量機場WiFi數(shù)據(jù)及安檢登機值機數(shù)據(jù),通過數(shù)據(jù)算法實現(xiàn)機場航站樓客流分析與預測。
貨幣基金資金流入流出預測: 通過用戶基本信息數(shù)據(jù)、用戶申購贖回數(shù)據(jù)、收益率表和銀行間拆借利率等信息,對用戶的申購贖回數(shù)據(jù)的把握,精準預測未來每日的資金流入流出情況。
電影票房預測: 依據(jù)歷史票房數(shù)據(jù)、影評數(shù)據(jù)、輿情數(shù)據(jù)等互聯(lián)網(wǎng)公眾數(shù)據(jù),對電影票房進行預測。
邏輯回歸:找到一條直線來分類數(shù)據(jù)
邏輯回歸雖然名字叫回歸,卻是屬于分類算法,是通過Sigmoid函數(shù)將線性函數(shù)的結果映射到Sigmoid函數(shù)中,預估事件出現(xiàn)的概率并分類。
Sigmoid是歸一化的函數(shù),可以把連續(xù)數(shù)值轉化為0到1的范圍,提供了一種將連續(xù)型的數(shù)據(jù)離散化為離散型數(shù)據(jù)的方法。
因此,邏輯回歸從直觀上來說是畫出了一條分類線。位于分類線一側的數(shù)據(jù),概率>0.5,屬于分類A;位于分類線另一側的數(shù)據(jù),概率<0.5,屬于分類B。
例如圖中通過計算患腫瘤的概率,將結果分類兩類,分別位于邏輯分類線的兩側。
GitHub
3. K-近鄰:用距離度量最相鄰的分類標簽
一個簡單的場景:已知一個電影中的打斗和接吻鏡頭數(shù),判斷它是屬于愛情片還是動作片。當接吻鏡頭數(shù)較多時,根據(jù)經(jīng)驗我們判斷它為愛情片。那么計算機如何進行判別呢?
GitHub
可以使用K近鄰算法,其工作原理如下:
計算樣本數(shù)據(jù)中的點與當前點之間的距離
算法提取樣本最相似數(shù)據(jù)(最近鄰)的分類標簽
確定前k個點所在類別的出現(xiàn)頻率. 一般只選擇樣本數(shù)據(jù)集中前k個最相似的數(shù)據(jù),這就是k-近鄰算法中k的出處,通常k是不大于20的整數(shù)
返回前k個點所出現(xiàn)頻率最高的類別作為當前點的預測分類
電影分類場景中,k取值為3,按距離依次排序的三個點分別是動作片(108,5)、動作片(115,8)、愛情片(5,89)。在這三個點中,動作片出現(xiàn)的頻率為三分之二,愛情片出現(xiàn)的頻率為三分之一,所以該紅色圓點標記的電影為動作片。
K近鄰算法的一個常見應用是手寫數(shù)字識別。手寫字體對于人腦來說,看到的數(shù)字是一幅圖像,而在電腦看來這是一個二維或三維數(shù)組,那怎么對數(shù)字進行識別?
使用K近鄰算法的進行識別的具體步驟為:
首先將每個圖片處理為具有相同的色彩和大小:寬高是32像素x32像素。
將3232的二進制圖像矩陣轉換成11024的測試向量。
將訓練樣本儲存在訓練矩陣中,創(chuàng)建一個m行1024列的訓練矩陣,矩陣的每行數(shù)據(jù)存儲一個圖像。
計算目標樣本與訓練樣本的距離,選擇前k個點所出現(xiàn)頻率最高的數(shù)字作為當前手寫字體的預測分類。
樸素貝葉斯:選擇后驗概率最大的類為分類標簽
一個簡單的場景:一號碗(C1)有30顆水果糖和10顆巧克力糖,二號碗(C2)有水果糖和巧克力糖各20顆。現(xiàn)在隨機選擇一個碗,從中摸出一顆糖,發(fā)現(xiàn)是水果糖。
問這顆水果糖(X)最有可能來自哪個碗?這類問題可以借助貝葉斯公式來計算,不需要針對目標變量建立模型。在分類時,通過計算樣本屬于各個類別的概率,然后取概率值大的類別作為分類類別。
P(X|C): 條件概率,C中X出現(xiàn)的概率
P©: 先驗概率,C出現(xiàn)的概率
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。如果有,則可以列入候選名單。
這就是一個簡單的決策樹模型。決策樹是一種樹型結構,其中每個內部結點表示在一個屬性上的測試,每個分支代表一個測試輸出,每個葉結點代表一種類別。采用的是自頂向下的遞歸方法,選擇信息增益最大的特征作為當前的分裂特征。
決策樹可以應于:用戶分級評估、貸款風險評估、選股、投標決策等。
6. 支持向量機(SVM):構造超平面,分類非線性數(shù)據(jù)
一個簡單的場景:
要求用一根線將不同顏色的球分開,要求盡量在放更多球之后,仍然適用。 A、B兩條線都可以滿足條件。再繼續(xù)增加球,線A仍可以將球很好的分開,而線B則不可以。
GitHub
進一步增加難度,當球沒有明確的分界線,用一條直線已經(jīng)無法將球分開,該怎么解決?
GitHub
這個場景中涉及支持向量機的的兩個問題:
當一個分類問題,數(shù)據(jù)是線性可分時,只要將線的位置放在讓小球距離線的距離最大化的位置即可,尋找這個最大間隔的過程,就叫做最優(yōu)化。
一般的數(shù)據(jù)是線性不可分的,可以通過核函數(shù),將數(shù)據(jù)從二維映射到高位,通過超平面將數(shù)據(jù)切分。
不同方向的最優(yōu)決策面的分類間隔通常是不同的,那個具有“最大間隔”的決策面就是SVM要尋找的最優(yōu)解。這個真正的最優(yōu)解對應的兩側虛線所穿過的樣本點,就是SVM中的支持樣本點,稱為支持向量。
SVM的應用非常廣泛,可以應用于垃圾郵件識別、手寫識別、文本分類、選股等。
7. K-means:計算質心,聚類無標簽數(shù)據(jù)
在上面介紹的分類算法中,需要被分類的數(shù)據(jù)集已經(jīng)有標記,例如數(shù)據(jù)集已經(jīng)標記為○或者×,通過學習出假設函數(shù)對這兩類數(shù)據(jù)進行劃分。而對于沒有標記的數(shù)據(jù)集,希望能有一種算法能夠自動的將相同元素分為緊密關系的子集或簇,這就是聚類算法。
GitHub
舉個具體的例子,例如有一批人的年齡的數(shù)據(jù),大致知道其中有一堆少年兒童,一堆青年人,一堆老年人。
聚類就是自動發(fā)現(xiàn)這三堆數(shù)據(jù),并把相似的數(shù)據(jù)聚合到同一堆中。如果要聚成3堆的話,那么輸入就是一堆年齡數(shù)據(jù),注意,此時的年齡數(shù)據(jù)并不帶有類標號,也就是說只知道里面大致有三堆人,至于誰是哪一堆,現(xiàn)在是不知道的,而輸出就是每個數(shù)據(jù)所屬的類標號,聚類完成之后,就知道誰和誰是一堆了。
而分類就是,事先告訴你,少年兒童、青年人及老年人的年齡是什么樣的,現(xiàn)在新來了一個年齡,輸入它的年齡,輸出她屬于的分類。一般分類器是需要訓練的,它才能識別新的數(shù)據(jù)。
K-Means算法是一種常見的聚類算法,其基本步驟為:
隨機生成k個初始點作為質心;
將數(shù)據(jù)集中的數(shù)據(jù)按照距離質心的遠近分到各個簇中;
將各個簇中的數(shù)據(jù)求平均值,作為新的質心,重復上一步,直到所有的簇不再改變。 兩個分類間隔越遠,則聚類效果越好。
K-means算法的一個案例是:客戶價值細分,精準投資。
以航空公司為例,因為業(yè)務競爭激烈,企業(yè)營銷焦點從產(chǎn)品中心轉為客戶中心;建立合理的客戶價值評估模型,進行客戶分類,進行精準營銷,是解決問題的關鍵。
識別客戶價值,通過五個指標:最近消費時間間隔R,消費頻率F,飛行里程 M和折扣系數(shù)的平均值C,客戶關系長度L(LRFMC模型)。采用K-Means算法對客戶數(shù)據(jù)進行客戶分群,聚成五類(需結合業(yè)務的理解與分析來確定客戶的類別數(shù)量)繪制客戶群特征雷達圖。
客戶價值分析:
重要保持客戶:C、F、M較高,R低。應將資源優(yōu)先投放到這類客戶身上,進行差異化管理,提高客戶的忠誠度和滿意度。
重要發(fā)展客戶:C較高,R、F、M較低。這類客戶入會時長(L)短、當前價值低、發(fā)展?jié)摿Υ螅瑧偈箍蛻粼黾釉诒竟竞秃献骰锇樘幍南M。
重要挽留客戶:C、F 或 M 較高,R較高 或 L變小,客戶價值變化的不確定性高。應掌握客戶最新信息、維持與客戶的互動。
一般和低價值客戶:C、F、M、L低、R較高。這類客戶可能在打折促銷時才會選擇消費。
K-means算法的一個比較有趣的案例是進行圖像壓縮。在彩色圖像中,每個像素的大小為3字節(jié)(RGB),可以表示的顏色總數(shù)為256 256 256。利用K-means算法把類似的顏色分別放在K個簇中,因此只需要保留每個像素的標簽,以及每個簇的顏色編碼即可完成圖像的壓縮。
8. 關聯(lián)分析:挖掘啤酒與尿布(頻繁項集)的關聯(lián)規(guī)則
20世紀90年代美國沃爾瑪超市中,超市管理人員分析銷售數(shù)據(jù)時發(fā)現(xiàn) “啤酒”與“尿布”兩件看上去毫無關系的商品會經(jīng)常出現(xiàn)在同一個購物籃中。經(jīng)過調查發(fā)現(xiàn),這種現(xiàn)象出現(xiàn)在年輕的父親身上。在美國有嬰兒的家庭中,一般是母親在家中照看嬰兒,年輕的父親去超市買尿布時,往往會順便為自己購買啤酒。如果在賣場只能買到兩件商品之一,他很有可能會放棄購物而去另一家可以同時買到啤酒與尿布的商店。由此,沃爾瑪發(fā)現(xiàn)了這一獨特的現(xiàn)象,開始在賣場嘗試將啤酒與尿布擺放在相同區(qū)域,讓年輕的父親可以同時找到這兩件商品,從而獲得了很好的商品銷售收入。
“啤酒+尿布”故事中利用的就是關聯(lián)算法,比較常見的一種關聯(lián)算法是FP-growth算法。
算法中幾個相關的概念:
頻繁項集:在數(shù)據(jù)庫中大量頻繁出現(xiàn)的數(shù)據(jù)集合。例如購物單數(shù)據(jù)中{‘啤酒’}、{‘尿布’}、{‘啤酒’, ‘尿布’}出現(xiàn)的次數(shù)都比較多。
關聯(lián)規(guī)則:由集合 A,可以在某置信度下推出集合 B。即如果 A 發(fā)生了,那么 B
也很有可能會發(fā)生。例如購買了{‘尿布’}的人很可能會購買{‘啤酒’}。 支持度:指某頻繁項集在整個數(shù)據(jù)集中的比例。假設數(shù)據(jù)集有 10條記錄,包含{‘啤酒’, ‘尿布’}的有 5 條記錄,那么{‘啤酒’, ‘尿布’}的支持度就是 5/10 = 0.5。
置信度:有關聯(lián)規(guī)則如{‘尿布’} -> {‘啤酒’},它的置信度為 {‘尿布’} -> {‘啤酒’}
假設{‘尿布’, ‘啤酒’}的支持度為 0.45,{‘尿布’}的支持度為 0.5,則{‘尿布’} -> {‘啤酒’}的置信度為 0.45 / 0.5 = 0.9。
應用比較廣泛,例如: 用于制定營銷策略。如同啤酒與尿布的例子,超市如果將啤酒和尿布放在相鄰的位置,會增加兩者的銷量。 用于發(fā)現(xiàn)共現(xiàn)詞。在瀏覽器中輸入"普元"時,瀏覽器自動彈出如"普元平臺","普元EOS"等備選記錄。 FP-growth算法一個簡單的案例:通過購物車數(shù)據(jù),分析商品之間的關聯(lián)關系。
GitHub
分析步驟為:
從購物車數(shù)據(jù)中挖掘出頻繁項集
從頻繁項集中產(chǎn)生關聯(lián)規(guī)則,計算支持度
輸出置信度
GitHub
根據(jù)結果,可以分析出購買了鞋子,極有可能會同時購買襪子;購買了雞蛋與面包,極有可能會購買牛奶。
9. PCA降維:減少數(shù)據(jù)維度,降低數(shù)據(jù)復雜度
降維是指將原高維空間中的數(shù)據(jù)點映射到低維度的空間中。因為高維特征的數(shù)目巨大,距離計算困難,分類器的性能會隨著特征數(shù)的增加而下降;減少高維的冗余信息所造成的誤差,可以提高識別的精度。
GitHub
比較常用的是主成分分析算法(PCA)。它是通過某種線性投影,將高維的數(shù)據(jù)映射到低維的空間中表示,并期望在所投影的維度上數(shù)據(jù)的方差最大,以此使用較少的數(shù)據(jù)維度,同時保留住較多的原數(shù)據(jù)點的特性。
GitHub
例如對數(shù)字進行降維,當使用1個特征向量的時候,3的基本輪廓已經(jīng)保留下來了,特征向量使用的越多就越與原始數(shù)據(jù)接近。
10. 人工神經(jīng)網(wǎng)絡:逐層抽象,逼近任意函數(shù)
前面介紹了九種傳統(tǒng)的機器學習算法,現(xiàn)在介紹一下深度學習的基礎:人工神經(jīng)網(wǎng)絡。 它是模擬人腦神經(jīng)網(wǎng)絡而設計的模型,由多個節(jié)點(人工神經(jīng)元)相互聯(lián)結而成,可以用來對數(shù)據(jù)之間的復雜關系進行建模。不同節(jié)點之間的連接被賦予了不同的權重,每個權重代表了一個節(jié)點對另一個節(jié)點的影響大小。每個節(jié)點代表一種特定函數(shù),來自其他節(jié)點的信息經(jīng)過其相應的權重綜合計算。是一個可學習的函數(shù),接受不同數(shù)據(jù)的訓練,不斷通過調整權重而得到契合實際模型,一個三層的神經(jīng)網(wǎng)絡可以逼近任意的函數(shù)。
GitHub
例如利用單層神經(jīng)網(wǎng)絡實現(xiàn)邏輯與門和同或門。
GitHub
多層神經(jīng)網(wǎng)絡的每一層神經(jīng)元學習到的是前一層神經(jīng)元值的更抽象的表示,通過抽取更抽象的特征來對事物進行區(qū)分,從而獲得更好的區(qū)分與分類能力。例如在圖像識別中,第一個隱藏層學習到的是 “邊緣”的特征,第二層學習由“邊緣”組成的“形狀”的特征,第三層學習到的是由“形狀”組成的“圖案”的特征,最后的隱藏層學習到的是由“圖案”組成的“目標”的特征。
GitHub
深度學習:賦予人工智能以璀璨的未來
深度學習是機器學習的分支,是對人工神經(jīng)網(wǎng)絡的發(fā)展。深度學習是當今人工智能爆炸的核心驅動,賦予人工智能以璀璨的未來。
看一下深度學習與傳統(tǒng)機器學習的區(qū)別。傳統(tǒng)機器學習特征處理和預測分開,特征處理一般需要人工干預完成。這類模型稱為淺層模型,或淺層學習,不涉及特征學習,其特征主要靠人工經(jīng)驗或特征轉換方法來抽取。
GitHub
要提高一種表示方法的表示能力,其關鍵是構建具有一定深度的多層次特征表示 。一個深層結構的優(yōu)點是可以增加特征的重用性,從而指數(shù)級地增加表示能力。從底層特征開始,一般需要多步非線性轉換才能得到較為抽象的高層語義特征。這種自動學習出有效特征的方式稱為“表示學習”。