數據挖掘——分類算法——貝葉斯分類、決策樹


貝葉斯定理(Bayes Theorem)

formula

朴素貝葉斯分類(Naive Bayes Classifier)

  貝葉斯分類算法(NB),是統計學的一種分類方法,它是利用貝葉斯定理的概率統計知識,對離散型數據進行分類的算法。

 朴素貝葉斯的思想基礎是這樣的:對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認為此待分類項屬於哪個類別

tips:python中sklearn包的naive_bayes模塊中,由三種貝葉斯算法類型:

  • GaussuanNB   高斯貝葉斯 :適用於特征值符合正態分布的數據,不需要知道具體每個樣本的數值,只需知道樣本符合什么樣的正態分布(均值、方差)即可計算;
  • BernoulliNB  伯努利貝葉斯:適用於特征值符合伯努利分布的數據,即是/否,0/1;
  • MultinomialNB  多項式貝葉斯:不知道特征值符合哪種分布的時候,使用多項式貝葉斯算法計算每個特征的概率,所以需要知道每個特征值的數值大小(最常用於文本分類)。

使用多項式貝葉斯進行分本分類的實現:

#構建語料庫,需要包含文本分類

#進行分詞

#文本向量化

#構建多項式貝葉斯模型

from sklearn.naive_bayes import MultinomialNB
#多項式貝葉斯分類模型建立
MNBmodle = MultinomialNB()
#將文本向量作為特征值傳入,將分類序列作為目標序列傳入
MNBmodle.fit(textVector,corpos['class'])
MNBmodle.score(textVector,corpos['class'])

tips:多項式貝葉斯非常適用於文本分類

#針對新文本進行分類(需要進行分詞和向量化操作),得到分類預測

MNBmodle.predict(newTextVector)

 

決策樹(Decision Tree)

  決策樹通過對訓練樣本的學習,並建立分類規則,然后依據分類規則,對新樣本數據進行分類預測,屬於有監督學習

  決策樹是在已知各種情況發生概率的基礎上,通過構成決策樹來求取凈現值的期望值大於等於零的概率,評價項目風險,判斷其可行性的決策分析方法,是直觀運用概率分析的一種圖解法。

  由於這種決策分支畫成圖形很像一棵樹的枝干,故稱決策樹。

  在機器學習中,決策樹是一個預測模型,他代表的是對象屬性與對象值之間的一種映射關系。

  決策樹是一種樹形結構,其中每個內部節點表示一個屬性上的測試,每個分支代表一個測試輸出,每個葉節點代表一種類別。

優點:

  決策樹易於理解和實現

   決策樹可同時處理數值型和非數值型數據

缺點:

  對連續性的字段較難預測

  對有時間順序的數據,需要很多的預處理工作

  當類別較多時,錯誤可能增加的比較快  

 

python實現決策樹模型的構建

重點代碼:

dtmodel = DecisionTreeClassifier(max_leaf_nodes=None)   #最大葉子節點數

dtModel.fit(featureData, targetData)  #特征數據、目標數據

#對離散型變量進行虛擬化

#設置特征變量、目標變量

#構建決策樹模型

 

from sklearn.tree import DecisionTreeClassifier
dtmodel = DecisionTreeClassifier(max_leaf_nodes=8) #最大葉數為8
#模型驗證
from sklearn.model_selection import cross_val_score
cross_val_score(dtmodel,fdata,tdata,cv=10)  #交叉驗證10次
#模型訓練
dtmodel.fit(fdata,tdata)

 

#繪制決策樹模型  (需要下載安裝graphviz軟件 並 安裝pydot包,可參考http://wenda.chinahadoop.cn/question/5518

#繪制決策樹圖形
from sklearn.tree import export_graphviz
with open(r'D:\...\data.dot','w') as f:
    f = export_graphviz(dtmodel, out_file=f)

import pydot
from sklearn.externals.six import StringIO

dot_data = StringIO()
export_graphviz(
        dtmodel, #模型名稱
        out_file=dot_data,  #圖形數據的輸出路徑
        class_names=['A','B'],  #目標屬性的名稱
        feature_names=['a','b','c','d'],  #特征屬性的名稱
        filled=True, #是否使用顏色填充
        rounded=True, #邊框是否圓角
        special_characters=True) #是否有特殊字符(含中文就算)

graph = pydot.graph_from_dot_data(dot_data.getvalue())

graph.get_node('node')[0].set_fontname('Microsoft YaHei')

graph.write_png(r'D:\...\決策樹.png')

#最終在目標路徑下得到決策樹的圖形

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM