python實現貝葉斯

2021-10-02 04:46:15 字數 2414 閱讀 2866

#貝葉斯演算法的實現 2020.1.14

import numpy

class

bayes

:def

__init__

(self)

: self.lenght =-1

self.labels_count =

dict()

# self.vector_count =

dict()

#def

fit(self,dataset:

list

,labels:

list):

if(len(dataset)

!=len

(labels)):

raise valueerror(

"輸入的測試陣列和類別陣列長度不一致"

) self.lenght = dataset[0]

#測試資料特徵值的長度

labels_num =

len(labels)

#總的類別的個數

differ_label =

set(labels)

#類別中不同類別的數量

for item in differ_label:

#對不同的類別建立比率,即字典,

this_label = item

self.label_count[this_label]

= labels.count(this_label)

/labels_num #當前類別在在總的類別**現的次數與總的類別的比率

#迴圈結束後,此時的label_count中存放的是每個類別的在總的類別**現的次數佔總類別的個數的比例

for vector,label in

zip(dataset,labels)

:#序列解包

if(label not

in self.vector_count)

:#如果當前類別未在字典vector_count中,

self.vector_count[label]=[

]#把當前類別加進去

self.vector_count[label]

#在把當前類別的「所有」的特徵向量存進字典中,是所有的

print

("訓練結束!"

)return self

defbayes_test

(self,test_data,labels_set):if

(self.lenght ==1)

:raise valueerror(

"未開始訓練!"

)#計算testdata分別為各個類別的概率

lbdict =

dict()

for thislb in labels_set:

#依次遍歷各個類別

p =1 all_label = self.labels_count[thislb]

#把當前類別佔總類別的比例取出

all_vector = self.vector_count[thislb]

#在把當前類別的所有的特徵向量取出,此時all_vector為[[特徵向量],[特徵向量],...[特徵向量]]

v_num =

len(all_vector)

#求出一共有多少個特徵向量

all_vector = numpy.array(all_vector)

.t #對當前的list做乙個轉置

for index in

range(0

,len

(test_data)):

#遍歷測試機中的每個測試資料

vector =

list

(all_vector[index]

)#此時的all_vector為乙個二維陣列,all_vector[index]表示的是所有特徵向量的第index個特徵

#在將這些特徵弄成乙個特徵列表vector

p*=vector.count(test_data[index]

)/v_num #test_data[index]表示test_data的第index個特徵,然後該特徵在特徵列表**現的比例在乘上p

lbdict[thislb]

=p*all_label

#此處為全概率公式,將此時求得的結果為test_data為該標籤(thislb)的概率,並把它存到lbdict字典中

thislabel =

sorted

(lbdict,key =

lambda x:lbdict[x]

,reverse=

true)[

0]#對lbdict的value進行排序,為降序排列,並取最大值

return thislabel #返回求得的結果``

貝葉斯 01 初識貝葉斯

分割線 分割線 分割線 分割線 分割線 分割線 分割線 分割線 分割線 分割線 分割線 分割線 分割線 最先知道貝葉斯公式還是四年前的概率論和數理統計課上,時間也很久了,具體內容早已經忘記,不過畢竟曾經學過,重新看過還是得心應手的。大概用兩三篇的內容來介紹一下貝葉斯,以及機器學習中很重要的一部分 樸...

貝葉斯 02 理解貝葉斯

首先簡略回顧一下,全概率和貝葉斯。其實這兩者是密不可分的,互相之間是乙個順序問題,全概率反過去就是貝葉斯,這類問題只需要區分清楚是知道原因求結果,還是知道結果尋原因就可以了。全概率公式是計算由諸多原因而導致的某件複雜事情發生的概率,而貝葉斯就是在這件複雜的事情已經發生的前提下,去尋找諸多原因中,某一...

樸素貝葉斯演算法Python實現

coding cp936 樸素貝葉斯分類器的實現 執行 reload docclass c1 docclass.bayes docclass.getwords docclass.sampletrain c1 c1.classify quick rabbit default unknown 構建訓練樣...