当我训练好了垃圾邮件分类的朴素贝叶斯模型后,我想拿一封垃圾邮件进行预测
垃圾邮件如下
‘尊敬的杂志铺会员,你好!杂志铺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