機器學習簡史和常用算法的梳理

原文:https://maoli.blog.csdn.net/article/details/115803729
符號主義學習
連接主義學習
貝葉斯算法
線性回歸與邏輯回歸
決策樹
SVM 支持向量機
KNN(K 近鄰算法)
聚類算法
隨機森林
Adaboost
神經(jīng)網(wǎng)絡
機器學習簡史
機器學習是人工智能研究發(fā)展到一定階段的必然產(chǎn)物,本章僅從筆者的視角對機器學習這五十年來的發(fā)展進行一個略述,疏漏錯誤之處煩請指正。下面這幅漫畫中就展示了一個無奈的問題,三歲幼童可以輕松解決的問題卻需要最頂尖的科學家花費數(shù)十年的光陰,或許機器學習離我們在電影里看到的那樣還有很長一段路要走。
知識來源于哪里?知識來源于進化、經(jīng)驗、文化和計算機。對于知識和計算機的關系,可以引用 Facebook 人工智能實驗室負責人 Yann LeCun 的一段話:將來,世界上的大部分知識將由機器提取出來,并且將長駐與機器中。而幫助計算機獲取新知識,可以通過以下五種方法來實現(xiàn):
填充現(xiàn)存知識的空白
對大腦進行仿真
對進化進行模擬
系統(tǒng)性的減少不確定性
注意新舊知識之間的相似點
對應以上這幾種知識獲取的途徑,我們可以認為常見的人工智能的方向有:
| 派別 | 起源 | 擅長算法 |
|---|---|---|
| 符號主義(Symbolists) | 邏輯學、哲學 | 逆演繹算法(Inverse deduction) |
| 聯(lián)結主義(Connectionists) | 神經(jīng)科學 | 反向傳播算法(Backpropagation) |
| 進化主義(Evolutionaries) | 進化生物學 | 基因編程(Genetic programming) |
| 貝葉斯派(Bayesians) | 統(tǒng)計學 | 概率推理(Probabilistic inference) |
| Analogizer | 心理學 | 核機器(Kernel machines) |
二十世紀五十年代:推理期
二十世紀五十年代到七十年代初,人工智能研究處于”推理期“,彼時人們以為只要能賦予機器邏輯推理的能力,機器就能具有智能。這一階段的代表性作品有 A. Newell 和 H. Simon 的“邏輯理論家”程序,該程序于 1952 年證明了羅素和懷特海的名著《數(shù)學原理》中的 38 條定理,在 1963 年證明了全部的 52 條定理。不過隨著時間的發(fā)展,人們漸漸發(fā)現(xiàn)僅具有邏輯推理能力是遠遠實現(xiàn)不了人工智能的。
二十世紀七十年代中期:知識期
從二十世紀七十年代中期開始,人工智能研究進入了“知識期”,在這一時期,大量的專家系統(tǒng)問世,在很多應用領域取得了大量成果。在本階段誕生的技術的一個鮮明的代表就是模式識別,它強調(diào)的是如何讓一個計算機程序去做一些看起來很“智能”的事情,例如識別“3”這個數(shù)字。而且在融入了很多的智慧和直覺后,人們也的確構建了這樣的一個程序。從這個時代誕生的模式識別領域最著名的書之一是由 Duda & Hart 執(zhí)筆的“模式識別(Pattern Classification)”。對基礎的研究者來說,仍然是一本不錯的入門教材。不過對于里面的一些詞匯就不要太糾結了,因為這本書已經(jīng)有一定的年代了,詞匯會有點過時。自定義規(guī)則、自定義決策,以及自定義“智能”程序在這個任務上,曾經(jīng)都風靡一時。有趣的是筆者在下文中也會介紹如何用深度學習網(wǎng)絡去識別手寫的數(shù)字,有興趣的朋友可以去探究下使用模式識別與深度學習相比,同樣是識別手寫數(shù)字上的差異。
不過,專家系統(tǒng)面臨“知識工程瓶頸”,即由人來把知識總結出來再教給計算機是相當困難的,于是人們開始考慮如果機器能夠自己學習知識,該是一件多么美妙的事。
二十世紀八十年代:從樣例中學習
R.S.Michalski 等人將機器學習分為了“從樣例中學習”、“在問題求解和規(guī)劃中學習”、“通過觀察和發(fā)現(xiàn)學習”、“從指令中學習”等類別;E.A.Feigenbaum 等人在著作《人工智能手冊》中,則把機器學習劃分為了“機械學習”、“示教學習”、“類比學習”和“歸納學習”。機械學習又被稱為死記硬背式學習,即把外界輸入的信息全部記錄下來,在需要時原封不動地取出來使用,這實際上沒有進行真正的學習,僅僅是在進行信息存儲和檢索;示教學習和類比學習類似于 R.S.Michalski 等人所說的從指令中學習和通過觀察和發(fā)現(xiàn)學習。歸納學習則相當于從樣例中學習,即從訓練樣本中歸納出學習結果。二十世紀八十年代以來,被研究最多、應用最廣的是“從樣例中學習”,也就是廣泛的歸納學習,它涵蓋了監(jiān)督學習、無監(jiān)督學習等。
符號主義學習
在二十世紀八十年代,從樣例中學習的一大主流就是符號主義學習,其代表包括決策樹和基于邏輯的學習。符號學習一個直觀的流程可以參考下圖:
典型的決策樹學習以信息論為基礎,以信息熵的最小化為目標,直接模擬了人類對概念進行判定的樹形流程。基于邏輯的學習的著名代表是歸納邏輯程序設計 Inductive Logic Programming,簡稱 ILP,可以看做機器學習與邏輯程序設計的交叉。它使用一階邏輯,即謂詞邏輯來進行知識表示,通過修改和擴充邏輯表達式來完成對于數(shù)據(jù)的歸納。符號主義學習占據(jù)主流地位與前幾十年人工智能經(jīng)歷的推理期和知識期密切相關,最后,可以來認識幾位符號主義的代表人物:
連接主義學習
二十世紀九十年代中期之前,從樣例中學習的另一主流技術是基于神經(jīng)網(wǎng)絡的連接主義學習。下圖就是典型的神經(jīng)元、神經(jīng)網(wǎng)絡與著名的 BP 算法的示例。
與符號主義學習能產(chǎn)生明確的概念表示不同,連接主義學習產(chǎn)生的是黑箱模型,因此從知識獲取的角度來看,連接主義學習技術有明顯弱點。然而,BP 一直是被應用的最廣泛的機器學習算法之一,在很多現(xiàn)實問題上發(fā)揮作用。連接主義學習的最大局限是其試錯性。簡單來說,其學習過程設計大量的參數(shù),而參數(shù)的設置缺乏理論指導,主要靠手工調(diào)參;夸張一點來說,參數(shù)調(diào)節(jié)上失之毫厘,學習結果可能謬以千里。
二十世紀九十年代中期:統(tǒng)計學習
二十世紀九十年代中期,統(tǒng)計學習閃亮登場并且迅速占據(jù)主流舞臺,代表性技術是支持向量機(Support Vector Machine)以及更一般的核方法(Kernel Methods)。正是由于連接主義學習技術的局限性凸顯,人們才把目光轉向以統(tǒng)計學習理論為直接支撐的統(tǒng)計學習技術。
二十一世紀:深度學習
深度學習掀起的熱潮也許大過它本身真正的貢獻,在理論和技術上并沒有太多的創(chuàng)新,只不過是由于硬件技術的革命,計算機的速度大大提高了,使得人們有可能采用原來復雜度很高的算法,從而得到比過去更精細的結果。
二十一世紀初,連接主義學習又卷土重來,掀起了以深度學習為名的熱潮。所謂深度學習,狹義的說就是“很多層”的神經(jīng)網(wǎng)絡。在若干測試和競賽上,尤其是涉及語音、圖像等復雜對象的應用中,深度學習技術取得了優(yōu)越性能。之前的機器學習技術在應用中要取得好的性能,對于使用者的要求較高。而深度學習技術涉及的模型復雜度非常高,以至于只要下功夫“調(diào)參”,把參數(shù)調(diào)節(jié)好,性能往往就好。深度學習雖然缺乏嚴格的理論基礎,但是顯著降低了機器學習應用者的門檻,為機器學習走向工程實踐帶來了便利。深度學習火熱的原因有:
數(shù)據(jù)大了,計算能力搶了,深度學習模型擁有大量參數(shù),若數(shù)據(jù)樣本少,則很容易過擬合。
由于人類進入了大數(shù)據(jù)時代,數(shù)據(jù)儲量與計算設備都有了大發(fā)展,才使得連接主義學習技術煥發(fā)了又一春。
機器學習算法
算法基本上從功能或者形式上來分類。比如,基于樹的算法,神經(jīng)網(wǎng)絡算法。這是一個很有用的分類方式,但并不完美。因為有許多算法可以輕易地被分到兩類中去,比如說 Learning Vector Quantization 就同時是神經(jīng)網(wǎng)絡類的算法和基于實例的方法。正如機器學習算法本身沒有完美的模型一樣,算法的分類方法也沒有完美的。
常用算法
下面我們對機器學習中常見的算法及其特征與使用場景進行簡單梳理。
貝葉斯算法
貝葉斯算法是給予貝葉斯定理與特征條件獨立假設的監(jiān)督型分類方法,典型的算法有樸素貝葉斯、高斯樸素貝葉斯、多種名義樸素貝葉斯、平均單依賴估計、BBN、BN 等。該算法要求各特征間相互獨立,對于給出的待分類項,求解在此項出現(xiàn)的條件下各個類別出現(xiàn)的概率,哪個最大,就認為此待分類項屬于哪個類別。其典型的運用場景包括了:
文本分類 疾病預測 檢測 SNS 社區(qū)中不真實賬號 垃圾郵件過濾
線性回歸與邏輯回歸
線性回歸的目的在于找出某一變量與其他多個變量之間的定量關系,并且是線性關系;邏輯回歸則是將數(shù)據(jù)擬合到一個 logit 函數(shù)(或者叫做 logistic 函數(shù))中,從而能夠完成對事件發(fā)生的概率進行預測。線性回歸模型太簡單,如果數(shù)據(jù)呈線性關系可采用;邏輯回歸相對來說模型更簡單,好理解,實現(xiàn)起來,特別是大規(guī)模線性分類時比較方便。同樣的線性分類情況下,如果異常點較多的話,無法剔除,首先 LR,LR 中每個樣本都是有貢獻的,最大似然后會自動壓制異常的貢獻。
決策樹
決策樹是利用訓練數(shù)據(jù)集來構造決策樹,用構造好的決策樹對將來的新數(shù)據(jù)進行分類的監(jiān)督型算法,典型的算法有 ID3、ID4、ID5、C4.0、C4.5、C5.0、CART 等,其常用于二元或者多元分類。該算法要求變量只能數(shù)值型、名稱型,其核心概念中涉及信息熵、信息增益,在構造決策樹時,實際上是選擇信息增益 Max 的屬性作為決策節(jié)點;算法 C4.5 引入來信息增益率的概念。決策樹常用于以下場景:
金融行業(yè)用決策樹做貸款風險評估 保險行業(yè)用決策樹做推廣預測 醫(yī)療行業(yè)用決策樹生成輔助診斷處置模型 用戶分級評估 分析對某種響應可能性影響最大的因素,比如判斷具有什么特征的客戶流失概率更高 為其他模型篩選變量。決策數(shù)找到的變量是對目標變量影響很大的變量。所以可以作為篩選變量的手段。
SVM 支持向量機
SVM 同樣是監(jiān)督型分類算法,基本想法就是求解能正確劃分訓練樣本并且其幾何間隔最大化的超平面。線性支持向量機既可以解決線性可分問題,又可以解決線性不可分問題。其構建過程如下:獲取訓練輸入,將其映射至多維空間,使用回歸算法找到可最佳分離兩類輸入數(shù)據(jù)的超平面(超平面是一個在 n 維空間中將空間劃分為兩個半空間的一個平面)。一旦支持向量機完成了受訓,它就可以評估有關劃分超平面的新輸入數(shù)據(jù),并將劃分為其中一類,在 SVM 分類決策中起決定作用的是支持向量。
SVM 常用于模式識別領域中的文本識別,中文分類,人臉識別等;工程技術和信息過濾。
KNN(K 近鄰算法)
KNN 是監(jiān)督型分類算法,通過測量不同特征值之間的距離進行分類。它的的思路是:如果一個樣本在特征空間中的 K 個最相似(即特征空間中最鄰近)的樣本中的大多數(shù)屬于某一個類別,則該樣本也屬于這個類別。K 通常是不大于 20 的整數(shù)。KNN 算法中,所選擇的鄰居都是已經(jīng)正確分類的對象。該方法在定類決策上只依據(jù)最鄰近的一個或者幾個樣本的類別來決定待分樣本所屬的類別。
KNN 要求事先要有正確樣本,算法比較簡單,完全依賴于數(shù)據(jù),沒有數(shù)學模型,所以應用在很簡單的模型。其易于理解,易于實現(xiàn),無需估計參數(shù),無需訓練;適合對稀有事件進行分類,特別適合于多分類問題(multi-modal,對象具有多個類別標簽),KNN 比 SVM 的表現(xiàn)要好。不過當樣本不平衡時,抗造能力差,并且計算量大。
KNN 的典型應用場景譬如約會網(wǎng)站的數(shù)據(jù)分類,或者手寫數(shù)字識別。
聚類算法
聚類將數(shù)據(jù)集中的樣本劃分為若干個不相交的子集,每個子集可能對應一個潛在的類別,這些類別對聚類算法是未知的。其典型算法有 K-means,LVQ,高斯混合聚類,密度聚類,層次聚類等。聚類算法不需要訓練集。
隨機森林
隨機森林是監(jiān)督型分類算法,顧名思義,是用隨機的方式建立一個森林,森林里面有很多的決策樹組成,隨機森林的每一棵決策樹之間是沒有關聯(lián)的。在得到森林之后,當有一個新的輸入樣本進入的時候,就讓森林中的每一棵決策樹分別進行一下判斷,看看這個樣本應該屬于哪一類(對于分類算法),然后看看哪一類被選擇最多,就預測這個樣本為那一類。
隨機森林主要包含了采樣(有放回的采樣)與完全分裂(葉子節(jié)點要么無法再分裂,要么要么里面的所有樣本的都是指向的同一個分類)等步驟。隨機森林對多元公線性不敏感,結果對缺失數(shù)據(jù)和非平衡的數(shù)據(jù)比較穩(wěn)健,可以很好地預測多達幾千個解釋變量的作用;在數(shù)據(jù)集上表現(xiàn)良好,兩個隨機性的引入,使得隨機森林不容易陷入過擬合。
在當前的很多數(shù)據(jù)集上,相對其他算法有著很大的優(yōu)勢,兩個隨機性的引入,使得隨機森林具有很好的抗噪聲能力。它能夠處理很高維度(feature 很多)的數(shù)據(jù),并且不用做特征選擇,對數(shù)據(jù)集的適應能力強:既能處理離散型數(shù)據(jù),也能處理連續(xù)型數(shù)據(jù),數(shù)據(jù)集無需規(guī)范化。可生成一個 Proximities=(pij)矩陣,用于度量樣本之間的相似性:, aij 表示樣本 i 和 j 出現(xiàn)在隨機森林中同一個葉子結點的次數(shù),N 隨機森林中樹的顆數(shù)。
在創(chuàng)建隨機森林的時候,對 generlization error 使用的是無偏估計,訓練速度快,可以得到變量重要性排序(兩種:基于 OOB 誤分率的增加量和基于分裂時的 GINI 下降量,在訓練過程中,能夠檢測到 feature 間的互相影響,容易做成并行化方法,實現(xiàn)比較簡單。
Adaboost
Adaboost 是監(jiān)督型聚合式分類算法,和隨機森林有點像,區(qū)別在于隨機森林是并行,Adaboost 是串行,上一個分類器的結果放入下一個分類器。Adaboost 最后的分類器 YM 是由數(shù)個弱分類器(weak classifier)組合而成的,相當于最后 m 個弱分類器來投票決定分類,而且每個弱分類器的話語權 α 不一樣。
Adaboost 常用于二分類或多分類的應用場景,用于做分類任務的 baseline 無腦化,簡單,不會 overfitting,不用調(diào)分類器。還可以用于特征選擇(feature selection)。并且 Boosting 框架用于對 badcase 的修正,只需要增加新的分類器,不需要變動原有分類器。
神經(jīng)網(wǎng)絡
人工神經(jīng)網(wǎng)絡算法模擬生物神經(jīng)網(wǎng)絡,是一類模式匹配算法。一般分為輸入層、隱藏層、輸出層,隱藏層的層數(shù)根據(jù)算法需要來定,層數(shù)越多,模型越復雜,計算能力要求越高。對于輸入層和隱藏層,每一個神經(jīng)元代表輸入,經(jīng)過一系列計算得到輸出,將輸出作為下一層神經(jīng)元的輸入,以此類推,直到傳遞到輸出層。
神經(jīng)網(wǎng)絡可以充分逼近任意復雜的非線性關系;所有定量或定性的信息都等勢分布貯存于網(wǎng)絡內(nèi)的各神經(jīng)元,故有很強的魯棒性和容錯性;采用并行分布處理方法,使得快速進行大量運算成為可能;可學習和自適應不知道或不確定的系統(tǒng)。


Python“寶藏級”公眾號【Python之王】專注于Python領域,會爬蟲,數(shù)分,C++,tensorflow和Pytorch等等。
近 2年共原創(chuàng) 100+ 篇技術文章。創(chuàng)作的精品文章系列有:
日常收集整理了一批不錯的?Python?學習資料,有需要的小伙可以自行免費領取。
獲取方式如下:公眾號回復資料。領取Python等系列筆記,項目,書籍,直接套上模板就可以用了。資料包含算法、python、算法小抄、力扣刷題手冊和 C++ 等學習資料!
