目錄:python
1、機器學習:一種實現人工智能的方法程序員
2、機器學習算法:是使計算機具備智能的關鍵算法
3、Anaconda:初學Python、入門機器學習的首選數據庫
4、總結數組
背景:瀏覽器
自「阿爾法狗」(AlphaGo)完勝人類圍棋頂尖高手後,有關人工智能(AI)的討論就從未停歇。工業4.0方興未艾,人工智能引領的工業5.0時代卻已悄然甦醒。人工智能的火爆離不開互聯網、雲計算、大數據、芯片和軟件等技術的發展,而深度學習的進步倒是當今人工智能大爆炸的核心驅動。微信
做爲一個跨學科產物,人工智能的內容浩如煙海,各類複雜的模型和算法更讓人望而生畏。那麼做爲一個普通程序員,在已有語言技能的前提下,該如何擁抱變化,向人工智能靠攏?如何在本身的工做中應用人工智能?學習人工智能應該從哪裏開始?網絡
人工智能並不是高不可攀,人人均可以作人工智能!人工智能是讓機器像人同樣思考,而機器學習則是人工智能的核心,是使計算機具備智能的根本途徑。學習人工智能,首先要了解機器學習的相關算法。數據結構
本文咱們將與你們一塊兒探討機器學習的相關算法,共同揭開人工智能的神祕面紗。架構
智能是現代生活中一個很常見的詞,例如智能手機、智能家居產品、智能機器人等,可是不一樣的場合智能的含義也不同。咱們所說的「人工智能」(Artificial Intelligence, AI)則是指讓機器像人同樣思考,具有人類的智能。
從誕生至今,人工智能這個領域經歷了一次又一次的繁榮與低谷,其發展上大致上能夠分爲「推理期」,「知識期」和「學習期」。推理期主要注重邏輯推理可是感知器過於簡單;知識期雖然創建了各類各樣的專家系統,可是自主學習能力和神經網絡資源能力都不足。學習期機器可以本身學習知識,而直到1980年後,機器學習因其在不少領域的出色表現,才逐漸成爲熱門學科。近代,隨着互聯網、雲計算、大數據的發展,以及GPU、芯片和軟件技術的提高,深度學習開始興起,拓展了人工智能的領域範圍,也推進着社會從數字化向智能化的變革。
人工智能的主要包含幾個部分:首先是感知,包括視覺、語音、語言;而後是決策,例如作出預測和判斷;最後是反饋,若是想作一套完整的系統,就像機器人或是自動駕駛,則須要一個反饋。
人工智能衆多的能力中,很重要的一個能力是其學習能力-機器學習,它是人工智能的核心,是使計算機具備智能的關鍵。不能自我學習,人工智能也只是徒有其表。
認識人工智能,還須要理清幾個概念之間的關係:人工智能是一個大的概念,是讓機器像人同樣思考甚至超越人類;而機器學習是實現人工智能的一種方法,是使用算法來解析數據、從中學習,而後對真實世界中的事件作出決策和預測;深度學習是機器學習的一種實現方式,經過模擬人神經網絡的方式來訓練網絡;而統計學是機器學習和神經網絡的一種基礎知識。
機器學習最大的特色是利用數據而不是指令來進行各類工做,其學習過程主要包括:數據的特徵提取、數據預處理、訓練模型、測試模型、模型評估改進等幾部分。接下來咱們重點介紹機器學習過程當中的常見算法。
算法是經過使用已知的輸入和輸出以某種方式「訓練」以對特定輸入進行響應。表明着用系統的方法描述解決問題的策略機制。人工智能的發展離不開機器學習算法的不斷進步。
機器學習算法能夠分爲傳統的機器學習算法和深度學習。傳統機器學習算法主要包括如下五類:
迴歸:創建一個迴歸方程來預測目標值,用於連續型分佈預測
分類:給定大量帶標籤的數據,計算出未知標籤樣本的標籤取值
聚類:將不帶標籤的數據根據距離彙集成不一樣的簇,每一簇數據有共同的特徵
關聯分析:計算出數據之間的頻繁項集合
降維:原高維空間中的數據點映射到低維度的空間中
下面咱們將選取幾種常見的算法,一一介紹。
一個簡單的場景:已知房屋價格與尺寸的歷史數據,問面積爲2000時,售價爲多少?
此類問題能夠用迴歸算法來解決。迴歸是指肯定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法,經過創建一個迴歸方程(函數)來估計特徵值對應的目標變量的可能取值。最多見的是線性迴歸(Y= a X + b),即找到一條直線來預測目標值。迴歸的求解就是求解迴歸方程的迴歸係數(a,b)的過程,而且使偏差最小。房價場景中,根據房屋面積和售價的關係,求出迴歸方程,則能夠預測給定房屋面積時的售價。
線性迴歸的應用很是普遍,例如:
預測客戶終生價值:基於老客戶歷史數據與客戶生命週期的關聯關係,創建線性迴歸模型,預測新客戶的終生價值,進而開展針對性的活動。
機場客流量分佈預測:以海量機場WiFi數據及安檢登機值機數據,經過數據算法實現機場航站樓客流分析與預測。
貨幣基金資金流入流出預測:經過用戶基本信息數據、用戶申購贖回數據、收益率表和銀行間拆借利率等信息,對用戶的申購贖回數據的把握,精準預測將來每日的資金流入流出狀況。
電影票房預測:依據歷史票房數據、影評數據、輿情數據等互聯網公衆數據,對電影票房進行預測。
邏輯迴歸雖然名字叫回歸,倒是屬於分類算法,是經過Sigmoid函數將線性函數的結果映射到Sigmoid函數中,預估事件出現的機率並分類。Sigmoid是歸一化的函數,能夠把連續數值轉化爲0到1的範圍,提供了一種將連續型的數據離散化爲離散型數據的方法。
所以,邏輯迴歸從直觀上來講是畫出了一條分類線。位於分類線一側的數據,機率>0.5,屬於分類A;位於分類線另外一側的數據,機率<0.5,屬於分類B。例如圖中經過計算患腫瘤的機率,將結果分類兩類,分別位於邏輯分類線的兩側。
邏輯迴歸的應用也很是普遍,例如:
醫學界:探索某個疾病的危險因素,根據危險因素預測疾病是否發生,與發生的機率。
金融界:預測貸款是否會違約,或放貸以前去估計貸款者將來是否會違約或違約的機率。
消費行業:預測某個消費者是否會購買某個商品,是否會購買會員卡,從而針對性得對購買機率大的用戶發放廣告,或代金券等等。
一個簡單的場景:已知一個電影中的打鬥和接吻鏡頭數,判斷它是屬於愛情片仍是動做片。當接吻鏡頭數較多時,根據經驗咱們判斷它爲愛情片。那麼計算機如何進行判別呢?
可使用K近鄰算法,其工做原理以下:
(1)計算樣本數據中的點與當前點之間的距離
(2)算法提取樣本最類似數據(最近鄰)的分類標籤
(3)肯定前k個點所在類別的出現頻率. 通常只選擇樣本數據集中前k個最類似的數據,這就是k-近鄰算法中k的出處,一般k是不大於20的整數
(4)返回前k個點所出現頻率最高的類別做爲當前點的預測分類
電影分類場景中,k取值爲3,按距離依次排序的三個點分別是動做片(108,5)、動做片(115,8)、愛情片(5,89)。在這三個點中,動做片出現的頻率爲三分之二,愛情片出現的頻率爲三分之一,因此該紅色圓點標記的電影爲動做片。
K近鄰算法的一個常見應用是手寫數字識別。手寫字體對於人腦來講,看到的數字是一幅圖像,而在電腦看來這是一個二維或三維數組,那怎麼對數字進行識別?
使用K近鄰算法的進行識別的具體步驟爲:
(1)首先將每一個圖片處理爲具備相同的色彩和大小:寬高是32像素x32像素。
(2)將32*32的二進制圖像矩陣轉換成1*1024的測試向量。
(3)將訓練樣本儲存在訓練矩陣中,建立一個m行1024列的訓練矩陣,矩陣的每行數據存儲一個圖像。
(4)計算目標樣本與訓練樣本的距離,選擇前k個點所出現頻率最高的數字做爲當前手寫字體的預測分類。
一個簡單的場景:一號碗(C1)有30顆水果糖和10顆巧克力糖,二號碗(C2)有水果糖和巧克力糖各20顆。如今隨機選擇一個碗,從中摸出一顆糖,發現是水果糖。問這顆水果糖(X)最有可能來自哪一個碗?
這類問題能夠藉助貝葉斯公式來計算,不須要針對目標變量創建模型。在分類時,經過計算樣本屬於各個類別的機率,而後取機率值大的類別做爲分類類別。
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) ,所以這顆糖最有可能來自一號碗。
樸素貝葉斯的主要應用有文本分類、垃圾文本過濾,情感判別,多分類實時預測等。
一個簡單的場景:相親時,可能首先檢測相親對方是否有房。若是有,則考慮進一步接觸。若是沒有房,則觀察其是否有上進心,若是沒有,直接Say Goodbye。若是有,則能夠列入候選名單。
這就是一個簡單的決策樹模型。決策樹是一種樹型結構,其中每一個內部結點表示在一個屬性上的測試,每一個分支表明一個測試輸出,每一個葉結點表明一種類別。採用的是自頂向下的遞歸方法,選擇信息增益最大的特徵做爲當前的分裂特徵。
決策樹能夠應於:用戶分級評估、貸款風險評估、選股、投標決策等。
一個簡單的場景:要求用一根線將不一樣顏色的球分開,要求儘可能在放更多球以後,仍然適用。
A、B兩條線均可以知足條件。再繼續增長球,線A仍能夠將球很好的分開,而線B則不能夠。
進一步增長難度,當球沒有明確的分界線,用一條直線已經沒法將球分開,該怎麼解決?
這個場景中涉及支持向量機的的兩個問題:
(1)當一個分類問題,數據是線性可分時,只要將線的位置放在讓小球距離線的距離最大化的位置便可,尋找這個最大間隔的過程,就叫作最優化。
(2)通常的數據是線性不可分的,能夠經過核函數,將數據從二維映射到高位,經過超平面將數據切分。
不一樣方向的最優決策面的分類間隔一般是不一樣的,那個具備「最大間隔」的決策面就是SVM要尋找的最優解。這個真正的最優解對應的兩側虛線所穿過的樣本點,就是SVM中的支持樣本點,稱爲支持向量。
SVM的應用很是普遍,能夠應用於垃圾郵件識別、手寫識別、文本分類、選股等。
在上面介紹的分類算法中,須要被分類的數據集已經有標記,例如數據集已經標記爲○或者×,經過學習出假設函數對這兩類數據進行劃分。而對於沒有標記的數據集,但願能有一種算法可以自動的將相同元素分爲緊密關係的子集或簇,這就是聚類算法。
舉個具體的例子,例若有一批人的年齡的數據,大體知道其中有一堆少年兒童,一堆青年人,一堆老年人。
聚類就是自動發現這三堆數據,並把類似的數據聚合到同一堆中。若是要聚成3堆的話,那麼輸入就是一堆年齡數據,注意,此時的年齡數據並不帶有類標號,也就是說只知道里面大體有三堆人,至於誰是哪一堆,如今是不知道的,而輸出就是每一個數據所屬的類標號,聚類完成以後,就知道誰和誰是一堆了。
而分類就是,事先告訴你,少年兒童、青年人及老年人的年齡是什麼樣的,如今新來了一個年齡,輸入它的年齡,輸出她屬於的分類。通常分類器是須要訓練的,它才能識別新的數據。
K-Means算法是一種常見的聚類算法,其基本步驟爲:
(1)隨機生成k個初始點做爲質心;
(2)將數據集中的數據按照距離質心的遠近分到各個簇中;
(3)將各個簇中的數據求平均值,做爲新的質心,重複上一步,直到全部的簇再也不改變。
兩個分類間隔越遠,則聚類效果越好。
K-means算法的一個案例是:客戶價值細分,精準投資。以航空公司爲例,由於業務競爭激烈,企業營銷焦點從產品中心轉爲客戶中心;創建合理的客戶價值評估模型,進行客戶分類,進行精準營銷,是解決問題的關鍵。
識別客戶價值,經過五個指標:最近消費時間間隔R,消費頻率F,飛行里程 M和折扣係數的平均值C,客戶關係長度L(LRFMC模型)。採用K-Means算法對客戶數據進行客戶分羣,聚成五類(需結合業務的理解與分析來肯定客戶的類別數量)繪製客戶羣特徵雷達圖。
客戶價值分析:
重要保持客戶: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個簇中,所以只須要保留每一個像素的標籤,以及每一個簇的顏色編碼便可完成圖像的壓縮。
20世紀90年代美國沃爾瑪超市中,超市管理人員分析銷售數據時發現 「啤酒」與「尿布」兩件看上去毫無關係的商品會常常出如今同一個購物籃中。通過調查發現,這種現象出如今年輕的父親身上。在美國有嬰兒的家庭中,通常是母親在家中照看嬰兒,年輕的父親去超市買尿布時,每每會順便爲本身購買啤酒。若是在賣場只能買到兩件商品之一,他頗有可能會放棄購物而去另外一家能夠同時買到啤酒與尿布的商店。由此,沃爾瑪發現了這一獨特的現象,開始在賣場嘗試將啤酒與尿布擺放在相同區域,讓年輕的父親能夠同時找到這兩件商品,從而得到了很好的商品銷售收入。
「啤酒+尿布」故事中利用的就是關聯算法,比較常見的一種關聯算法是FP-growth算法。
算法中幾個相關的概念:
頻繁項集:在數據庫中大量頻繁出現的數據集合。例如購物單數據中{'啤酒'}、{'尿布'}、{'啤酒', '尿布'}出現的次數都比較多。
關聯規則:由集合 A,能夠在某置信度下推出集合 B。即若是 A 發生了,那麼 B 也頗有可能會發生。例如購買了{'尿布'}的人極可能會購買{'啤酒'}。
支持度:指某頻繁項集在整個數據集中的比例。假設數據集有 10 條記錄,包含{'啤酒', '尿布'}的有 5 條記錄,那麼{'啤酒', '尿布'}的支持度就是 5/10 = 0.5。
置信度:有關聯規則如{'尿布'} -> {'啤酒'},它的置信度爲 {'尿布'} -> {'啤酒'}
假設{'尿布', '啤酒'}的支持度爲 0.45,{'尿布'}的支持度爲 0.5,則{'尿布'} -> {'啤酒'}的置信度爲 0.45 / 0.5 = 0.9。
應用比較普遍,例如:
用於制定營銷策略。如同啤酒與尿布的例子,超市若是將啤酒和尿布放在相鄰的位置,會增長二者的銷量。
用於發現共現詞。在瀏覽器中輸入"普元"時,瀏覽器自動彈出如"普元平臺","普元EOS"等備選記錄。
FP-growth算法一個簡單的案例:經過購物車數據,分析商品之間的關聯關係。
分析步驟爲:
(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 |
根據結果,能夠分析出購買了鞋子,極有可能會同時購買襪子;購買了雞蛋與麪包,極有可能會購買牛奶。
降維是指將原高維空間中的數據點映射到低維度的空間中。由於高維特徵的數目巨大,距離計算困難,分類器的性能會隨着特徵數的增長而降低;減小高維的冗餘信息所形成的偏差,能夠提升識別的精度。
比較經常使用的是主成分分析算法(PCA)。它是經過某種線性投影,將高維的數據映射到低維的空間中表示,並指望在所投影的維度上數據的方差最大,以此使用較少的數據維度,同時保留住較多的原數據點的特性。
例如對數字進行降維,當使用1個特徵向量的時候,3的基本輪廓已經保留下來了,特徵向量使用的越多就越與原始數據接近。
前面介紹了九種傳統的機器學習算法,如今介紹一下深度學習的基礎:人工神經網絡。
它是模擬人腦神經網絡而設計的模型,由多個節點(人工神經元)相互聯結而成,能夠用來對數據之間的複雜關係進行建模。不一樣節點之間的鏈接被賦予了不一樣的權重,每一個權重表明了一個節點對另外一個節點的影響大小。每一個節點表明一種特定函數,來自其餘節點的信息通過其相應的權重綜合計算。是一個可學習的函數,接受不一樣數據的訓練,不斷經過調整權重而獲得契合實際模型,一個三層的神經網絡能夠逼近任意的函數。
例如利用單層神經網絡實現邏輯與門和同或門。
多層神經網絡的每一層神經元學習到的是前一層神經元值的更抽象的表示,經過抽取更抽象的特徵來對事物進行區分,從而得到更好的區分與分類能力。例如在圖像識別中,第一個隱藏層學習到的是 「邊緣」的特徵,第二層學習由「邊緣」組成的「形狀」的特徵,第三層學習到的是由「形狀」組成的「圖案」的特徵,最後的隱藏層學習到的是由「圖案」組成的「目標」的特徵。
深度學習是機器學習的分支,是對人工神經網絡的發展。深度學習是當今人工智能爆炸的核心驅動,賦予人工智能以璀璨的將來。
看一下深度學習與傳統機器學習的區別。傳統機器學習特徵處理和預測分開,特徵處理通常須要人工干預完成。這類模型稱爲淺層模型,或淺層學習,不涉及特徵學習,其特徵主要靠人工經驗或特徵轉換方法來抽取。
要提升一種表示方法的表示能力,其關鍵是構建具備必定深度的多層次特徵表示 。一個深層結構的優勢是能夠增長特徵的重用性,從而指數級地增長表示能力。從底層特徵開始,通常須要多步非線性轉換才能獲得較爲抽象的高層語義特徵。這種自動學習出有效特徵的方式稱爲「表示學習」。
深度學習就是一種基於對數據進行表徵學習的方法,使用多層網絡,可以學習抽象概念,同時融入自我學習,逐步從大量的樣本中逐層抽象出相關的概念,而後作出理解,最終作出判斷和決策。經過構建具備必定「深度」的模型,可讓模型來自動學習好的特徵表示(從底層特徵,到中層特徵,再到高層特徵),從而最終提高預測或識別的準確性。
目前深度學習的應用十分普遍,例如圖像識別、語音識別、機器翻譯、自動駕駛、金融風控、智能機器人等。
已經瞭解了機器學習過程當中使用的算法,那麼該如何動手實踐呢?
Anaconda是初學Python、入門機器學習的首選。它是一個用於科學計算的Python發行版,提供了包管理與環境管理的功能,能夠很方便地解決多版本python並存、切換以及各類第三方包安裝問題。
集成包功能:
NumPy:提供了矩陣運算的功能,其通常與Scipy、matplotlib一塊兒使用,Python建立的全部更高層工具的基礎,不提供高級數據分析功能
Scipy:依賴於NumPy,它提供便捷和快速的N維向量數組操做。提供模塊用於優化、線性代數、積分以及其它數據科學中的通用任務。
Pandas:基於NumPy 的一種工具,該工具是爲了解決數據分析任務而建立的,包含高級數據結構,以及和讓數據分析變得快速、簡單的工具
Matplotlib:Python最著名的繪圖庫
其中, Scikit-Learn是Anaconda中集成的開源機器學習工具包,主要涵蓋分類,迴歸和聚類算法,能夠直接調用傳統機器學習的算法進行使用。同時Anaconda也兼容Google開發的第二代人工智能系統TensorFlow,進行深度學習的開發。
最後經過一個基於Python的決策樹案例,來直觀瞭解一下機器學習的過程。
貸款申請的決策樹,用以對將來的貸款申請進行分類。
具體實現過程:
(1)準備數據集:從貸款申請樣本數據表中,選取對訓練數據具備分類能力的特徵
(2)構建樹:選擇信息增益最大的特徵做爲分裂特徵構建決策樹
(3)數據可視化:使用Matplotlib對數據進行可視化
(4)執行分類:用於實際數據的分類。例如輸入測試數據[0,1],它表明沒有房子,可是有工做,分類結果爲「房貸」。
但願經過本次介紹,你們可以對機器學習涉及的算法有初步的認識,爲之後進行相關人工智能方面的研究全部幫助。機器學習其實沒有那麼複雜,只是將統計學、機率論等數學知識應用在人工智能領域。藉助現有的軟件平臺,能夠輕鬆的調用已經集成的算法,讓工程師再也不爲複雜的算法理論而煩惱,能夠有更多的時間去開發和創新!
關於做者:李廣珍博士,普元博士後,專利指導人。主要負責微服務及DevOps關鍵技術和方法論研究以及相關的技術預研。
關於EAWorld:微服務,DevOps,數據治理,移動架構原創 技術分享