本项目是对美国威斯康星州的乳腺癌诊断数据集进行分类,该数据集包括569个病例的数据样本,每个样本具有30个特征值,而样本共分为两类:分别是恶性和良性,我们要利用高斯朴素贝叶斯算法来训练模型,并对该模型进行评估和预测。
(1)导入包
代码如下:
import numpy as np
import pandas as pd
from sklearn.datasets import load_breast_cancer#导入数据集
from sklearn.model_selection import train_test_split#形成测试集和训练集
from sklearn.model_selection import cross_val_score
from sklearn.metrics import classification_report#导入分类报告模板
from sklearn.naive_bayes import GaussianNB#导入先验概率的高斯朴素贝叶斯模型
(2)导入 sklearn 自带的数据集并输出一些数据
代码如下:
breast_cancer=load_breast_cancer()#导入 sklearn 自带的数据集
print("数据集的主要内容",breast_cancer.keys())#打印数据集键值(keys),查看数据集包含的信息
print("数据集的标签名",breast_cancer.target_names)
print("数据集的特征名",breast_cancer.feature_names)#打印查看数据集中标注好的肿瘤分类(target_names)、肿瘤特征名称 (feature_names)
(3)将数据集拆分为训练集和测试集
代码如下:
#划分数据集
data = pd.DataFrame(breast_cancer.data)
target = pd.DataFrame(breast_cancer.target)
x=np.array(data.values)
y=np.array(target.values)
train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.2)
#打印数据形态
print(train_x.shape,test_x.shape)
(4)配置高斯朴素贝叶斯模型并训练模型
代码如下:
model=GaussianNB()#配置高斯朴素贝叶斯模型
model.fit(train_X,train_y)#训练模型
(5)评估模型,打印查看模型评分
代码如下:
#7.评估模型,打印查看模型评分(分别打印训练集和测试集的评分)。
#打印训练集和测试集的评分
print("高斯朴素贝叶斯模型训练集的评分:",model.score(train_X,train_y))
print("高斯朴素贝叶斯模型测试集的评分:",model.score(test_X,test_y))
(6)模型预测:选取某一样本进行预测。(可以进行多次不同样本的预测)
代码如下:
#8.模型预测:选取某一样本进行预测。(可以进行多次不同样本的预测)
pre_y=model.predict(test_X)
# sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息。
print(classification_report(test_y,pre_y))
(1)问题:如何进行模型评估
我习惯用F1分数来评估模型的好坏,它同时兼顾了分类模型的精确率和召回率。F1分数可以看作是模型精确率和召回率的一种调和平均。
1.打印数据集键值(keys)以及打印查看数据集中标注好的肿瘤分类(target_names)、肿瘤特征名称(feature_names)
2.将数据集拆分为训练集和测试集,打印查看训练集和测试集的数据形态(shape)。
3.评估模型,打印查看模型评分。
4.模型预测:选取某一样本进行预测
1.通过此实验了解了朴素贝叶斯中的高斯朴素贝叶斯算法,学会了如何构建模型,训练模型,评估模型和模型预测。
2.我发现了相比于线性模型算法,朴素贝叶斯算法的效率要高一些,这是因为朴素贝叶斯算法会把数据集中的各个特征看作完全独立的,而不考虑特征之间的关联关系。