机器学习 朴素贝叶斯实现中文垃圾短信分类

本文介绍了使用伯努利朴素贝叶斯算法进行中文垃圾短信分类的方法,强调了分词过程中停用词的重要性,指出未设置停用词可能导致召回率降低。数据集为80万条带标签的中文短信,可从指定GitHub链接下载,提供了源码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我是用的伯努利来实现中文垃圾短信的分类,其中中文分词因为用的jieba没设置停用词,所以垃圾短信的召回率会降低,建议最好加上停用词。

数据集用的常见的80w条带标签的中文短信,下载链接https://github.com/hrwhisper/SpamMessage/blob/master/data/%E5%B8%A6%E6%A0%87%E7%AD%BE%E7%9F%AD%E4%BF%A1.txt

下面是源码

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

# In[2]:


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


# In[3]:


#2.计算对数先验概率
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)


# In[4]:


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)
    #1.分类别计算词出现的次数
    words={'y':{},'n':{}}
    for messge i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值