Machine Learning 学习之朴素贝叶斯

#coding=utf8
class Bayes:
    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=[0 for 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,numL
        for i in range(len(lableL)):
            #pp 表示类出现的概率
            pp=1.0*numL[i]/sum(numL)
            pL=[0 for 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 temp

            for 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=0

        for 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=0
        for j in range(len(L)):
            if li==L[j]:
                index=j
                break
        return index
    def __findCF(self,L,li):
        index=0
        for j in range(len(L)):
            if li==L[j]:
                index+=1
        return index

    def __jiec(self,lis,n):
        #print "aaaa",n
        if n==1:
            return 1
        return  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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值