基于贝叶斯分类器进行sklearn乳腺癌数据集的分类

问题描述

  1. 使用sklearn中的乳腺癌数据集,将数据集以7:3的比例分别划分为训练集与测试集,以及对应的标签;
  2. 使用训练集数据训练基于高斯模型的朴素贝叶斯分类器;
  3. 对测试文档进行测试,得出分类评价指标:精确率、召回率与F1值,并计算测试集中分类错误的样本个数,以及输出错误分类样本的真实标签。


朴素贝叶斯分类器

朴素贝叶斯分类器是对于特征维数较小而训练样本数比较多的分类问题而使用的分类器,其假设所有特征在类别已知的条件下相互独立。在构建分类器时,只需要逐个估计出每个类别的训练样本在每一维特征上的分布,就可以得到每个类别的条件概率密度,大大减少了需要估计参数的数量。也就是说,在给定样本的目标特征值的情况下观察到特征x1,x2,…,xn的联合概率等于每个单独的特征的概率的乘积,因此可以得到:
在这里插入图片描述
其中p(v)表示先验概率,p(xi|v)表示后验概率,因为我们已经假设各个特征独立,因此p(x1,x2,…,xn|v)可以表示为 上式中乘积的形式


分割数据集

使用train_test_split函数进行分割数据集,通过查看pycharm里面这个函数的源码显示为Split arrays or matrices into random train and test subsets,也就是将数据集进行随机分割为训练集和测试集。这个函数有个test_size参数,这个是指test数据集占整个数据集的比列,在这里设置为0.3,shuffle这个参数用来表示是否进行随机分割打乱数据集的顺序,在这里我设置为了True。

X_train, X_test, y_train, y_test = train_test_split(
    cancer.data, cancer['target'], test_size=0.3, shuffle=True)

X_train为训练集的数据, X_test为预测集的数据, y_train为训练集的标签, y_test为测试集的标签。

高斯模型的朴素贝叶斯分类器

scikit-learn中,一共有3个朴素贝叶斯的分类算法类。分别是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先验为高斯分布的朴素贝叶斯,MultinomialNB就是先验为多项式分布的朴素贝叶斯,而BernoulliNB就是先验为伯努利分布的朴素贝叶斯。
如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。
如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。
如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。
GaussianNB假设特征的先验概率为正态分布
在这里插入图片描述
在这个实验中使用GaussianNB()函数创建基于高斯模型的朴素贝叶斯分类器

# 创建一个基于高斯模型的朴素贝叶斯分类器
naive = GaussianNB()                            # 创建分类模型
naive.fit(X_train, y_train)                     # 进行训练
y_predict = naive.predict(X_test)               # 进行预测


实验结果

在这个实验中,错误分类的个数为8个,然后通过错误分类的个数除以总的测试集的个数,算出模型的准确率为0.953,这个结果和accuracy_score函数输出的结果一致,然后这个模型的recall值为0.95,F1-score也是0.95,可以看出来这个基于高斯模型的朴素贝叶斯分类器性能较好。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值