朴素貝葉斯算法python實現


朴素貝葉斯是一種十分簡單的分類算法,稱其朴素是因為其思想基礎的簡單性,就文本分類而言,他認為詞袋中的兩兩詞之間的關系是相互獨立的,即一個對象的特征向量中的每個維度都是互相獨立的。這是朴素貝葉斯理論的思想基礎。

朴素貝葉斯分類的正式定義:

  1. 設x={}為一個待分類項,而每個a為x的一個特征屬性
  2. 有類別集合C={}
  3. 計算P(|x),P(|x),…,P(|x)
  4. 如果P(|x)=max{ P(|x),P(|x),…,P(|x)},則x

那么關鍵就是如何計算第三步中的各個條件概率,我們可以這樣計算:

  1. 找到一個已知分類的待分類項集合,即訓練集
  2. 統計得到在各類別下各個特征屬性的條件概率估計,即:

P(),P(),…,P()

P(),P(),…,P()

P(),P(),…,P()

  1. 如果各個特征屬性是條件獨立的(或者假設他們之間是相互獨立的),根據貝葉斯定理,有如下推導:

 

因為分母對於所有類別為常數,只要將分子最大化即可,又因為各特征屬性是條件獨立的,所以有:

 

根據上述分析,朴素貝葉斯分類的流程可以表示如下:

  1. 訓練數據生成樣本集:TF-IDF
  2. 對每個類別計算P()
  3. 對每個特征屬性計算所有划分的條件概率
  4. 對每個類別計算P(x|)P()
  5. 以P(x|)P()的最大項作為x的所屬類別

朴素貝葉斯的算法實現

首先創建一個Nbayes_pre.py文件來編寫導入的數據和朴素貝葉斯類的代碼

#高斯朴素貝耶斯
import numpy as np
from sklearn.model_selection import train_test_split
import pandas as pd
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import BernoulliNB #伯努利分布
from sklearn.naive_bayes import MultinomialNB
from sklearn.neighbors import KNeighborsClassifier
'''''

clf = GaussianNB().fit(X, Y)
clf_pf = GaussianNB().partial_fit(X, Y, np.unique(Y))
##伯努利分布
clf = BernoulliNB()
clf.fit(train_data, train_target)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)

#多項式分布
from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB().fit(x_train, y_train)
'''
def getdatafromcsv():
data=pd.read_csv('iris .csv')
cols=['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width']
train_target=data['Species']
train_data=data[cols]
return train_data,train_target
"""
#第一個為身高,第二個值為體重(kg),第三個為性別,1為男,2為女
x_train = [[160, 60, 1], [155, 80, 1], [178, 53, 2], [158, 53, 2], [166, 45, 2], [170, 50, 2], [156, 56, 2],
[166, 50, 1], [175, 55, 1], [188, 68, 1], [159, 41, 2], [166, 70, 1], [175, 85, 1], [188, 98, 1],
[159, 61, 2]]
#1為胖,0為瘦

y_train = [1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1]
x_test = [[166, 45, 2], [172, 52, 1], [156, 60, 1], [150, 70, 2],[166,60,1]]
"""
train_data,train_target=getdatafromcsv()
x_train,x_test,y_train,y_test=train_test_split(train_data,train_target,test_size=0.1)


def predcitbyts(train_data,train_target,test_data):
clf = GaussianNB().fit(train_data,train_target)
predict=clf.predict(test_data)
print("高斯貝耶斯結果:",predict)
clf_pf = GaussianNB().partial_fit(train_data, train_target, np.unique(train_target))
predict1=clf_pf.predict(test_data)
print("高斯貝耶斯結果partial_fit:",predict1)

def predictknn(train_data,train_target,test_data):
knn = KNeighborsClassifier()
knn.fit(train_data, train_target)
iris_y_predict = knn.predict(test_data)
print("KNN結果:",iris_y_predict)

def Bernoulli(train_data,train_target,test_data):
clf = BernoulliNB()
clf.fit(train_data, train_target)
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
predict=clf.predict(test_data)
print(predict)

#多項式
def Multinomial(train_data,train_target,test_data):
clf = MultinomialNB().fit(x_train, y_train)
predict=clf.predict(test_data)
print(predict)

Multinomial(x_train,y_train,x_test)
print(y_test)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM