如下介紹典型的分類算法。 html
貝葉斯分類器的分類原理是經過某對象的先驗機率,利用貝葉斯公式計算出其後驗機率,即該對象屬於某一類的機率,選擇具備最大後驗機率的類做爲該對象所屬的類。目前研究較多的貝葉斯分類器主要有四種,分別是:Naive Bayes、 TAN、BAN 和 GBN。 算法
貝葉斯網絡(BayesNet) bootstrap
貝葉斯網絡是一個帶有機率註釋的有向無環圖,圖中的每個結點均表示一個隨機變量 , 圖中兩結點間若存在着一條弧,則表示這兩結點相對應的隨機變量是機率相依的,反之則說明這兩個隨機變量是條件獨立的。網絡中任意一個結點 X 均有一個相應的條件機率表 Conditional Probability Table,CPT) ,用以表示結點 X 在其父結點取各可能值時的條件機率。若結點 X 無父結點 , 則 X 的 CPT 爲其先驗機率分佈。貝葉斯網絡的結構及各結點的 CPT 定義了網絡中各變量的機率分佈。應用貝葉斯網絡分類器進行分類主要分紅兩階段。第一階段是貝葉斯網絡分類器的學習,即從樣本數據中構造分類器,包括結構學習和 CPT 學習;第二階段是貝葉斯網絡分類器的推理,即計算類結點的條件機率,對分類數據進行分類。這兩個階段的時間複雜性均取決於特徵值間的依賴程度,甚至能夠是 NP 徹底問題,於是在實際應用中,每每須要對貝葉斯網絡分類器進行簡化。根據對特徵值間不一樣關聯程度的假設,能夠得出各類貝葉斯分類器。 網絡
樸素貝葉斯(NaiveBayes) app
樸素貝葉斯模型(NBC)發源於古典數學理論,有着堅實的數學基礎,以及穩定的分類效率。同時,NBC 模型所需估計的參數不多,對缺失數據不太敏感,算法也比較簡單。NBC 模型假設屬性之間相互獨立,這個假設在實際應用中每每是不成立的,這給 NBC 模型的正確分類帶來了必定影響。在屬性個數比較多或者屬性之間相關性較大時,NBC 模型的分類效率比不上決策樹模型。而在屬性相關性較小時,NBC 模型的性能最爲良好。 工具
相對其它的 Inductive Learning 的算法來講,Lazy Learning 的方法在訓練是僅僅是保存樣本集的信息,直到測試樣本到達時才進行分類決策。也就是說這個決策模型是在測試樣本到來之後才生成的。相對與其它的分類算法來講,這類的分類算法能夠根據每一個測試樣本的樣本信息來學習模型,這樣的學習模型可能更好的擬 合局部的樣本特性。kNN 算法的思路很是簡單直觀:若是一個樣本在特徵空間中的 k 個最類似 ( 即特徵空間中最鄰近 ) 的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別。其基本原理是在測試樣本到達的時候尋找到測試樣本的 k 臨近的樣本,而後選擇這些鄰居樣本的類別最集中的一種做爲測試樣本的類別。在 weka 中關於 kNN 的算法有兩個,分別是 IB1,IBk。 性能
IB1 即 1 近鄰 學習
IB1 是經過它的一個鄰居來判斷測試樣本的類別 測試
IBk 即 K 近鄰 ui
IBk 是經過它周圍的 k 個鄰居來判斷測試樣本的類別
在樣本中有比較多的噪音點是(noisy points)時,經過一個鄰居的效果很顯然會差一些,由於出現偏差的狀況會比較多。這種狀況下,IBk 就成了一個較優的選項了。這個時候有出現了一個問題,k 這個值如何肯定,通常來講這個 k 是經過經驗來判斷的。
即決策樹算法,決策樹是對數據進行分類,以此達到預測的目的。該決策樹方法先根據訓練集數據造成決策樹,若是該樹不能對全部對象給出正確的分類,那麼選擇一些例外加入到訓練集數據中,重複該過程一直到造成正確的決策集。決策樹表明着決策集的樹形結構。決策樹由決策結點、分支和葉子組成。決策樹中最上面 的結點爲根結點,每一個分支是一個新的決策結點,或者是樹的葉子。每一個決策結點表明一個問題或決策,一般 對應於待分類對象的屬性。每個葉子結點表明一種可能的分類結果。沿決策樹從上到下遍歷的過程當中,在每一個結點都會遇到一個測試,對每一個結點上問題的不一樣的 測試輸出致使不一樣的分支,最後會到達一個葉子結點,這個過程就是利用決策樹進行分類的過程,利用若干個變量來判斷所屬的類別。
Id3 即決策樹 ID3 算法
ID3 算法是由 Quinlan 首先提出的。該算法是以信息論爲基礎,以信息熵和信息增益度爲衡量標準,從而實現對數據的概括分類。
如下是一些信息論的基本概念:
定義 1:若存在 n 個相同機率的消息,則每一個消息的機率 p 是 1/n,一個消息傳遞的信息量爲 Log2(n)
定義 2:如有 n 個消息,其給定機率分佈爲 P=(p1,p2 … pn),則由該分佈傳遞的信息量稱爲 P 的熵,記爲
I (p) =-(i=1 to n 求和 ) piLog2(pi) 。
定義 3:若一個記錄集合 T 根據類別屬性的值被分紅互相獨立的類 C1C2..Ck,則識別 T 的一個元素所屬哪一個類所須要的信息量爲 Info (T) =I (p) ,其中 P 爲 C1C2 … Ck 的機率分佈,即 P= (|C1|/|T| … |Ck|/|T|)
定義 4:若咱們先根據非類別屬性 X 的值將 T 分紅集合 T1,T2 … Tn,則肯定 T 中一個元素類的信息量可經過肯定 Ti 的加權平均值來獲得,即 Info(Ti) 的加權平均值爲:
Info(X, T) = (i=1 to n 求和 ) ((|Ti|/|T |) Info (Ti))
定義 5:信息增益度是兩個信息量之間的差值,其中一個信息量是需肯定 T 的一個元素的信息量,另外一個信息量是在已獲得的屬性 X 的值後需肯定的 T 一個元素的信息量,信息增益度公式爲:
Gain(X, T) =Info (T)-Info(X, T)
J48 即決策樹 C4.5 算法
C4.5 算法一種分類決策樹算法 , 其核心算法是 ID3 算法。C4.5 算法繼承了 ID3 算法的優勢,並在如下幾方面對 ID3 算法進行了改進:
用信息增益率來選擇屬性,克服了用信息增益選擇屬性時偏向選擇取值多的屬性的不足;
在樹構造過程當中進行剪枝;
可以完成對連續屬性的離散化處理;
可以對不完整數據進行處理。
C4.5 算法有以下優勢:產生的分類規則易於理解,準確率較高。其缺點是:在構造樹的過程當中,須要對數據集進行屢次的順序掃描和排序,於是致使算法的低效。
Decision Table 即決策表
決策表 (Decision Table),是一中使用表的結構,精確而簡潔描述複雜邏輯的方式。
JRip 即 RIPPER 算法
規則概括學習從分類實例出發可以概括出通常的概念描述。其中重要的算法爲 IREP 算法和 RIPPER 算法。重複增量修枝(RIPPER)算法生成一條規則,隨機地將沒有覆蓋的實例分紅生長集合和修剪集合,規定規則集合中的每一個規則是有兩個規則來生成:替代規則和修訂規則。
AdaBoostM1 即 AdaBoosting 算法
Adaboost 是一種迭代算法,其核心思想是針對同一個訓練集訓練不一樣的分類器 ( 弱分類器 ) ,而後把這些弱分類器集合起來,構成一個更強的最終分類器 ( 強分類器 ) 。其算法自己是經過改變數據分佈來實現的,它根據每次訓練集之中每一個樣本的分類是否正確,以及上次的整體分類的準確率,來肯定每一個樣本的權值。將修改過權值的新數據集送給下層分類器進行訓練,最後將每次訓練獲得的分類器最後融合起來,做爲最後的決策分類器。
Bagging 即 Bagging 方法
Bootstrps bagging boosting 都屬於集成學習方法,將訓練的學習器集成在一塊兒。原理來源於 PAC 學習模型(Probably Approximately CorrectK)。其中的 Bagging 是 bootstrap aggregating 的縮寫,是最先的 Ensemble 算法之一,它也是最直接容易實現,又具備不錯的效果的算法之一。Bagging 中的多樣性是由有放回抽取訓練樣原本實現的,用這種方式隨機產生多個訓練數據的子集,在每個訓練集的子集上訓練一個同種分類器,最終分類結果是由多個分類器的分類結果多數投票而產生的。
Correlation coefficient (= CC) : 相關係數
Root mean squared error (= RMSE) : 均方根偏差
Root relative squared error (= RRSE) : 相對平方根偏差
Mean absolute error (= MAE) : 平均絕對偏差
Root absolute error (= RAE) : 平均絕對偏差平方根
Combined: (1-abs (CC)) + RRSE + RAE: 結合的
Accuracy (= ACC) : 正確率
注意,Correction coefficient 只適用於連續值類別,Accuracy 只適用於離散類別
Kappa statistic:這個指標用於評判分類器的分類結果與隨機分類的差別度。
絕對差值(Mean absolute error):這個指標用於評判預測值與實際值之間的差別度。把屢次測得值之間相互接近的程度稱爲精密度,精密度用誤差表示,誤差指測得值與平均值之間的差值,誤差越小,精密度則越高。
中偏差(Root mean square error:RMSE):帶權殘差平方和的平均數的平方根,做爲在必定條件下衡量測量精度的一種數值指標。中偏差是衡量觀測精度的一種數字標準,亦稱「標準差」或「均方根差」。在相同觀測條件下的一組真偏差平方中數的平方根。因真偏差不易求得 , 所 以一般用最小二乘法求得的觀測值改正數來代替真偏差。它是觀測值與真值誤差的平方和觀測次數 n 比值的平方根。中偏差不等於真偏差,它僅是一組真偏差的表明值。中偏差的大小反映了該組觀測值精度的高低,所以,一般稱中偏差爲觀測值的中偏差。
預測的準確率:這涉及到模型正確地預測新的或先前沒見過的數據的類 標號能力。
速度:涉及到產生和使用模型的計算花費。
強壯性:這涉及給定噪聲數據或具備空缺值的數據,模型正確預測的能力。
可伸縮性:這涉及給定大量的數據,有效的構造模型的能力。
可解釋性:這涉及學習模型提供的理解和洞察的層次。
如下主要採用兩種數據集(Monk's Problems 和 Satimage)來分別運行不一樣的分類算法,採用的是 Weka 數據挖掘工具。
1. 屬性所有爲 nominal 類型
2. 訓練樣本較少
3. 訓練集數據的可視化圖,該圖根據直方圖上方一欄所選擇的 class 屬性(attr6)來着色。
各分類器不作參數調整,使用默認參數進行獲得的結果。
Data Source | Category | Classifier | Correctly Classified | Mean absolute error | Root relative squared error | Time taken (Seconds) |
---|---|---|---|---|---|---|
Test Data | Bayes | BayesNet | 49.31% | 0.4987 | 0.5051 | 0 |
NaiveBayes | 49.77% | 0.4988 | 0.5049 | 0 | ||
Lazy | IB1 | 60.65% | 0.3935 | 0.6273 | 0 | |
IBk | 59.49% | 0.3867 | 0.5188 | 0 | ||
Trees | Id3 | 57.87% | 0.3787 | 0.597 | 0 | |
J48 | 59.72% | 0.4625 | 0.4988 | 0.02 | ||
Rules | Decision Table | 59.49% | 0.4622 | 0.5007 | 0.02 | |
JRip | 51.39% | 0.4987 | 0.5007 | 0.02 | ||
Meta | AdaBoostM1 | 50.00% | 0.4988 | 0.5048 | 0.08 | |
Bagging | 55.09% | 0.4898 | 0.5021 | 0.03 |
預測的準確率比較
採用基於懶惰學習的 IB一、IBk 的分類器的偏差率較低,採用基於機率統計的 BayesNet 分類器的偏差率較高,其餘的基於決策樹和基於規則的分類器偏差居於前二者之間,這是由於在樣本較少的狀況下,採用 IB1 時,生成的決策模型是在測試樣本到來之後才生成,這樣的學習模型可能更好的擬合局部的樣本特性。採用統計學分類方法的 BayesNet 之因此準確度較低,多是因爲貝葉斯定理的成立自己須要很強的獨立性假設前提,而此假設在實際狀況中常常是不成立的。可是通常地,統計分類算法趨於計算量大。
進一步比較分類結果的散點圖(其中正確分類的結果用叉表示,分錯的結果用方框表示),發現 BayesNet 分類器針對屬性 6(attr6)的預測結果分錯的結果明顯比 IB1 的分錯結果要多些,而這些錯誤的散點中,又以屬性 6 的取值爲 2 的散點中錯誤的數目較多。
分類速度比較
Adaboost 的分類花了 0.08 秒,Bagging 的分類花了 0.03 秒,相對於其餘的分類器,這兩個分類器速度較慢。這是由於這兩個算法採用迭代,針對同一個訓練集,訓練多種分類器,而後把這些分類器集合起來,因此時間消耗較長。
IBK 調優
【 KNN 】:6
擴大鄰近學習的節點範圍,下降異常點的干擾(距離較大的異常點)
【 DistanceWeighting 】:Weight by 1/distance
經過修改距離權重,進一步下降異常點的干擾(距離較大的異常點)
IBk 調優結果
調優後準確率從 60.65% 上升到 63.43%。
Data Source | Category | Classifier | Correctly Classified | Mean absolute error | Root relative squared error | Time taken (Seconds) |
---|---|---|---|---|---|---|
Test Data | Lazy | IBk | 63.43% | 0.373 | 0.4802 | 0 |
J48 調優
【 binarySplits 】:True
採用 2 分法,生成決策樹。
J48 調優結果
調優後準確率從 59.72% 上升到 64.35%,可是分類模型創建時間從 0 延長到了 0.31 秒
Data Source | Category | Classifier | Correctly Classified | Mean absolute error | Root relative squared error | Time taken (Seconds) |
---|---|---|---|---|---|---|
Test Data | Trees | J48 | 64.35% | 0.3908 | 0.4817 | 0.31 |
1. 屬性爲 numeric 類型 , 共 37 個屬性
2. 訓練數據各種不平衡,測試數據各種不平衡
各分類器不作參數調整,使用默認參數獲得的結果以下:
Data Source | Category | Classifier | Correctly Classified | Mean absolute error | Root relative squared error | Time taken (Seconds) |
---|---|---|---|---|---|---|
Test Data | Bayes | BayesNet | 82.74% | 0.0586 | 0.2366 | 0.44 |
NaiveBayes | 79.72% | 0.0681 | 0.2552 | 0.28 | ||
Lazy | IB1 | 90.36% | 0.0321 | 0.1793 | 0 | |
IBk | 90.36% | 0.0324 | 0.1792 | 0 | ||
Trees | Id3 | NA (Not nominal data) | NA | NA | NA | |
J48 | 86.47% | 0.0484 | 0.2033 | 2.06 | ||
Rules | Decision Table | 82.35% | 0.0718 | 0.215 | 4.33 | |
Jrip | NA (Not enough memory) | NA | NA | NA | ||
Meta | AdaBoostM1 | 43.08% | 0.2221 | 0.3345 | 0.09 | |
Bagging | 89.66% | 0.0559 | 0.1594 | 3.92 |
預測的準確率比較
採用基於懶惰學習的 IB一、IBk 的分類器的準確率都較高,爲 90.36%,採用 基於決策樁的 AdaBoostM 分類器的準確率較低,爲 43.08%,貝葉斯分類器的準確 率較以前的數據集(Monk ’ s problem)有明顯的提升,從 49% 到了 80% 左右,這主 要是由於樣本空間的擴大,其餘的分類器準確率也處於 80% 左右。
分類速度比較
DecisionTable 的分類花了 4.33 秒,Bagging 的分類花了 3.92 秒,J48 的分類模型創建花了 2.06 秒,相對於其餘的分類器,這三個分類器速度較慢。
IBK 調優
【 KNN 】:6
擴大鄰近學習的節點範圍,下降異常點的干擾(距離較大的異常點)
【 DistanceWeighting 】:Weight by 1/distance
經過修改距離權重,進一步下降異常點的干擾(距離較大的異常點)
IBK 調優結果
調優後準確率從 90.36% 上升到 90.98%, 準確度有略微提高,說明經過擴大鄰近學習的節點範圍不能明顯提升分類器的性能。
Data Source | Category | Classifier | Correctly Classified | Mean absolute error | Root relative squared error | Time taken (Seconds) |
---|---|---|---|---|---|---|
Test Data | Lazy | IBk | 90.98% | 0.0395 | 0.1478 | 0.02 |
J48 調優
【 binarySplits 】:True
採用 2 分法,生成決策樹。
J48 調優結果
分類性能沒有提高。說明採用 2 分法對分類沒有影響。相反,時間比原來的算法有略微延長。
Data Source | Category | Classifier | Correctly Classified | Mean absolute error | Root relative squared error | Time taken (Seconds) |
---|---|---|---|---|---|---|
Test Data | Trees | J48 | 86.47% | 0.0484 | 0.2033 | 2.23 |