貝葉斯定理(Bayes Theorem)
朴素貝葉斯分類(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')
#最終在目標路徑下得到決策樹的圖形