首頁  >  文章  >  後端開發  >  詳細介紹如何在python中使用樸素貝葉斯演算法

詳細介紹如何在python中使用樸素貝葉斯演算法

Y2J
Y2J原創
2017-04-27 11:38:082248瀏覽

本文主要介紹了python中如何使用樸素貝葉斯演算法的相關知識。具有很好的參考價值。下面跟著小編一起來看下吧

這裡再重複一下標題為什麼是"使用"而不是"實現":

首先,專業人士提供的演算法比我們自己寫的演算法無論是效率還是正確率上都要高。

其次,對於數學不好的人來說,為了實現演算法而去研究一堆公式是很痛苦的事情。

再一次,除非他人提供的演算法滿足不了自己的需求,否則沒必要"重複造輪子"。

下面言歸正傳,不了解貝葉斯演算法的可以去查一下相關資料,這裡只是簡單介紹一下:

1.貝葉斯公式:

P(A|B)=P(AB)/P(B)

#2.貝葉斯推論:

#P(A|B)=P(A)×P(B|A)/P(B)

#用文字表達:

後驗機率=先驗機率×相似度/標準化常數

而貝葉斯演算法要解決的問題就是如何求出相似度,即:P(B|A )的值

3. 在scikit-learn套件中提供了三種常用的樸素貝葉斯演算法,以下依序說明:

1)高斯樸素貝葉斯:假設屬性/特徵是服從常態分佈的(如下圖),主要應用於數值型特徵。

 

使用scikit-learn套件中自帶的數據,程式碼及說明如下:

>>>from sklearn import datasets ##导入包中的数据
>>> iris=datasets.load_iris() ##加载数据
>>> iris.feature_names  ##显示特征名字
 ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
>>> iris.data   ##显示数据
 array([[ 5.1, 3.5, 1.4, 0.2],[ 4.9, 3. , 1.4, 0.2],[ 4.7, 3.2, 1.3, 0.2]............
>>> iris.data.size  ##数据大小 ---600个
>>> iris.target_names  ##显示分类的名字 
 array([&#39;setosa&#39;, &#39;versicolor&#39;, &#39;virginica&#39;], dtype=&#39;<U10&#39;)
>>> from sklearn.naive_bayes import GaussianNB ##导入高斯朴素贝叶斯算法
>>> clf = GaussianNB()    ##给算法赋一个变量,主要是为了方便使用
>>> clf.fit(iris.data, iris.target)  ##开始分类。对于量特别大的样本,可以使用函数partial_fit分类,避免一次加载过多数据到内存

>>> clf.predict(iris.data[0].reshape(1,-1)) ##验证分类。标红部分特别说明:因为predict的参数是数组,data[0]是列表,所以需要转换一下
array([0])
>>> data=np.array([6,4,6,2])   ##验证分类
>>> clf.predict(data.reshape(1,-1))
array([2])

這裡牽涉到一個問題:如何判斷資料符合常態分佈? R語言裡面有相關函數判斷,或直接繪圖也可以看出來,但是都是P(x,y)這種可以在座標系裡面直接

畫出來的情況,而範例中的資料如何確定,目前還沒搞明白,這部分後續會補上。

2)多項式分佈樸素貝葉斯:常用於文字分類,特徵是單詞,數值是單字出現的次數。

##示例来在官方文档,详细说明见第一个例子
>>> import numpy as np
>>> X = np.random.randint(5, size=(6, 100)) ##返回随机整数值:范围[0,5) 大小6*100 6行100列
>>> y = np.array([1, 2, 3, 4, 5, 6])
>>> from sklearn.naive_bayes import MultinomialNB
>>> clf = MultinomialNB()
>>> clf.fit(X, y)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True) 
>>> print(clf.predict(X[2]))
[3]

3)伯努力樸素貝葉斯:每個特徵都是布林型,得到的結果是0或1,即出現沒出現

##示例来在官方文档,详细说明见第一个例子
>>> import numpy as np
>>> X = np.random.randint(2, size=(6, 100))
>>> Y = np.array([1, 2, 3, 4, 4, 5])
>>> from sklearn.naive_bayes import BernoulliNB
>>> clf = BernoulliNB()
>>> clf.fit(X, Y)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True) 
>>> print(clf.predict(X[2]))
[3]

補充說明:此文還不完善,範例一中也有部分說明需要寫,最近事情較多,後續會逐漸完善。

以上是詳細介紹如何在python中使用樸素貝葉斯演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn