头歌实训平台--实用机器学习--朴素贝叶斯模型

第1关:利用sklearn构建朴素贝叶斯模型

任务描述

本关任务:编写一个使用贝叶斯分类器完成垃圾邮件分类的程序。

相关知识

为了完成本关任务,你需要掌握:1.朴素贝叶斯模型,2.使用sklearn构建朴素贝叶斯分类器。

朴素贝叶斯模型

贝叶斯方法是一种生成式分类模型,这是一种从概率论上延伸出来的方法。在概率论与统计学中,贝叶斯定理表达了一个事件发生的概率,而确定这一概率的方法是基于与该事件相关的条件先验知识。而利用相应先验知识进行概率推断的过程为贝叶斯推断。

编程要求

根据提示,在右侧编辑器补充代码,完成使用sklearn构建朴素贝叶斯分类器,包括:

  1. 数据处理
  2. 训练测试集的划分
  3. 模型训练
  4. 测试数据预测和AUC计算
  5. 打印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))

朴素贝叶斯分类器是一种基于贝叶斯定理的简单且高效的分类算法,它假设特征之间是相互独立的。在sklearn中,实现朴素贝叶斯分类器的类是`sklearn.naive_bayes`中的`MultinomialNB`和`GaussianNB`。 - `MultinomialNB`适用于文本分类问题,它假设特征是来自于多项式分布,即每个特征都是离散的,并且每个特征的可能取值个数是有限的。 - `GaussianNB`适用于连续数据的分类问题,它假设特征是来自于高斯分布。 下面是一个基于sklearn实现朴素贝叶斯分类器的示例代码: ```python from sklearn.naive_bayes import MultinomialNB from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics import accuracy_score # 加载数据集 train_data = fetch_20newsgroups(subset='train') test_data = fetch_20newsgroups(subset='test') # 特征提取 vectorizer = TfidfVectorizer() train_features = vectorizer.fit_transform(train_data.data) test_features = vectorizer.transform(test_data.data) # 构建模型 clf = MultinomialNB(alpha=0.01) clf.fit(train_features, train_data.target) # 预测 y_pred = clf.predict(test_features) # 评估 accuracy = accuracy_score(test_data.target, y_pred) print('Accuracy:', accuracy) ``` 在上述代码中,我们使用`fetch_20newsgroups`函数加载了20类新闻文本数据集,并使用`TfidfVectorizer`类进行特征提取。然后,我们使用`MultinomialNB`类构建模型,并使用`alpha`参数控制平滑度。最后,我们使用`accuracy_score`函数计算分类准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值