#根據給定的訓練資料x,y,**x所屬分類
def predict(x,y,x):
#將陣列y的元素(類別值)嫁接到陣列x每行的末尾
newx=x
for i in range(0,len(x)):
#第一步:去重,提取y的類別值,組成集合purey
purey=list(set(y))
#第二步:計算所有類別結果值在y中的出現次數,放到集合t中。
t=[0]*len(purey)
for j in range(0,len(purey)):
t[j]=y.count(purey[j])
#陣列x與陣列purey每條對映關係的概率,放到集合p中。
p=[0]* len(purey)
#定義乙個二維陣列d,統計每列不同的特徵值與該特徵值出現的的次數 ,以字典的形式作為元素儲存在d
#定義乙個陣列div,用來承裝每列不同的特徵值出現的次數與t[j]的比值,如果分子為0,則
#分子與分母同時加0
d=[ for j in range(len(purey))]
div =[0]*len(x)
for j in range(0,len(purey)):
#遍歷陣列purey的元素,在陣列x最後一列提取該元素所在的所有行,將這些行組成陣列a
a=[x for x in newx if x[len(newx[0])-1]== purey[j]]
for i in range(0,len(x)):
#取出陣列a中的第i列,放到陣列b中
b=[x[i] for x in a]
#遍歷陣列b,按照不同的元素和其對應的出現次數儲存在字典c
c= #將字典c新增到陣列d
for j in range(0,len(purey)):
w=1for i in range(0,len(x)):
if x[i] in d[j][i]:
for k in d[j][i]:
if k==x[i]:
div[i]=d[j][i].get(k)/t[j]
else:
div[i]=1/(t[j]+1)
w= w* div[i]
p[j]=w*(t[j]/len(newx))
#將所有的類別值與其對應的概率存放到字典中,遍歷得到最大的概率所對應的類別,並返回
for k,v in dict(zip(purey,p)).items():
if v==max(p):
return k
#測試x = [[0, 0, 1],
[0, 1, 0],
[1, 0, 0]]
y = [1, 2, 3]
x=[0,1,0]
print(predict(x,y,x))
樸素貝葉斯演算法
首先樸素貝葉斯分類演算法利用貝葉斯定理來 乙個未知類別的樣本屬於各個類別的可能性,選擇可能性最大的乙個類別作為該樣本的最終類別。對於計算而言,需要記住乙個公式。p c x p x c p c p x 類似於概率論條件概率公式。其中x代表含義為最終類別,例如 yes?no。c為屬性。使用樸素貝葉斯演算...
樸素貝葉斯演算法
計算貝葉斯定理中每乙個組成部分的概率,我們必須構造乙個頻率表 因此,如果電子郵件含有單詞viagra,那麼該電子郵件是垃圾郵件的概率為80 所以,任何含有單詞viagra的訊息都需要被過濾掉。當有額外更多的特徵時,此概念的使用 利用貝葉斯公式,我們可得到如下概率 分母可以先忽略它,垃圾郵件的總似然為...
樸素貝葉斯演算法
對於樸素貝葉斯演算法,我的理解就是 使用已知的概率和結果,來 事情的條件。舉乙個例子就是,我們通過統計得到了不同年齡段喜歡吃冰激凌的比例,比如各採訪了500個青少年 中年人和老年人,得到有450個青少年 300個中年人和50個老年人喜歡吃冰激凌。我們還通過統計,知道了在社會中假設小孩子佔20 中年人...