python贝叶斯算法识别垃圾短信

概率及初始模型

#!/usr/bin/env python
# coding: utf-8

import pandas as pd
import codecs
import numpy as np
import math
import jieba

#计算对数先验概率
def getLogPrior(train):
    '''
        totals:{'y':单词总数,'no':'单词总数'}
        samples:{'y':样本数,'n':样本数}
        logPrior:{'y':先验概率,'no':先验概率}
    '''

    a1 = train[train['1']==0]
    a2 = train[train['1']==1]
    samples={'y':len(a1),'n':len(a2)}
    docSum = samples['y']+samples['n']
    prior={'y':samples['y']/docSum, 'n':samples['n']/docSum}
    logPrior={'y':math.log(prior['y']), 'n':math.log(prior['n'])}
    return (docSum,samples,logPrior,prior)


def getConditionPro(train):
    conditionPro={'y':{},'n':{}}
    logConditionPro={'y':{},'n':{}}
    docSum,samples,logPrior,prior=getLogPrior(train)
    a1 = train[train['1']==0]
    a2 = train[train['1']==1]
    classNum=2
    wordSet=set()
    for X_word in train['2']:
        for word in X_word:
            wordSet.add(word)
    #分类别计算词出现的次数
    words={'y':{},'n':{}}
    for messge in a1['2']:
        settemp=set(messge)
        for ch in messge:
            if ch in words['y']:
                words['y'][ch]+=1
            else:
                words['y'].setdefault(ch,1)

    for messge in a2['2']:
        settemp=set(messge)
        for ch in messge:
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值