這裡再重複一下標題為什麼是"使用"而不是"實現":
首先,專業人士提供的演算法比我們自己寫的演算法無論是效率還是正確率上都要高。
其次,對於數學不好的人來說,為了實現演算法而去研究一堆公式是很痛苦的事。
再次,除非他人提供的演算法滿足不了自己的需求,否則沒必要"重複造輪子"。
下面言歸正傳,不了解貝葉斯演算法的可以去檢查相關資料,這裡只是簡單介紹一下:
1.貝葉斯公式:
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(['setosa', 'versicolor', 'virginica'], dtype='<U10') >>> 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])
繪圖
也可以看出來,但是都是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]
##示例来在官方文档,详细说明见第一个例子 >>> 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中文網其他相關文章!