python 樸素貝葉斯模擬聯邦學習無框架

2021-09-25 07:31:12 字數 2646 閱讀 1595

資料集:

資料集本身是做二分類的。

裡面自己設計了dataloader、tester等類,簡單易懂。

匯入的標頭檔案都沒卵用,全是手寫的。

tester用了從30000條到32000條資料,當然你自己可以隨便改。

party類例項化之後是多方中的一方。

import torch

import torch.nn.modules

import torch.nn

import numpy as np

from torch.autograd import variable #torch的基本變數

import torch.nn.functional as f #裡面有很多torch的函式

import matplotlib.pyplot as plt

num_of_test_set=2000

num_of_party=5

party_data=6000

num_of_all_data=32561

class party:

def __init__(self):

self.data=

self.numoffeature=0

self.numofdata=0

def update(self):

self.numofdata=len(self.data)

self.numoffeature=len(self.data[0])

def bayespredict(self,feature):

#use=self.convertfeature(feature)

#if len(use)==0: return "feature convert failed. unable to predict"

#print('one')

half0=[item[:-1] for item in self.data if item[self.numoffeature-1]==1]#大於50k的

cnt=[0]*len(feature)

for item in half0:

for index,data in enumerate(item):

if data==feature[index]:

cnt[index]+=1

cnt=cnt[:-1]

p1 = 1

pa=len(half0)#0類分類在總分類**現的次數

if pa!=0:

#特徵事件相乘

for count in cnt:

p1 = p1*(count/pa)

#分類事件相乘

p1 = p1 * (pa/self.numofdata)

half1 = [item[:-1] for item in self.data if item[self.numoffeature - 1] == 0] # 小於50k的

cnt = [0] * len(feature)

for item in half1:

for index, data in enumerate(item):

if data == feature[index]:

cnt[index] += 1

cnt = cnt[:-1]

p2 = 1

pa = len(half1) # 0類分類在總分類**現的次數

if pa!=0:

# 特徵事件相乘

for count in cnt:

p2 = p2 * (count / pa)

# 分類事件相乘

p2 = p2 * (pa / self.numofdata)

if p1-p2<1e-11: return -1

elif p1>p2: return 1#大於50k

elif p150k'])

#print(loader.getclass['<=50k'])

parties=

for i in range(6):

temp=party()

last=0

for i in range(len(parties)):

loader.assigndata(parties[i],last,last+6000)

#print(parties[i].data[:10])

parties[i].update()

last+=6000

tester = tester()

loader.assigndata(tester,31000,32000)

'''y=

last=0

for i in range(6):

loader.assigndata(parties[0],last,last+6000)

res=tester.test(parties[0])

'''y=

last = 6000

for i in range(6):

loader.assigndata(parties[0], 0, last)

res = tester.test(parties[0])

x = [1, 2, 3, 4, 5, 6]

plt.bar(x, y)

plt.show()

樸素貝葉斯

樸素貝葉斯演算法是一種基於概率統計的分類方法,它主要利用貝葉斯公式對樣本事件求概率,通過概率進行分類。以下先對貝葉斯公式做個了解。對於事件a b,若p b 0,則事件a在事件b發生的條件下發生的概率為 p a b p a b p b 將條件概率稍作轉化即可得到貝葉斯公式如下 p a b p b a ...

樸素貝葉斯

1.準備資料 從文字中構建詞向量 2.訓練演算法 從詞向量計算概率 3.測試演算法 儲存為 bayes.py 檔案 參考 coding utf 8 from numpy import 文字轉化為詞向量 def loaddataset postinglist my dog has flea probl...

樸素貝葉斯

機器學習是將資料轉化為決策面的過程 scikit learn縮寫為sklearn 訓練乙個分類器,學習之後 其處理的準確性 def nbaccuracy features train,labels train,features test,labels test from sklearn.bayes ...