【机器学习】朴素贝叶斯代码练习
本課程是中國大學慕課《機器學習》的“樸素貝葉斯”章節的課后代碼。
課程地址:
https://www.icourse163.org/course/WZU-1464096179
課程完整代碼:
https://github.com/fengdu78/WZU-machine-learning-course
代碼修改并注釋:黃海廣,haiguang2000@wzu.edu.cn
1.樸素貝葉斯法是典型的生成學習方法。生成方法由訓練數據學習聯合概率分布,然后求得后驗概率分布。具體來說,利用訓練數據學習和的估計,得到聯合概率分布:
=
概率估計方法可以是極大似然估計或貝葉斯估計。
2.樸素貝葉斯法的基本假設是條件獨立性,
這是一個較強的假設。由于這一假設,模型包含的條件概率的數量大為減少,樸素貝葉斯法的學習與預測大為簡化。因而樸素貝葉斯法高效,且易于實現。其缺點是分類的性能不一定很高。
3.樸素貝葉斯法利用貝葉斯定理與學到的聯合概率模型進行分類預測。
將輸入分到后驗概率最大的類。
后驗概率最大等價于0-1損失函數時的期望風險最小化。
模型:
- 高斯模型 
- 多項式模型 
- 伯努利模型 
參考:https://machinelearningmastery.com/naive-bayes-classifier-scratch-python/
GaussianNB 高斯樸素貝葉斯
特征的可能性被假設為高斯
概率密度函數:
數學期望(mean):
方差:
class?NaiveBayes:def?__init__(self):self.model?=?None#?數學期望@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)))#?概率密度函數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#?分類別求出數學期望和標準差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.0model.score(X_test,?y_test)1.0scikit-learn實例
from?sklearn.naive_bayes?import?GaussianNB,?BernoulliNB,?MultinomialNB #?高斯模型、伯努利模型和多項式模型clf?=?GaussianNB() clf.fit(X_train,?y_train)GaussianNB(priors=None, var_smoothing=1e-09)clf.score(X_test,?y_test)1.0clf.predict([[4.4,??3.2,??1.3,??0.2]])array([0.])參考
- Prof. Andrew Ng. Machine Learning. Stanford University 
- 李航,《統計學習方法》,清華大學出版社 
本站qq群955171419,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【机器学习】朴素贝叶斯代码练习的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: PP视频如何关闭下载完成通知我
- 下一篇: 【深度学习】图像去噪:一种基于流的图像去
