1. 程式人生 > >資料探勘常用演算法優缺點分析

資料探勘常用演算法優缺點分析

   需要大量的記憶體;

五  決策樹

  可以處理特徵間的互動關係並且是非引數化的,因此不必擔心異常值或者資料是否線性可分(舉個例子,決策樹能輕鬆處理好類別A在某個特徵維度x的末端,類別B在中間,然後類別A又出現在特徵維度x前端的情況)。它的缺點之一就是不支援線上學習,於是在新樣本到來後,決策樹需要全部重建。另一個缺點就是容易出現過擬合,但這也就是諸如隨機森林RF(或提升樹boostedtree)之類的整合方法的切入點。另外,隨機森林經常在很多分類問題上表現很好(通常比支援向量機好一些),它訓練快速並且可調,同時無須擔心要像支援向量機那樣調一大堆引數,所以在以前一直很受歡迎。

  決策樹中很重要的一點就是選擇一個屬性進行分枝,因此要注意一下資訊增益的計算公式,並深入理解它。

  資訊熵的計算公式如下:

  其中的n代表有n個分類類別(比如假設是2類問題,那麼n=2)。分別計算這2類樣本在總樣本中出現的概率p1和p2,這樣就可以計算出未選中屬性分枝前的資訊熵。

  現在選中一個屬性xi用來進行分枝,此時分枝規則是:如果xi=vxi=v的話,將樣本分到樹的一個分支;如果不相等則進入另一個分支。很顯然,分支中的樣本很有可能包括2個類別,分別計算這2個分支的熵H1和H2,計算出分枝後的總資訊熵H’=p1H1+p2H2,則此時的資訊增益ΔH=H–H’。以資訊增益為原則,把所有的屬性都測試一邊,選擇一個使增益最大的屬性作為本次分枝屬性。

  優點:

   計算簡單,易於理解,可解釋性強;

   比較適合處理有缺失屬性的樣本;

   能夠處理不相關的特徵;

   在相對短的時間內能夠對大型資料來源做出可行且效果良好的結果。

  缺點:

  容易發生過擬合(隨機森林可以很大程度上減少過擬合);

   忽略了資料之間的相關性;

  對於那些各類別樣本數量不一致的資料,在決策樹當中,資訊增益的結果偏向於那些具有更多數值的特徵(只要是使用了資訊增                益,都有這個缺點,如RF)。

       Adaboosting

  Adaboost是一種加和模型,每個模型都是基於上一次模型的錯誤率來建立的,過分關注分錯的樣本,而對正確分類的樣本減少關注度,逐次迭代之後,可以得到一個相對較好的模型。Adaboost是一種典型的boosting演算法。

  優點:

   adaboost是一種有很高精度的分類器。

  可以使用各種方法構建子分類器,Adaboost演算法提供的是框架。

  當使用簡單分類器時,計算出的結果是可以理解的,並且弱分類器的構造極其簡單。

  簡單,不用做特徵篩選。

  不容易發生overfitting。

  缺點:

        對outlier比較敏感

六  SVM支援向量機

  高準確率,為避免過擬合提供了很好的理論保證,而且就算資料在原特徵空間線性不可分,只要給個合適的核函式,它就能執行得很好。在動輒超高維的文字分類問題中特別受歡迎。可惜記憶體消耗大,難以解釋,執行和調參也有些煩人,而隨機森林卻剛好避開了這些缺點,比較實用。

  優點:

  可以解決高維問題,即大型特徵空間;

  能夠處理非線性特徵的相互作用;

     無需依賴整個資料;

  可以提高泛化能力;

        缺點:

  當觀測樣本很多時,效率並不是很高;

     對非線性問題沒有通用解決方案,有時候很難找到一個合適的核函式;

     對缺失資料敏感;

  對於核的選擇也是有技巧的(libsvm中自帶了四種核函式:線性核、多項式核、RBF以及sigmoid核):

   第一,如果樣本數量小於特徵數,那麼就沒必要選擇非線性核,簡單的使用線性核就可以了;

  第二,如果樣本數量大於特徵數目,這時可以使用非線性核,將樣本對映到更高維度,一般可以得到更好的結果;

  第三,如果樣本數目和特徵數目相等,該情況可以使用非線性核,原理和第二種一樣。

       對於第一種情況,也可以先對資料進行降維,然後使用非線性核,這也是一種方法。


七  人工神經網路

  優點:

   分類的準確度高;

   並行分佈處理能力強,分佈儲存及學習能力強,

   對噪聲神經有較強的魯棒性和容錯能力,能充分逼近複雜的非線性關係;

   具備聯想記憶的功能。

  缺點:

  神經網路需要大量的引數,如網路拓撲結構、權值和閾值的初始值;

  不能觀察之間的學習過程,輸出結果難以解釋,會影響到結果的可信度和可接受程度;

  學習時間過長,甚至可能達不到學習的目的。

八  K-Means聚類

  優點:

  演算法簡單,容易實現;

  對處理大資料集,該演算法是相對可伸縮的和高效率的,因為它的複雜度大約是O(nkt),其中n是所有物件的數目,k是簇的數目,t                 是迭代的次數。通常k<<n。這個演算法通常區域性收斂。

  演算法嘗試找出使平方誤差函式值最小的k個劃分。當簇是密集的、球狀或團狀的,且簇與簇之間區別明顯時,聚類效果較好。

  缺點:

  對資料型別要求較高,適合數值型資料;

     可能收斂到區域性最小值,在大規模資料上收斂較慢

  K值比較難以選取;

  對初值的簇心值敏感,對於不同的初始值,可能會導致不同的聚類結果;

   不適合於發現非凸面形狀的簇,或者大小差別很大的簇。

  對於”噪聲”和孤立點資料敏感,少量的該類資料能夠對平均值產生極大影響。