日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

温州大学《机器学习》课程代码(四)朴素贝叶斯

發布時間:2025/3/12 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 温州大学《机器学习》课程代码(四)朴素贝叶斯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

機器學習練習4 樸素貝葉斯

代碼修改并注釋:黃海廣,haiguang2000@wzu.edu.cn

代碼下載:

https://github.com/fengdu78/WZU-machine-learning-course

1.樸素貝葉斯法是典型的生成學習方法。生成方法由訓練數據學習聯合概率分布,然后求得后驗概率分布。具體來說,利用訓練數據學習和的估計,得到聯合概率分布:

概率估計方法可以是極大似然估計或貝葉斯估計。

2.樸素貝葉斯法的基本假設是條件獨立性,

這是一個較強的假設。由于這一假設,模型包含的條件概率的數量大為減少,樸素貝葉斯法的學習與預測大為簡化。因而樸素貝葉斯法高效,且易于實現。其缺點是分類的性能不一定很高。

3.樸素貝葉斯法利用貝葉斯定理與學到的聯合概率模型進行分類預測。

將輸入分到后驗概率最大的類。

后驗概率最大等價于0-1損失函數時的期望風險最小化。

模型:

  • 高斯模型

  • 多項式模型

  • 伯努利模型

import?numpy?as?np import?pandas?as?pd from?sklearn.datasets?import?load_iris from?sklearn.model_selection?import?train_test_split from?collections?import?Counter import?math #?data def?create_data():iris?=?load_iris()df?=?pd.DataFrame(iris.data,?columns=iris.feature_names)df['label']?=?iris.targetdf.columns?=?['sepal?length',?'sepal?width',?'petal?length',?'petal?width',?'label']data?=?np.array(df.iloc[:100,?:])#?print(data)return?data[:,?:-1],?data[:,?-1] X,?y?=?create_data() X_train,?X_test,?y_train,?y_test?=?train_test_split(X,?y,?test_size=0.3) X_test[0],?y_test[0] (array([5.1, 3.8, 1.9, 0.4]), 0.0)

參考: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.0 model.score(X_test,?y_test) 1.0

scikit-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.0 clf.predict([[4.4,??3.2,??1.3,??0.2]]) array([0.])

參考

  • Prof. Andrew Ng. Machine Learning. Stanford University

  • 李航,《統計學習方法》,清華大學出版社

總結

以上是生活随笔為你收集整理的温州大学《机器学习》课程代码(四)朴素贝叶斯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。