python中如何使用樸素貝葉斯算法
這里再重復(fù)一下標(biāo)題為什么是"使用"而不是"實(shí)現(xiàn)":
首先,專業(yè)人士提供的算法比我們自己寫的算法無(wú)論是效率還是正確率上都要高。
其次,對(duì)于數(shù)學(xué)不好的人來(lái)說,為了實(shí)現(xiàn)算法而去研究一堆公式是很痛苦的事情。
再次,除非他人提供的算法滿足不了自己的需求,否則沒必要"重復(fù)造輪子"。
下面言歸正傳,不了解貝葉斯算法的可以去查一下相關(guān)資料,這里只是簡(jiǎn)單介紹一下:
1.貝葉斯公式:
P(A|B)=P(AB)/P(B)
2.貝葉斯推斷:
P(A|B)=P(A)×P(B|A)/P(B)
用文字表述:
后驗(yàn)概率=先驗(yàn)概率×相似度/標(biāo)準(zhǔn)化常量
而貝葉斯算法要解決的問題就是如何求出相似度,即:P(B|A)的值
3. 在scikit-learn包中提供了三種常用的樸素貝葉斯算法,下面依次說明:
1)高斯樸素貝葉斯:假設(shè)屬性/特征是服從正態(tài)分布的(如下圖),主要應(yīng)用于數(shù)值型特征。
使用scikit-learn包中自帶的數(shù)據(jù),代碼及說明如下:
>>>from sklearn import datasets ##導(dǎo)入包中的數(shù)據(jù) >>> iris=datasets.load_iris() ##加載數(shù)據(jù) >>> iris.feature_names ##顯示特征名字 ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)'] >>> iris.data ##顯示數(shù)據(jù) 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 ##數(shù)據(jù)大小 ---600個(gè) >>> iris.target_names ##顯示分類的名字 array(['setosa', 'versicolor', 'virginica'], dtype='<U10') >>> from sklearn.naive_bayes import GaussianNB ##導(dǎo)入高斯樸素貝葉斯算法 >>> clf = GaussianNB() ##給算法賦一個(gè)變量,主要是為了方便使用 >>> clf.fit(iris.data, iris.target) ##開始分類。對(duì)于量特別大的樣本,可以使用函數(shù)partial_fit分類,避免一次加載過多數(shù)據(jù)到內(nèi)存 >>> clf.predict(iris.data[0].reshape(1,-1)) ##驗(yàn)證分類。標(biāo)紅部分特別說明:因?yàn)閜redict的參數(shù)是數(shù)組,data[0]是列表,所以需要轉(zhuǎn)換一下 array([0]) >>> data=np.array([6,4,6,2]) ##驗(yàn)證分類 >>> clf.predict(data.reshape(1,-1)) array([2])
這里涉及到一個(gè)問題:如何判斷數(shù)據(jù)符合正態(tài)分布? R語(yǔ)言里面有相關(guān)函數(shù)判斷,或者直接繪圖也可以看出來(lái),但是都是P(x,y)這種可以在坐標(biāo)系里面直接
畫出來(lái)的情況,而例子中的數(shù)據(jù)如何確定,目前還沒有搞明白,這部分后續(xù)會(huì)補(bǔ)上。
2)多項(xiàng)式分布樸素貝葉斯:常用于文本分類,特征是單詞,值是單詞出現(xiàn)的次數(shù)。
##示例來(lái)在官方文檔,詳細(xì)說明見第一個(gè)例子 >>> import numpy as np >>> X = np.random.randint(5, size=(6, 100)) ##返回隨機(jī)整數(shù)值:范圍[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)伯努力樸素貝葉斯:每個(gè)特征都是是布爾型,得出的結(jié)果是0或1,即出現(xiàn)沒出現(xiàn)
##示例來(lái)在官方文檔,詳細(xì)說明見第一個(gè)例子 >>> 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]
補(bǔ)充說明:此文還不完善,示例一中也有部分說明需要寫,最近事情較多,后續(xù)會(huì)逐漸完善。
以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持腳本之家!
相關(guān)文章
python 實(shí)用工具狀態(tài)機(jī)transitions
這篇文章主要介紹了python 實(shí)用工具狀態(tài)機(jī)transitions的使用,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-11-11Django實(shí)現(xiàn)帶進(jìn)度條的倒計(jì)時(shí)功能詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Django實(shí)現(xiàn)簡(jiǎn)單的帶進(jìn)度條的倒計(jì)時(shí)功能,可以在頁(yè)面加載后自動(dòng)開始計(jì)時(shí),下次計(jì)時(shí)需要手動(dòng)刷新頁(yè)面,需要的可以參考一下2023-04-04Python中Word文件自動(dòng)化操作小結(jié)
Python-docx是一個(gè)Python庫(kù),提供了對(duì)Microsoft?Word(.docx文件)的讀寫和修改功能,本文主要介紹了如何使用Python-docx實(shí)現(xiàn)Word文件自動(dòng)化操作,需要的可以參考下2024-04-04python try...finally...的實(shí)現(xiàn)方法
這篇文章主要介紹了python try...finally...的實(shí)現(xiàn)方法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-11-11Python HTTP客戶端自定義Cookie實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了Python HTTP客戶端自定義Cookie實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04講解Python中運(yùn)算符使用時(shí)的優(yōu)先級(jí)
這篇文章主要介紹了講解Python中運(yùn)算符使用時(shí)的優(yōu)先級(jí),是Python學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05