#coding=utf8classBayes:def__init__(self,data,inpu):
self.data=data
self.inpu=inpu
self.lable=[self.data[i][1] for i in range(len(self.data))]
self.score,self.result,self.resultM=self.__bayes()
def__bayes(self):
lableL=list(set(self.lable))
#print lableL
numL=[0for i in range(len(lableL))]
for i in range(len(self.lable)):
t=self.__getIndex(lableL,self.lable[i])
numL[t]+=1#print numL
resultM=[]
#print lableL,numLfor i in range(len(lableL)):
#pp 表示类出现的概率
pp=1.0*numL[i]/sum(numL)
pL=[0for j in range(len(self.inpu))]
#print pL
temp=[[] for j in range(len(self.inpu))]
#属于A类的概率for k in range(len(self.data)):
if self.data[k][1]==lableL[i]:
for q in range(len(self.inpu)):
temp[q].append(self.data[k][0][q])
#print tempfor q in range(len(self.inpu)):
num=self.__findCF(temp[q],self.inpu[q])
#print temp[-1],self.inpu[q],num#使用拉普拉斯平滑
pL[q]=1.0*(1+num)/(len(temp[-1])+1)
#这里使用lambda表达式#print pL
ppp=lambda pp,pL: pp*self.__jiec(pL,len(pL))
pf=ppp(pp,pL)
print"aaa"
resultM.append([pf,lableL[i]])
sum1=0for i in range(len(resultM)):
sum1+=resultM[i][0]
for i in range(len(resultM)):
resultM[i][0]*=1.0/sum1
#pass计算每一类的概率 和 先验概率
resultM.sort(reverse=True)
return resultM[0][0],resultM[0][1],resultM
def__getIndex(self,L,li):
index=0for j in range(len(L)):
if li==L[j]:
index=j
breakreturn index
def__findCF(self,L,li):
index=0for j in range(len(L)):
if li==L[j]:
index+=1return index
def__jiec(self,lis,n):#print "aaaa",nif n==1:
return1return lis[n-1]*self.__jiec(lis,n-1)
data=[[[1,3],'A'],[[2,2],'B'],[[2,1],'C'],[[1,1],'B'],[[1,2],'A']]
a=Bayes(data,[2,3])
print a.result,a.score,a.resultM