1.实验目的
(1)分析邮件数据并对数据进行预处理
(2)运行朴素贝叶斯模型对邮件进行分类
数据链接
密码:bwfa
2.导入必要模块并读取数据
import pandas as pd
df = pd.read_csv('spam.csv')
df.head()
df['spam'] = df['Category'].apply(lambda x: 1 if x=='spam' else 0) #将标签数字化
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(df.Message, df.spam) #拆分训练集与测试集
from sklearn.feature_extraction.text import CountVectorizer
v = CountVectorizer() #将文本中的词语转换为词频矩阵
X_train_count = v.fit_transform(X_train.values) #通过fit_transform函数计算各个词语出现的次数
X_train_count.toarray()[0:5]
3.训练+预测
from sklearn.naive_bayes import MultinomialNB #导入多标签朴素贝叶斯模块
model = MultinomialNB() #实例化
model.fit(X_train_count, y_train) #训练
X_test_count = v.transform(X_test.values) #转化测试集为数字
model.score(X_test_count, y_test) #计算准确率
#测试
emails = [
'Hey mohan, can we get together to watch footbal game tomorrow?',
'Upto 20% discount on parking, exclusive offer just for you. Dont miss this reward!'
]
emails_count = v.transform(emails) #转化为数字
model.predict(emails_count) #预测
4.使用Sklearn Pipeline方法
from sklearn.pipeline import Pipeline
clf = Pipeline([ #将转换和模型封装在一起
('vectorizer',CountVectorizer()),
('nb',MultinomialNB())
])
clf.fit(X_train,y_train) #训练
clf.score(X_test,y_test) #测试
clf.predict(emails)