用贝叶斯预测一封新邮件

当我训练好了垃圾邮件分类的朴素贝叶斯模型后,我想拿一封垃圾邮件进行预测
垃圾邮件如下

   ‘尊敬的杂志铺会员,你好!杂志铺2020年的5月新杂志! 关注到您的杂志即将到期,特发邮件提醒。杂志订阅,不止五折!订阅有礼专区,先抢先得,抢完为止。还有其它的惊喜等着你如有需要请抓紧时间抢购。在官网下单后商品满300可以使用一张满300减20的优惠券 在使用杂志铺购物券的地方输入优惠券代码zx1006即可使用。下单时服务专员输入zzp6030,以便我追踪您的订单信息,为您提供更快更好的服务!

这个时候我遇到了一个问题,如何把新的邮件转化为原来词库的向量
解决办法是,用transform,原来我是把fit_transform看成一个,原来fit和transform是分开的

import numpy as np 
import pandas as pd
from sklearn import feature_extraction
import jieba
from sklearn import naive_bayes,metrics
cv = feature_extraction.text.CountVectorizer(stop_words=stopword,analyzer='word')
cv_fit = cv.fit_transform(你的词库)
bayes = naive_bayes.MultinomialNB()
bayes.fit(X_train,y_train)
#请自行训练你的贝叶斯,其他教程也有,以上都是已经完成的过程,下面是新邮件的转换



def str_cuter(str): #这里用jieba分词器进行分词,需要导入jieba
        seg_list = jieba.cut(str)
        words = []
        for seg in seg_list:
            if (seg.isalpha()) & (seg not in stopword):
                words.append(seg)
        str = ' '.join(words)
        str = [str]
        return str
spam = []
with open('垃圾邮件.txt') as f:
    for i in f:
        i =i.strip('\n')
        spam.append(i)
spam = ' '.join(spam)
spam = str_cuter(spam)
spam_v = cv.transform(spam)
spam_v.toarray()

在这里插入图片描述
这时就把新的邮件变成了向量,只要用

bayes.predict(spam_v)

就能知道结果了,这里我是规定的垃圾邮件分类为1,这里预测结果为1
在这里插入图片描述

你可能感兴趣的:(分析案例,自然语言处理,机器学习,数据挖掘)