第1关:利用sklearn构建朴素贝叶斯模型
任务描述
本关任务:编写一个使用贝叶斯分类器完成垃圾邮件分类的程序。
相关知识
为了完成本关任务,你需要掌握:1.朴素贝叶斯模型,2.使用sklearn构建朴素贝叶斯分类器。
朴素贝叶斯模型
贝叶斯方法是一种生成式分类模型,这是一种从概率论上延伸出来的方法。在概率论与统计学中,贝叶斯定理表达了一个事件发生的概率,而确定这一概率的方法是基于与该事件相关的条件先验知识。而利用相应先验知识进行概率推断的过程为贝叶斯推断。
编程要求
根据提示,在右侧编辑器补充代码,完成使用sklearn构建朴素贝叶斯分类器,包括:
- 数据处理
- 训练测试集的划分
- 模型训练
- 测试数据预测和AUC计算
- 打印AUC
通关代码:
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import roc_auc_score
from sklearn.metrics import classification_report
data_path ='/data/bigfiles/5297379b-7cd5-4239-bcac-e2d361753393'
df = pd.read_csv(data_path, delimiter='\t',header=None)
######Begin ######
# 将label编码
df[0] = df[0].replace(to_replace=['spam', 'ham'], value=[0, 1])
# 完成数据划分及词向量的转化
X = df[1].values
y = df[0].values
X_train_raw,X_test_raw,y_train,y_test=train_test_split(X,y,random_state = 0)
vectorizer = TfidfVectorizer()
x_train = vectorizer.fit_transform(X_train_raw)
x_test = vectorizer.transform(X_test_raw)
# 构建模型及训练
model = MultinomialNB()
model.fit(x_train,y_train)
#对于测试集x_test进行预测
x_pre_test=model.predict(x_test)
x_pro_test = model.predict_proba(x_test)
#计算验证集的auc值,参数为预测值和概率估计
auc=roc_auc_score(y_test, x_pro_test[:, 1])
###### End ######
print("auc的值:{}".format(auc))