#貝葉斯演算法的實現 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 構建訓練樣...