朴素贝叶斯(MultinomialNB)-垃圾邮件分类

一、概述

 二、代码

# coding=UTF-8
import codecs
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer
    
if __name__ == "__main__":
    # 1、构建数据
    labels = [] # 训练集label
    corpus = [] # 训练集文本
    labels_test = []    # 测试集label
    corpus_test = []    # 测试集文本
    file = codecs.open("/Users/chenfenli/Desktop/sms_spam.txt")
    count = 0
    while True:
        # 从文件中按行读取
        line = file.readline()
        if line:
            count = count + 1
            line = line.split(",")
            label = line[0]
            sentence = line[1]
            
            # 训练集
            corpus.append(sentence)
            if "ham" == label:
                # 正常邮件
                labels.append(0)
            elif "spam" == label:
                # 垃圾邮件
                labels.append(1)
            
            # 测试集
            if count > 5550:
                corpus_test.append(sentence)
                if "ham" == label:
                    labels_test.append(0)
                elif "spam" == label:
                    labels_test.append(1)
        else:
            break
    
    # 2、文本特征提取
    #   将文本数据转化成特征向量的过程
    #   比较常用的文本特征表示法为词带法
    #
    # 词带法
    #   不考虑词语出现的顺序,每个出现过的词汇单独作为一列特征
    #   这些不重复的特征词汇集合为词表
    #   每一个文本都可以在很长的词表上统计出一个很多列的特征向量
    #   CountVectorizer是将文本向量转换成稀疏表示数值向量(字符频率向量),vectorizer 将文档词块化,只考虑词汇在文本中出现的频率
    # 词带
    vectorizer = CountVectorizer()
    fea_train = vectorizer.fit_transform(corpus) 
    #print(vectorizer.get_feature_names())
    #print(fea_train.toarray())

    # 3、训练模型:MultinomialNB(基于贝叶斯定理的朴素贝叶斯分类器)
    clf = MultinomialNB(alpha = 1) 
    clf.fit(fea_train,labels)

    # 4、准备测试数据
    vectorizer2 = CountVectorizer(vocabulary=vectorizer.vocabulary_)
    fea_test =  vectorizer2.fit_transform(corpus_test)

    # 5、预测
    pred = clf.predict(fea_test)
    for p in pred:
        if p == 0:
            print("正常邮件")
        elif p == 1:
            print("垃圾邮件")

    

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值