python实现朴素贝叶斯

    # -*- coding: utf-8 -*-
    
    import pandas as pd
    import numpy as np
    
    data = pd.read_csv(r'data.csv')
    
    train = data.ix[0:4000,:]
    Y = list(train.columns)[-1]
    C = list(train[Y].unique())
    test = data.iloc[601:611,0:6]
    Xtest = test.iloc[:,0:5]

    #当预测值为c的情况下的概率
    def XP(testline,c,trainpart):
        Xp = 1
        for index in testline.index:
            x = testline[index]
            xp = len(trainpart[trainpart[index]==x])/len(trainpart)
            print(len(trainpart[trainpart[index]==x]))
            Xp=Xp*xp
        print(Xp)
        return Xp
    
    #预测值为C的概率
    def YP(train,C,testline):
        p=[]
        for c in C:
            trainpart = train[train[Y]==c]
            Yp = XP(testline,c,trainpart)*(len(trainpart)/len(train))
            p.append(Yp)
        p = np.array(p)
        print(p)
        return C[p.argmax()]

    #每行记录的预测值
    def NB(train,Xtest,C):
        result=[]
        for i in Xtest.index:
            testline = Xtest.ix[i,:]
            result.append(YP(train,C,testline))
        return result
    
    result = NB(train,Xtest,C)
    
            
        

 

转载于:https://www.cnblogs.com/chenyaling/p/7239125.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值