本文會隨着筆者本身認知的變化而不斷更新,有興趣的話能夠關注筆者的專欄或者Github。html
互聯網的迅猛發展催生了數據的爆炸式增加。面對海量數據,如何挖掘數據的架子,成爲一個愈來愈重要的問題。首先,對於數據挖掘的概念,目前比較普遍承認的一種解釋以下:python
Data Mining is the use of efficient techniques for the analysis of very large collections of data and the extraction of useful and possibly unexpected patterns in data。git
數據挖掘是一種經過分析海量數據,從數據中提取潛在的可是很是有用的模式的技術。數據挖掘的任務能夠分爲預測性任務和描述性任務,預測性任務主要是預測可能出現的狀況;描述性任務則是發現一些人類能夠解釋的模式或者規律。數據挖掘中比較常見的任務包括分類、聚類、關聯規則挖掘、時間序列挖掘、迴歸等,其中分類、迴歸屬於預測性任務,聚類、關聯規則挖掘、時間序列分析等則都是解釋性任務。而什麼又是機器學習呢?筆者在這裏引用有趣的機器學習概念縱覽:從多元擬合,神經網絡到深度學習,給每一個感興趣的人中的定義:github
Machine learning is the idea that there are generic algorithms that can tell you something interesting about a set of data without you having to write any custom code specific to the problem. Instead of writing code, you feed data to the generic algorithm and it builds its own logic based on the data.web
Machine Learning便是指可以幫你從數據中尋找到感興趣的部分而不須要編寫特定的問題解決方案的通用算法的集合。通用的算法能夠根據你不一樣的輸入數據來自動地構建面向數據集合最優的處理邏輯。舉例而言,算法中一個大的分類即分類算法,它能夠將數據分類到不一樣的組合中。而能夠用來識別手寫數字的算法天然也能用來識別垃圾郵件,只不過對於數據特徵的提取方法不一樣。相同的算法輸入不一樣的數據就可以用來處理不一樣的分類邏輯。換一個形象點的闡述方式,對於某給定的任務T,在合理的性能度量方案P的前提下,某計算機程序能夠自主學習任務T的經驗E;隨着提供合適、優質、大量的經驗E,該程序對於任務T的性能逐步提升。即隨着任務的不斷執行,經驗的累積會帶來計算機性能的提高。算法
在二十世紀九十年代中期以後,統計學習漸漸成爲機器學習的主流方向,具體關於機器學習的發展歷程能夠參見下文的機器學習的前世此生章節。數據庫
論及數據挖掘與機器學習的關係,筆者更傾向於使用數據科學這個概念來進行一個總括,在筆者的概括中,數據科學泛指一切能夠從數據中獲取信息的技術與研究,不過注意和Infrastructure部分進行區分,筆者的數據科學部分知識體系,會包含如下部分:編程
Methodology:方法論segmentfault
DataProcess:數據預處理
MachineLearning:機器學習
NLP:天然語言處理
Statistics:數理統計
DeepLearning:深度學習
Application:應用
Classification:分類
CommunityDetection:社團發現
IntelligentAssistant:智能輔助
Personas:用戶畫像
Recognition:模式識別
RecommendSystem:推薦系統
CrawlerSE:爬蟲與搜索引擎
DataVisualization:數據可視化
Toolkits:工具集
綜上所述,數據科學涵括數據挖掘,機器學習是數據挖掘的重要手段之一,而統計學習是目前機器學習的主流方向。
[DataScience/MachineLearning Toolkits Index:筆者總結的數據科學/機器學習中經常使用工具集合/示例索引]()
[2016-周志華-機器學習]()
2011-DataMining Practical Machine Learning Tools and Techniques
2010-Ethem Alpaydin-Introduction To Machine Learning Second Edition
2008-The Elements of Statistical Learning Data Mining Inference and Prediction
A Programmer's Guide to Data Mining:一本開源的介紹了數據挖掘方面的書,包括了推薦系統、協同過濾、分類、Native Bayes、基本的NLP以及聚類
Standford-The Elements of Statistical Learning Data Mining, Inference, and Prediction
DataScience是從數據中獲取價值的最重要的流行方法之一。
這個環節最重要的是需求和數據的匹配。首先須要明確需求,好比分類問題中須要判斷是否有帶標註的訓練數據集,不然,沒法按照有監督的分類算法來解決。此外,數據的規模、重要Feature的覆蓋率等等,也都是要考慮的問題。
數據挖掘中準備數據的時候,須要儘量的將相關數據集成在一塊兒。若是集成的數據中,有兩列或者多列值同樣,則不可避免地會產生數值衝突或者數據冗餘,可能須要根據數據的質量來決定保留衝突中的哪一列。
通常來講,有效的採樣方式以下:若是樣本是有表明性的,則使用樣本數據和使用整個數據集的效果幾乎是同樣的。抽樣方法有不少,首先考慮的是有放回的採樣,以及具體選擇哪一種採樣方式。
現實世界中的數據,是真實的數據,不可避免地會存在各類各樣異常的狀況。好比某一列的值缺失或者某列的值是異常的。因此,咱們須要在數據預處理階段進行數據清洗,來減小噪音數據對於模型訓練和預測結果的影響。
數據和特徵決定了機器學習的上限,而模型和算法只是逼近這個上限。
feature engineering is another topic which doesn’t seem to merit any review papers or books, or even chapters in books, but it is absolutely vital to ML success. […] Much of the success of machine learning is actually success in engineering features that a learner can understand.
特徵是對於所需解決問題有用的屬性。好比在計算機視覺領域,圖片做爲研究對象,可能圖片中的一個線條就是一個特徵;在天然語言處理領域,研究對象是文檔,文檔中一個詞語出現的次數就是一個特徵;在語音識別領域,研究對象是一段話,那麼一個音頻位就是一個特徵。
既然特徵是對咱們所解決的問題最有用的屬性,首先咱們須要處理的是根據原始數據抽取出所須要的特徵。不過須要注意的是並非全部的特徵對所解決的問題影響同樣大,有些特徵可能對問題產生特別大的影響,可是有些則影響甚微,和所解決的問題不相關的特徵須要被剔除掉。所以,咱們須要針對所解決的問題選擇最有用的特徵集合,通常能夠經過相關係數等方式來計算特徵的重要性。
固然,有些模型自己會輸出feature重要性,譬如Random Forest算法,而對於圖片、音頻等原始數據形態特別大的對象,則可能須要採用像PCA這樣的自動降維技術。另外,還可能須要本人對數據和所需解決的問題有深刻的理解,可以經過特徵組合等方式構造出新的特徵,這也正是特徵工程被稱爲一門藝術的緣由。
通常來講,對於算法與模型選型的考慮,可能有:
訓練集的大小
特徵的維度大小
所解決問題是不是線性可分的
全部的特徵是獨立的嗎
是否須要考慮過擬合
性能要求
在實際的工做中,咱們選擇算法與模型時候會考慮到奧卡姆剃刀原理:
Occam's Razor principle:use the least complicated algorithm that can address your needs and only go for something more complicated if strictly necessary
業界比較通用的算法選擇通常是這樣的規律:若是LR能夠,則用LR;若是LR不合適,則選擇Ensemble方式;若是Ensemble方式不合適,則考慮是否嘗試Deep Learning。
本部分參考了周志華教授的著做:《機器學習》
機器學習是人工智能研究發展到必定階段的必然產物,本章僅從筆者的視角對機器學習這五十年來的發展進行一個略述,疏漏錯誤之處煩請指正。下面這幅漫畫中就展現了一個無奈的問題,三歲幼童能夠輕鬆解決的問題卻須要最頂尖的科學家花費數十年的光陰,或許機器學習離咱們在電影裏看到的那樣還有很長一段路要走。
知識來源於哪裏?知識來源於進化、經驗、文化和計算機。對於知識和計算機的關係,能夠引用Facebook人工智能實驗室負責人Yann LeCun的一段話:未來,世界上的大部分知識將由機器提取出來,而且將長駐與機器中。而幫助計算機獲取新知識,能夠經過如下五種方法來實現:
填充現存知識的空白
對大腦進行仿真
對進化進行模擬
系統性的減小不肯定性
注意新舊知識之間的類似點
對應以上這幾種知識獲取的途徑,咱們能夠認爲常見的人工智能的方向有:
| 派別 | 起源 | 擅長算法 |
| 符號主義(Symbolists) | 邏輯學、哲學 | 逆演繹算法(Inverse deduction) |
| 聯結主義(Connectionists) | 神經科學 | 反向傳播算法(Backpropagation) |
| 進化主義(Evolutionaries) | 進化生物學 | 基因編程(Genetic programming) |
| 貝葉斯派(Bayesians) | 統計學 | 機率推理(Probabilistic inference) |
| Analogizer | 心理學 | 核機器(Kernel machines) |
二十世紀五十年代到七十年代初,人工智能研究處於」推理期「,彼時人們覺得只要能賦予機器邏輯推理的能力,機器就能具備智能。這一階段的表明性做品有A. Newell和H. Simon的「邏輯理論家」程序,該程序於1952年證實了羅素和懷特海的名著《數學原理》中的38條定理,在1963年證實了所有的52條定理。不過隨着時間的發展,人們漸漸發現僅具備邏輯推理能力是遠遠實現不了人工智能的。
從二十世紀七十年代中期開始,人工智能研究進入了「知識期」,在這一時期,大量的專家系統問世,在不少應用領域取得了大量成果。在本階段誕生的技術的一個鮮明的表明就是模式識別,它強調的是如何讓一個計算機程序去作一些看起來很「智能」的事情,例如識別「3」這個數字。並且在融入了不少的智慧和直覺後,人們也的確構建了這樣的一個程序。從這個時代誕生的模式識別領域最著名的書之一是由Duda & Hart執筆的「模式識別(Pattern Classification)」。 對基礎的研究者來講,仍然是一本不錯的入門教材。不過對於裏面的一些詞彙就不要太糾結了,由於這本書已經有必定的年代了,詞彙會有點過期。自定義規則、自定義決策,以及自定義「智能」程序在這個任務上,曾經都風靡一時。有趣的是筆者在下文中也會介紹如何用深度學習網絡去識別手寫的數字,有興趣的朋友能夠去探究下使用模式識別與深度學習相比,一樣是識別手寫數字上的差別。
不過,專家系統面臨「知識工程瓶頸」,即由人來把知識總結出來再教給計算機是至關困難的,因而人們開始考慮若是機器可以本身學習知識,該是一件多麼美妙的事。
R.S.Michalski等人將機器學習分爲了「從樣例中學習」、「在問題求解和規劃中學習」、「經過觀察和發現學習」、「從指令中學習」等類別;E.A.Feigenbaum等人在著做《人工智能手冊》中,則把機器學習劃分爲了「機械學習」、「示教學習」、「類比學習」和「概括學習」。機械學習又被稱爲死記硬背式學習,即把外界輸入的信息所有記錄下來,在須要時原封不動地取出來使用,這實際上沒有進行真正的學習,僅僅是在進行信息存儲和檢索;示教學習和類比學習相似於R.S.Michalski等人所說的從指令中學習和經過觀察和發現學習。概括學習則至關於從樣例中學習,即從訓練樣本中概括出學習結果。二十世紀八十年代以來,被研究最多、應用最廣的是「從樣例中學習」,也就是普遍的概括學習,它涵蓋了監督學習、無監督學習等。
在二十世紀八十年代,從樣例中學習的一大主流就是符號主義學習,其表明包括決策樹和基於邏輯的學習。符號學習一個直觀的流程能夠參考下圖:
典型的決策樹學習以信息論爲基礎,以信息熵的最小化爲目標,直接模擬了人類對概念進行斷定的樹形流程。基於邏輯的學習的著名錶明是概括邏輯程序設計Inductive Logic Programming,簡稱ILP,能夠看作機器學習與邏輯程序設計的交叉。它使用一階邏輯,即謂詞邏輯來進行知識表示,經過修改和擴充邏輯表達式來完成對於數據的概括。符號主義學習佔據主流地位與前幾十年人工智能經歷的推理期和知識期密切相關,最後,能夠來認識幾位符號主義的表明人物:
二十世紀九十年代中期以前,從樣例中學習的另外一主流技術是基於神經網絡的鏈接主義學習。下圖就是典型的神經元、神經網絡與著名的BP算法的示例。
與符號主義學習能產生明確的概念表示不一樣,鏈接主義學習產生的是黑箱模型,所以從知識獲取的角度來看,鏈接主義學習技術有明顯弱點。然而,BP一直是被應用的最普遍的機器學習算法之一,在不少現實問題上發揮做用。鏈接主義學習的最大侷限是其試錯性。簡單來講,其學習過程設計大量的參數,而參數的設置缺少理論指導,主要靠手工調參;誇張一點來講,參數調節上失之毫釐,學習結果可能謬以千里。
二十世紀九十年代中期,統計學習閃亮登場而且迅速佔據主流舞臺,表明性技術是支持向量機(Support Vector Machine)以及更通常的核方法(Kernel Methods)。正是因爲鏈接主義學習技術的侷限性凸顯,人們才把目光轉向以統計學習理論爲直接支撐的統計學習技術。
深度學習掀起的熱潮也許大過它自己真正的貢獻,在理論和技術上並無太多的創新,只不過是因爲硬件技術的革命,計算機的速度大大提升了,使得人們有可能採用原來複雜度很高的算法,從而獲得比過去更精細的結果。
二十一世紀初,鏈接主義學習又捲土重來,掀起了以深度學習爲名的熱潮。所謂深度學習,狹義的說就是「不少層」的神經網絡。在若干測試和競賽上,尤爲是涉及語音、圖像等複雜對象的應用中,深度學習技術取得了優越性能。以前的機器學習技術在應用中要取得好的性能,對於使用者的要求較高。而深度學習技術涉及的模型複雜度很是高,以致於只要下功夫「調參」,把參數調節好,性能每每就好。深度學習雖然缺少嚴格的理論基礎,可是顯著下降了機器學習應用者的門檻,爲機器學習走向工程實踐帶來了便利。深度學習火熱的緣由有:
數據大了,計算能力搶了,深度學習模型擁有大量參數,若數據樣本少,則很容易過擬合。
因爲人類進入了大數據時代,數據儲量與計算設備都有了大發展,才使得鏈接主義學習技術煥發了又一春。
筆者做爲比較純粹的偏工程的研究汪,並無真正大規模使用過深度學習集羣,可是,譬如Tensorflow,它的編程易用性和同等狀況下的效果仍是會大於比對的算法。關於上面一段話,跪求大神打臉指正。( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)
本部分節選自筆者另外一篇文章:有趣的機器學習概念縱覽:從多元擬合,神經網絡到深度學習,給每一個感興趣的人
首先咱們來看一個真實的例子,假設你是一位成功的房地產中介,你的事業正在蒸蒸日上,如今打算僱傭更多的中介來幫你一塊兒工做。不過問題來了,你能夠一眼看出某個房子到底估值集合,而你的實習生們可沒你這個本事。爲了幫你的實習生儘快適應這份工做,你打算寫個小的APP來幫他們根據房子的尺寸、鄰居以及以前賣的相似的屋子的價格來評估這個屋子值多少錢。所以你翻閱了以前的資料,總結成了下表:
利用這些數據,咱們但願最後的程序可以幫咱們自動預測一個新的屋子大概能賣到多少錢:
從知識學習與人類思惟的角度來講,咱們會根據房屋的幾個特性來推導出最後的房屋價格,根據經驗咱們可能獲得以下等式:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): price = 0 # 俺們這嘎達,房子基本上每平方200 price_per_sqft = 200 if neighborhood == "hipsterton": # 市中心會貴一點 price_per_sqft = 400 elif neighborhood == "skid row": # 郊區便宜點 price_per_sqft = 100 # 能夠根據單價*房子大小得出一個基本價格 price = price_per_sqft * sqft # 基於房間數作點調整 if num_of_bedrooms == 0: # 沒房間的便宜點 price = price — 20000 else: # 房間越多通常越值錢 price = price + (num_of_bedrooms * 1000) return price
這就是典型的簡答的基於經驗的條件式判斷,你也能經過這種方法得出一個較好地模型。不過若是數據多了或者價格發生較大波動的時候,你就有心無力了。而應用機器學習算法則是讓計算機去幫你總結出這個規律,大概以下所示:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): price = <computer, plz do some math for me> return price
通俗的理解,價格比如一鍋燉湯,而臥室的數量、客廳面積以及鄰近的街區就是食材,計算機幫你自動地根據不一樣的食材燉出不一樣的湯來。若是你是喜歡數學的,那就比如有三個自變量的方程,代碼表述的話大概是下面這個樣子:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood): price = 0 # a little pinch of this price += num_of_bedrooms * .841231951398213 # and a big pinch of that price += sqft * 1231.1231231 # maybe a handful of this price += neighborhood * 2.3242341421 # and finally, just a little extra salt for good measure price += 201.23432095 return price
這裏不作深刻講解,只是觀察上述代碼能夠發現,在大量數據的狀況下,最終能夠造成一個帶權重和的等式,而其中的參數,從直觀意義上來說,可能毫無心義。
上述算法只能處理一些較爲簡單的問題,即結果與輸入的變量之間存在着某些線性關係。Too young,Too Simple,真實的房價和這些可不只僅只有簡單的線性關係,譬如鄰近的街區這個因子可能對面積較大和麪積特別小的房子有影響,可是對於那些中等大小的毫無關係,換言之,price與neighborhood之間並非線性關聯,而是相似於二次函數或者拋物線函數圖之間的非線性關聯。這種狀況下,咱們可能獲得不一樣的權重值(形象來理解,可能部分權重值是收斂到某個局部最優):
如今等於每次預測咱們有了四個獨立的預測值,下一步就是須要將四個值合併爲一個最終的輸出值:
咱們將上文提到的兩個步驟合併起來,大概以下圖所示:
咳咳,沒錯,這就是一個典型的神經網絡,每一個節點接收一系列的輸入,爲每一個輸入分配權重,而後計算輸出值。經過鏈接這一系列的節點,咱們就可以爲複雜的函數建模。
咱們在文首就強調過,機器學習是通用算法加上特定的數據最終造成一套特定的模型,那麼咱們將上面房產的數據修正爲手寫數字,大概就像以下這樣:
在這裏咱們但願用神經網絡來處理圖片,第二步就是須要將一張圖片轉化爲數字的組合,便是計算機能夠處理的樣子。表擔憂,這一步仍是很簡單的。對於電腦而言,一張圖片就是一個多維的整型數組,每一個元素表明了每一個像素的模糊度,大概是這樣子:
爲了可以將圖片應用到咱們的神經網絡模型中,咱們須要將1818像素的圖片轉化爲324個數字:
此次的共有324個輸入,咱們須要將神經網絡擴大化轉化爲324個輸入的模型:
用這種方法,咱們能夠方便地建立無限的訓練數據。數據有了,咱們也須要來擴展下咱們的神經網絡,從而使它可以學習些更復雜的模式。具體而言,咱們須要添加更多的中間層:
這個呢,就是咱們所謂的深度神經網絡,由於它比傳統的神經網絡有更多的中間層。
算法基本上從功能或者形式上來分類。好比,基於樹的算法,神經網絡算法。這是一個頗有用的分類方式,但並不完美。由於有許多算法能夠輕易地被分到兩類中去,好比說Learning Vector Quantization就同時是神經網絡類的算法和基於實例的方法。正如機器學習算法自己沒有完美的模型同樣,算法的分類方法也沒有完美的。
輸入數據被稱爲訓練數據,而且有已知的結果或被標記。好比說一封郵件是不是垃圾郵件,或者說一段時間內的股價。模型作出預測,若是錯了就會被修正,這個過程一直持續到對於訓練數據它可以達到必定的正確標準。問題例子包括分類和迴歸問題,算法例子包括邏輯迴歸和反向神經網絡。
有監督學習的通俗例子能夠以人類認知月亮的過程爲例,小時候會認爲黑夜裏天空中明亮的圓盤狀物體爲月亮,後來隨着時間的推移,發現圓盤狀這個特色並不是一個決定性因素。
輸入數據是被標記的和不被標記的數據的混合,有一些預測問題可是模型也必須學習數據的結構和組成。問題例子包括分類和迴歸問題,算法例子基本上是無監督學習算法的延伸。
輸入數據沒有被標記,也沒有肯定的結果。模型對數據的結構和數值進行概括。問題例子包括Association rule learning和聚類問題,算法例子包括 Apriori 算法和K-均值算法。
迴歸主要用於對變量之間的關係進行建模,而且使用某個損失函數或者代價函數做爲某個變量組合的評估標準。迴歸方法是統計的一個重要組成部分,目前主要用於統計機器學習中。有時候這個概念會混亂,由於有時候會用迴歸去描述一類問題,有時候也會用迴歸去描述一類算法,而實際上回歸更多的指的是一個處理過程。常見的迴歸算法有:
Ordinary Least Squares Regression (OLSR)
Linear Regression
Logistic Regression
Stepwise Regression
Multivariate Adaptive Regression Splines (MARS)
Locally Estimated Scatterplot Smoothing (LOESS)
基於實例的學習模型主要是根據訓練實例或者樣本的特性進行模型構建,所以對於此類算法訓練數據相當重要。此類型算法一般會對測試數據創建一個統一的數據庫,而後經過比較新老數據之間的類似度來進行匹配預測。鑑於這個特性,基於實例的算法又被成爲「贏者通吃」或者「基於記憶」的學習。此類算法的核心在於存儲實例的表示方法與實例間類似度的度量方法,最多見的基於實例的學習算法有:
k-Nearest Neighbour (kNN)
Learning Vector Quantization (LVQ)
Self-Organizing Map (SOM)
Locally Weighted Learning (LWL)
決策樹即利用數據中屬性的真實值來構建一個決策模型,決策樹算法也主要用於分類與迴歸問題。決策樹算法通常速度和準確度都不錯,所以在機器學習中很受歡迎。常見的機器學習算法有:
Classification and Regression Tree (CART)
Iterative Dichotomiser 3 (ID3)
C4.5 and C5.0 (different versions of a powerful approach)
Chi-squared Automatic Interaction Detection (CHAID)
Decision Stump
M5
Conditional Decision Trees
貝葉斯算法便是基於貝葉斯公式及其變種而用於常見的分類與聚類問題的算法。常見的貝葉斯算法有:
Naive Bayes
Gaussian Naive Bayes
Multinomial Naive Bayes
Averaged One-Dependence Estimators (AODE)
Bayesian Belief Network (BBN)
Bayesian Network (BN)
聚類,與迴歸同樣同時描述了一系列問題與一系列算法的集合。聚類算法一般地基於中心與層次化進行建模,基本上全部的方法都使用數據的內部結構來將數據組合進入不一樣的社羣中,常見的聚類算法有:
k-Means
k-Medians
Expectation Maximisation (EM)
Hierarchical Clustering
人工神經網絡算法主要受生物學中的人工神經網絡的啓發,須要注意,本文將深度學習剝離爲一個單獨的部分進行描述。常見的人工神經網絡算法有:
Perceptron
Back-Propagation
Hopfield Network
Radial Basis Function Network (RBFN)
深度學習算法是對於人工神經網絡算法的一個擴展,基於現代大量廉價的計算能力的組合從而實現對於複雜模型的求解。深度學習算法主要是基於構建大型、複雜的神經網絡,不少方法都是爲了處理只含有少許標籤數據的海量數據集的半監督學習方法。常見的深度學習算法有:
Deep Boltzmann Machine (DBM)
Deep Belief Networks (DBN)
Convolutional Neural Network (CNN)
Stacked Auto-Encoders
組合方式主要分爲Bagging和Boosting。Bagging是Bootstrapped Aggregation的縮寫,其基本原理是讓學習算法訓練多輪,每輪的訓練集由從初始的訓練集中隨機取出的N個訓練樣本組成(有放回的隨機抽樣),訓練以後可獲得一個預測函數集合,經過投票的方式決定預測結果。而Boosting中主要的是AdaBoost(Adaptive Boosting)。基本原理是初始化時對每個訓練樣本賦相等的權重$1/n$,而後用學習算法訓練多輪,每輪結束後,對訓練失敗的訓練樣本賦以較大的權重,也就是讓學習算法在後續的學習中集中對比較難的訓練樣本進行學習,從而獲得一個預測函數的集合。每一個預測函數都有必定的權重,預測效果好的函數權重較大,反之較小,最終經過有權重的投票方式來決定預測結果。而Bagging與Boosting的主要區別在於:
取樣方式不一樣。Bagging採用均勻取樣,而Boosting根據錯誤率來取樣,所以理論上來講Boosting的分類精度要優於Bagging。
訓練集的選擇方式不一樣。Bagging的訓練集的選擇是隨機的,各輪訓練集之間相互獨立,而Boosting的各輪訓練集的選擇與前面的學習結果有關。
預測函數不一樣。Bagging的各個預測函數沒有權重,而Boosting是有權重的。Bagging的各個預測函數能夠並行生成,而Boosting的各個預測函數只能順序生成。
總結而言,對於像神級網絡這樣及其耗時的學習方法,Bagging能夠經過並行訓練節省大量時間的開銷。Bagging和Boosting均可以有效地提升分類的準確性。在大多數數據集合中,Boosting的準確性比Bagging要高。
Boosting
Bootstrapped Aggregation (Bagging)
AdaBoost
Stacked Generalization (blending)
Gradient Boosting Machines (GBM)
Gradient Boosted Regression Trees (GBRT)
Random Forest