复现经典:《统计学习方法》第 4 章 朴素贝叶斯
本文是李航老師的《統(tǒng)計學習方法》[1]一書的代碼復現(xiàn)。
作者:黃海廣[2]
備注:代碼都可以在github[3]中下載。
我將陸續(xù)將代碼發(fā)布在公眾號“機器學習初學者”,敬請關注。
代碼目錄
第 1 章 統(tǒng)計學習方法概論
第 2 章 感知機
第 3 章 k 近鄰法
第 4 章 樸素貝葉斯
第 5 章 決策樹
第 6 章 邏輯斯諦回歸
第 7 章 支持向量機
第 8 章 提升方法
第 9 章 EM 算法及其推廣
第 10 章 隱馬爾可夫模型
第 11 章 條件隨機場
第 12 章 監(jiān)督學習方法總結(jié)
代碼參考:wzyonggege[4],WenDesi[5],火燙火燙的[6]
第 4 章 樸素貝葉斯
1.樸素貝葉斯法是典型的生成學習方法。生成方法由訓練數(shù)據(jù)學習聯(lián)合概率分布?,然后求得后驗概率分布。具體來說,利用訓練數(shù)據(jù)學習和的估計,得到聯(lián)合概率分布:
=
概率估計方法可以是極大似然估計或貝葉斯估計。
2.樸素貝葉斯法的基本假設是條件獨立性,
這是一個較強的假設。由于這一假設,模型包含的條件概率的數(shù)量大為減少,樸素貝葉斯法的學習與預測大為簡化。因而樸素貝葉斯法高效,且易于實現(xiàn)。其缺點是分類的性能不一定很高。
3.樸素貝葉斯法利用貝葉斯定理與學到的聯(lián)合概率模型進行分類預測。
將輸入分到后驗概率最大的類。
后驗概率最大等價于 0-1 損失函數(shù)時的期望風險最小化。
模型:
高斯模型
多項式模型
伯努利模型
參考:https://machinelearningmastery.com/naive-bayes-classifier-scratch-python/
GaussianNB 高斯樸素貝葉斯
特征的可能性被假設為高斯
概率密度函數(shù):
數(shù)學期望(mean):
方差:
class NaiveBayes:def __init__(self):self.model = None# 數(shù)學期望@staticmethoddef mean(X):return sum(X) / float(len(X))# 標準差(方差)def stdev(self, X):avg = self.mean(X)return math.sqrt(sum([pow(x - avg, 2) for x in X]) / float(len(X)))# 概率密度函數(shù)def gaussian_probability(self, x, mean, stdev):exponent = math.exp(-(math.pow(x - mean, 2) /(2 * math.pow(stdev, 2))))return (1 / (math.sqrt(2 * math.pi) * stdev)) * exponent# 處理X_traindef summarize(self, train_data):summaries = [(self.mean(i), self.stdev(i)) for i in zip(*train_data)]return summaries# 分類別求出數(shù)學期望和標準差def fit(self, X, y):labels = list(set(y))data = {label: [] for label in labels}for f, label in zip(X, y):data[label].append(f)self.model = {label: self.summarize(value)for label, value in data.items()}return 'gaussianNB train done!'# 計算概率def calculate_probabilities(self, input_data):# summaries:{0.0: [(5.0, 0.37),(3.42, 0.40)], 1.0: [(5.8, 0.449),(2.7, 0.27)]}# input_data:[1.1, 2.2]probabilities = {}for label, value in self.model.items():probabilities[label] = 1for i in range(len(value)):mean, stdev = value[i]probabilities[label] *= self.gaussian_probability(input_data[i], mean, stdev)return probabilities# 類別def predict(self, X_test):# {0.0: 2.9680340789325763e-27, 1.0: 3.5749783019849535e-26}label = sorted(self.calculate_probabilities(X_test).items(),key=lambda x: x[-1])[-1][0]return labeldef score(self, X_test, y_test):right = 0for X, y in zip(X_test, y_test):label = self.predict(X)if label == y:right += 1return right / float(len(X_test)) model = NaiveBayes() model.fit(X_train, y_train) 'gaussianNB train done!' print(model.predict([4.4, 3.2, 1.3, 0.2])) 0.0 model.score(X_test, y_test) 1.0scikit-learn 實例
from sklearn.naive_bayes import GaussianNB clf = GaussianNB() clf.fit(X_train, y_train) GaussianNB(priors=None, var_smoothing=1e-09) clf.score(X_test, y_test) 1.0 clf.predict([[4.4, 3.2, 1.3, 0.2]]) array([0.])參考資料
[1] 《統(tǒng)計學習方法》:?https://baike.baidu.com/item/統(tǒng)計學習方法/10430179
[2] 黃海廣:?https://github.com/fengdu78
[3] github:?https://github.com/fengdu78/lihang-code
[4] wzyonggege:?https://github.com/wzyonggege/statistical-learning-method
[5] WenDesi:?https://github.com/WenDesi/lihang_book_algorithm
[6] 火燙火燙的:?https://blog.csdn.net/tudaodiaozhale
關于本站
“機器學習初學者”公眾號由是黃海廣博士創(chuàng)建,黃博個人知乎粉絲23000+,github排名全球前100名(33000+)。本公眾號致力于人工智能方向的科普性文章,為初學者提供學習路線和基礎資料。原創(chuàng)作品有:吳恩達機器學習個人筆記、吳恩達深度學習筆記等。
往期精彩回顧
那些年做的學術(shù)公益-你不是一個人在戰(zhàn)斗
適合初學者入門人工智能的路線及資料下載
吳恩達機器學習課程筆記及資源(github標星12000+,提供百度云鏡像)
吳恩達深度學習筆記及視頻等資源(github標星8500+,提供百度云鏡像)
《統(tǒng)計學習方法》的python代碼實現(xiàn)(github標星7200+)
機器學習的數(shù)學精華(在線閱讀版)
備注:加入本站微信群或者qq群,請回復“加群”
總結(jié)
以上是生活随笔為你收集整理的复现经典:《统计学习方法》第 4 章 朴素贝叶斯的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 复现经典:《统计学习方法》第1章 统计学
- 下一篇: 复现经典:《统计学习方法》第 12 章