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

貝葉斯定理(Bayes Theorem)node

formula

樸素貝葉斯分類(Naive Bayes Classifier)python

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

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

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

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

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

#構建語料庫,須要包含文本分類測試

#進行分詞spa

#文本向量化code

#構建多項式貝葉斯模型orm

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')

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

 

 

相關文章
相關標籤/搜索