目錄
正則化算法(Regularization Algorithms)
集成算法(Ensemble Algorithms)
決策樹算法(Decision Tree Algorithm)
回歸(Regression)
人工神經網絡(Artificial Neural Network)
深度學習(Deep Learning)
支持向量機(Support Vector Machine)
降維算法(Dimensionality Reduction Algorithms)
聚類算法(Clustering Algorithms)
基于實例的算法(Instance-based Algorithms)
貝葉斯算法(Bayesian Algorithms)
關聯規則學習算法(Association Rule Learning Algorithms)
圖模型(Graphical Models)
實驗[1]:比較在不同數據集上(121個),不同的分類器(179個)的實際效果。
正則化算法(Regularization Algorithms)
它是另一種方法(通常是回歸方法)的拓展,這種方法會基于模型復雜性對其進行懲罰,它喜歡相對簡單能夠更好的泛化的模型。
例子:
嶺回歸(Ridge Regression)
最小絕對收縮與選擇算子(LASSO)
GLASSO
彈性網絡(Elastic Net)
最小角回歸(Least-Angle Regression)
適用范圍:
優點:
其懲罰會減少過擬合
總會有解決方法
缺點:
懲罰會造成欠擬合
很難校準
集成算法(Ensemble algorithms)
集成方法是由多個較弱的模型集成模型組,其中的模型可以單獨進行訓練,并且它們的預測能以某種方式結合起來去做出一個總體預測。
該算法主要的問題是要找出哪些較弱的模型可以結合起來,以及結合的方法。這是一個非常強大的技術集,因此廣受歡迎。
核心理念:三個臭皮匠,頂個諸葛亮。
翻譯過來就是:當我們把多個較弱的分類器結合起來的時候,它的結果會比一個強的分類器更強
典型的例子是AdaBoost。
AdaBoost的實現是一個漸進的過程,從一個最基礎的分類器開始,每次尋找一個最能解決當前錯誤樣本的分類器。用加權取和(weighted sum)的方式把這個新分類器結合進已有的分類器中。
它的好處是自帶了特征選擇(feature selection),只使用在訓練集中發現有效的特征(feature)。這樣就降低了分類時需要計算的特征數量,也在一定程度上解決了高維數據難以理解的問題。
最經典的AdaBoost實現中,它的每一個弱分類器其實就是一個決策樹。、
隨機森林也是一種典型的集成算法。它首先隨機選取不同的特征(feature)和訓練樣本(training sample),生成大量的決策樹,然后綜合這些決策樹的結果來進行最終的分類。
隨機森林在現實分析中被大量使用,它相對于決策樹,在準確性上有了很大的提升,同時一定程度上改善了決策樹容易被攻擊的特點。
同樣是弱分類器組合的思路,相對于Boosting,其實Bagging更好理解。它首先隨機地抽取訓練集(training set),以之為基礎訓練多個弱分類器。然后通過取平均,或者投票(voting)的方式決定最終的分類結果。
因為它隨機選取訓練集的特點,Bagging可以一定程度上避免過渡擬合(overfit)。
在[1]中,最強的Bagging算法是基于SVM的。如果用定義不那么嚴格的話,隨機森林也算是Bagging的一種。
例子:
Boosting
Bootstrapped Aggregation(Bagging)
AdaBoost
層疊泛化(Stacked Generalization)(blending)
梯度推進機(Gradient Boosting Machines,GBM)
梯度提升回歸樹(Gradient Boosted Regression Trees,GBRT)
隨機森林(Random Forest)
隨機森林適用情景:
數據維度相對低(幾十維),同時對準確性有較高要求時。
因為不需要很多參數調整就可以達到不錯的效果,基本上不知道用什么方法的時候都可以先試一下隨機森林。
Boosting使用情景:
好的Boosting算法,它的準確性不遜于隨機森林。雖然在[1]的實驗中只有一個擠進前十,但是實際使用中它還是很強的。因為自帶特征選擇(feature selection)所以對新手很友好,是一個“不知道用什么就試一下它吧”的算法。
Bagging使用情景:
相較于經典的必使算法,Bagging使用的人更少一些。一部分的原因是Bagging的效果和參數的選擇關系比較大,用默認參數往往沒有很好的效果。
雖然調對參數結果會比決策樹和LR好,但是模型也變得復雜了,沒事有特別的原因就別用它了。
優點:
當先最先進的預測幾乎都使用了算法集成。它比使用單個模型預測出來的結果要精確的多
缺點:
需要大量的維護工作
決策樹算法(Decision Tree Algorithm)
決策樹學習使用一個決策樹作為一個預測模型,它將對一個 item(表征在分支上)觀察所得映射成關于該 item 的目標值的結論(表征在葉子中)。
樹模型中的目標是可變的,可以采一組有限值,被稱為分類樹;在這些樹結構中,葉子表示類標簽,分支表示表征這些類標簽的連接的特征。
決策樹的特點是它總是在沿著特征做切分。隨著層層遞進,這個劃分會越來越細。
雖然生成的樹不容易給用戶看,但是數據分析的時候,通過觀察樹的上層結構,能夠對分類器的核心思路有一個直觀的感受。
舉個簡單的例子,當我們預測一個孩子的身高的時候,決策樹的第一層可能是這個孩子的性別。男生走左邊的樹進行進一步預測,女生則走右邊的樹。這就說明性別對身高有很強的影響。
例子:
分類和回歸樹(Classification and Regression Tree,CART)
Iterative Dichotomiser 3(ID3)
C4.5 和 C5.0(一種強大方法的兩個不同版本)
適用情景:
因為它能夠生成清晰的基于特征(feature)選擇不同預測結果的樹狀結構,數據分析師希望更好的理解手上的數據的時候往往可以使用決策樹。
同時它也是相對容易被攻擊的分類器[3]。這里的攻擊是指人為的改變一些特征,使得分類器判斷錯誤。常見于垃圾郵件躲避檢測中。因為決策樹最終在底層判斷是基于單個條件的,攻擊者往往只需要改變很少的特征就可以逃過監測。
受限于它的簡單性,決策樹更大的用處是作為一些更有用的算法的基石。
優點:
容易解釋
非參數型
簡單的理解和解釋。樹可以被可視化。
需要很少的數據準備。其他技術通常需要數據歸一化,需要創建虛擬變量,并刪除空值。請注意,此模塊不支持缺少值。
使用樹的成本(即,預測數據)在用于訓練樹的數據點的數量上是對數的。
能夠處理數字和分類數據。其他技術通常專門用于分析只有一種變量類型的數據集。有關更多信息,請參閱算法
能夠處理多輸出問題。
使用白盒模型。如果給定的情況在模型中是可觀察的,那么條件的解釋很容易用布爾邏輯來解釋。相比之下,在黑匣子模型(例如,在人造神經網絡中),結果可能更難解釋。
可以使用統計測試驗證模型。這樣可以說明模型的可靠性。
即使其假設被數據生成的真實模型有些違反,表現良好。
缺點:
趨向過擬合
可能或陷于局部最小值中
沒有在線學習
策樹學習者可以創建不能很好地推廣數據的過于復雜的樹。這被稱為過擬合。修剪(目前不支持)的機制,設置葉節點所需的最小采樣數或設置樹的最大深度是避免此問題的必要條件。
決策樹可能不穩定,因為數據中的小變化可能會導致完全不同的樹生成??。通過使用合奏中的決策樹來減輕這個問題。
在最優性的幾個方面甚至是簡單的概念,已知學習最優決策樹的問題是NP完整的。因此,實際的決策樹學習算法基于啟發式算法,例如在每個節點進行局部最優決策的貪心算法。這樣的算法不能保證返回全局最優決策樹。這可以通過在綜合學習者中訓練多個樹木來緩解,其中特征和樣本隨機抽樣取代。
有一些難以學習的概念,因為決策樹不能很容易地表達它們,例如XOR,奇偶校驗或復用器問題。
如果某些類占主導地位,決策樹學習者會創造有偏見的樹。因此,建議在擬合之前平衡數據集與決策樹。
回歸(Regression)算法
回歸是用于估計兩種變量之間關系的統計過程。當用于分析因變量和一個 多個自變量之間的關系時,該算法能提供很多建模和分析多個變量的技巧。具體一點說,回歸分析可以幫助我們理解當任意一個自變量變化,另一個自變量不變時,因變量變化的典型值。最常見的是,回歸分析能在給定自變量的條件下估計出因變量的條件期望。
回歸算法是統計學中的主要算法,它已被納入統計機器學習。
回歸方法的核心就是為函數找到最合適的參數,使得函數的值和樣本的值最接近。例如線性回歸(Linear regression)就是對于函數f(x)=ax+b,找到最合適的a,b。
邏輯回歸擬合的就不是線性函數了,它擬合的是一個概率學中的函數,f(x)的值這時候就反映了樣本屬于這個類的概率。
例子:
普通最小二乘回歸(Ordinary Least Squares Regression,OLSR)
線性回歸(Linear Regression)
邏輯回歸(Logistic Regression)
逐步回歸(Stepwise Regression)
多元自適應回歸樣條(Multivariate Adaptive Regression Splines,MARS)
本地散點平滑估計(Locally Estimated Scatterplot Smoothing,LOESS)
邏輯回歸適用情景:
LR同樣是很多分類算法的基礎組件,它的好處是輸出值自然地落在0到1之間,并且有概率意義。
因為它本質上是一個線性的分類器,所以處理不好特征之間相關的情況。
雖然效果一般,卻勝在模型清晰,背后的概率學經得住推敲。它擬合出來的參數就代表了每一個特征(feature)對結果的影響。也是一個理解數據的好工具。
優點:
直接、快速
知名度高
缺點:
要求嚴格的假設
需要處理異常值
人工神經網絡
人工神經網絡是受生物神經網絡啟發而構建的算法模型。
它是一種模式匹配,常被用于回歸和分類問題,但擁有龐大的子域,由數百種算法和各類問題的變體組成。
它的核心思路是利用訓練樣本(training sample)來逐漸地完善參數。還是舉個例子預測身高的例子,如果輸入的特征中有一個是性別(1:男;0:女),而輸出的特征是身高(1:高;0:矮)。那么當訓練樣本是一個個子高的男生的時候,在神經網絡中,從“男”到“高”的路線就會被強化。同理,如果來了一個個子高的女生,那從“女”到“高”的路線就會被強化。
最終神經網絡的哪些路線比較強,就由我們的樣本所決定。
神經網絡的優勢在于,它可以有很多很多層。如果輸入輸出是直接連接的,那它和LR就沒有什么區別。但是通過大量中間層的引入,它就能夠捕捉很多輸入特征之間的關系。卷積神經網絡有很經典的不同層的可視化展示(visulization),我這里就不贅述了。
神經網絡的提出其實很早了,但是它的準確率依賴于龐大的訓練集,原本受限于計算機的速度,分類效果一直不如隨機森林和SVM這種經典算法。
例子:
感知器
反向傳播
Hopfield 網絡
徑向基函數網絡(Radial Basis Function Network,RBFN)
使用情景:
數據量龐大,參數之間存在內在聯系的時候。
當然現在神經網絡不只是一個分類器,它還可以用來生成數據,用來做降維,這些就不在這里討論了。
優點:
在語音、語義、視覺、各類游戲(如圍棋)的任務中表現極好。
算法可以快速調整,適應新的問題。
缺點:
需要大量數據進行訓練
訓練要求很高的硬件配置
模型處于「黑箱狀態」,難以理解內部機制
元參數(Metaparameter)與網絡拓撲選擇困難。
深度學習(Deep Learning)
深度學習是人工神經網絡的最新分支,它受益于當代硬件的快速發展。
眾多研究者目前的方向主要集中于構建更大、更復雜的神經網絡,目前有許多方法正在聚焦半監督學習問題,其中用于訓練的大數據集只包含很少的標記。
例子:
深玻耳茲曼機(Deep Boltzmann Machine,DBM)
Deep Belief Networks(DBN)
卷積神經網絡(CNN)
Stacked Auto-Encoders
優點/缺點:見神經網絡
支持向量機(Support Vector Machines)
給定一組訓練事例,其中每個事例都屬于兩個類別中的一個,支持向量機(SVM)訓練算法可以在被輸入新的事例后將其分類到兩個類別中的一個,使自身成為非概率二進制線性分類器。
SVM 模型將訓練事例表示為空間中的點,它們被映射到一幅圖中,由一條明確的、盡可能寬的間隔分開以區分兩個類別。
隨后,新的示例會被映射到同一空間中,并基于它們落在間隔的哪一側來預測它屬于的類別。
SVM的核心思想就是找到不同類別之間的分界面,使得兩類樣本盡量落在面的兩邊,而且離分界面盡量遠。
最早的SVM是平面的,局限很大。但是利用核函數(kernel function),我們可以把平面投射(mapping)成曲面,進而大大提高SVM的適用范圍。
提高之后的SVM同樣被大量使用,在實際分類中展現了很優秀的正確率。
適用情景:
SVM在很多數據集上都有優秀的表現。
相對來說,SVM盡量保持與樣本間距離的性質導致它抗攻擊的能力更強。
和隨機森林一樣,這也是一個拿到數據就可以先嘗試一下的算法。
優點:
在非線性可分問題上表現優秀
缺點:
非常難以訓練
很難解釋
降維算法(Dimensionality Reduction Algorithms)
和集簇方法類似,降維追求并利用數據的內在結構,目的在于使用較少的信息總結或描述數據。
這一算法可用于可視化高維數據或簡化接下來可用于監督學習中的數據。許多這樣的方法可針對分類和回歸的使用進行調整。
其中判別分析主要是統計那邊在用。判別分析的典型例子是線性判別分析(Linear discriminant analysis),簡稱LDA。
(這里注意不要和隱含狄利克雷分布(Latent Dirichlet allocation)弄混,雖然都叫LDA但說的不是一件事。)
LDA的核心思想是把高維的樣本投射(project)到低維上,如果要分成兩類,就投射到一維。要分三類就投射到二維平面上。這樣的投射當然有很多種不同的方式,LDA投射的標準就是讓同類的樣本盡量靠近,而不同類的盡量分開。對于未來要預測的樣本,用同樣的方式投射之后就可以輕易地分辨類別了。
例子:
主成分分析(Principal Component Analysis (PCA))
主成分回歸(Principal Component Regression (PCR))
偏最小二乘回歸(Partial Least Squares Regression (PLSR))
Sammon 映射(Sammon Mapping)
多維尺度變換(Multidimensional Scaling (MDS))
投影尋蹤(Projection Pursuit)
線性判別分析(Linear Discriminant Analysis (LDA))
混合判別分析(Mixture Discriminant Analysis (MDA))
二次判別分析(Quadratic Discriminant Analysis (QDA))
靈活判別分析(Flexible Discriminant Analysis (FDA))
判別分析使用情景:
判別分析適用于高維數據需要降維的情況,自帶降維功能使得我們能方便地觀察樣本分布。它的正確性有數學公式可以證明,所以同樣是很經得住推敲的方式。
但是它的分類準確率往往不是很高,所以不是統計系的人就把它作為降維工具用吧。
同時注意它是假定樣本成正態分布的,所以那種同心圓形的數據就不要嘗試了。
優點:
可處理大規模數據集
無需在數據上進行假設
缺點:
難以搞定非線性數據
難以理解結果的意義
聚類算法(Clustering Algorithms)
聚類算法是指對一組目標進行分類,屬于同一組(亦即一個類,cluster)的目標被劃分在一組中,與其他組目標相比,同一組目標更加彼此相似(在某種意義上)。
例子:
K-均值(k-Means)
k-Medians 算法
Expectation Maximi 封層 ation (EM)
最大期望算法(EM)
分層集群(Hierarchical Clstering)
優點:
讓數據變得有意義
缺點:
結果難以解讀,針對不尋常的數據組,結果可能無用。同樣的數據每次得到的結果可能不同。有不好的局部最小值
k均值非常依賴初始簇中心的位置,
基于實例的算法(Instance-based Algorithms)
基于實例的算法(有時也稱為基于記憶的學習)是這樣學 習算法,不是明確歸納,而是將新的問題例子與訓練過程中見過的例子進行對比,這些見過的例子就在存儲器中。
之所以叫基于實例的算法是因為它直接從訓練實例中建構出假設。這意味這,假設的復雜度能隨著數據的增長而變化:最糟的情況是,假設是一個訓練項目列表,分類一個單獨新實例計算復雜度為 O(n)
典型的例子是KNN,它的思路就是——對于待判斷的點,找到離它最近的幾個數據點,根據它們的類型決定待判斷點的類型。
它的特點是完全跟著數據走,沒有數學模型可言。
例子:
K 最近鄰(k-Nearest Neighbor (kNN))
學習向量量化(Learning Vector Quantization (LVQ))
自組織映射(Self-Organizing Map (SOM))
局部加權學習(Locally Weighted Learning (LWL))
適用范圍:
需要一個特別容易解釋的模型的時候。
比如需要向用戶解釋原因的推薦算法。
優點:
算法簡單、結果易于解讀
缺點:
內存使用非常高
計算成本高
不可能用于高維特征空間
貝葉斯算法(Bayesian Algorithms)
貝葉斯方法是指明確應用了貝葉斯定理來解決如分類和回歸等問題的方法。
典型的例子是Naive Bayes,核心思路是根據條件概率計算待判斷點的類型。
是相對容易理解的一個模型,至今依然被垃圾郵件過濾器使用。
例子:
樸素貝葉斯(Naive Bayes)
高斯樸素貝葉斯(Gaussian Naive Bayes)
多項式樸素貝葉斯(Multinomial Naive Bayes)
平均一致依賴估計器(Averaged One-Dependence Estimators (AODE))
貝葉斯信念網絡(Bayesian Belief Network (BBN))
貝葉斯網絡(Bayesian Network (BN))
適用情景:
需要一個比較容易解釋,而且不同維度之間相關性較小的模型的時候。
可以高效處理高維數據,雖然結果可能不盡如人意。
優點:
快速、易于訓練、給出了它們所需的資源能帶來良好的表現
1)樸素貝葉斯模型發源于古典數學理論,有穩定的分類效率。
2)對小規模的數據表現很好,能個處理多分類任務,適合增量式訓練,尤其是數據量超出內存時,我們可以一批批的去增量訓練。
3)對缺失數據不太敏感,算法也比較簡單,常用于文本分類。
缺點:
如果輸入變量是相關的,則會出現問題
1) 理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上并非總是如此,這是因為樸素貝葉斯模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。而在屬性相關性較小時,樸素貝葉斯性能最為良好。對于這一點,有半樸素貝葉斯之類的算法通過考慮部分關聯性適度改進。
2)需要知道先驗概率,且先驗概率很多時候取決于假設,假設的模型可以有很多種,因此在某些時候會由于假設的先驗模型的原因導致預測效果不佳。
3)由于我們是通過先驗和數據來決定后驗的概率從而決定分類,所以分類決策存在一定的錯誤率。
4)對輸入數據的表達形式很敏感。
關聯規則學習算法(Association Rule Learning Algorithms)
關聯規則學習方法能夠提取出對數據中的變量之間的關系的最佳解釋。比如說一家超市的銷售數據中存在規則 {洋蔥,土豆}=> {漢堡},那說明當一位客戶同時購買了洋蔥和土豆的時候,他很有可能還會購買漢堡肉。
例子:
Apriori 算法(Apriori algorithm)
Eclat 算法(Eclat algorithm)
FP-growth
圖模型(Graphical Models)
圖模型或概率圖模型(PGM/probabilistic graphical model)是一種概率模型,一個圖(graph)可以通過其表示隨機變量之間的條件依賴結構(conditional dependence structure)。
例子:
貝葉斯網絡(Bayesian network)
馬爾可夫隨機域(Markov random field)
鏈圖(Chain Graphs)
祖先圖(Ancestral graph)
優點:
模型清晰,能被直觀地理解
缺點:
確定其依賴的拓撲很困難,有時候也很模糊