C10.1

例10.1 朴素贝叶斯分类器进行鸢尾花数据集分类

教材页 教材第10章
任务 朴素贝叶斯分类器进行鸢尾花数据集分类
Python

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
from sklearn.datasets import load_iris
from sklearn.naive_bayes import GaussianNB

iris = load_iris()
X_iris = iris.data
y_iris = iris.target
X_train_iris, X_test_iris, y_train_iris, y_test_iris = train_test_split(X_iris, y_iris, test_size=0.2, random_state=42)
nb = GaussianNB()
nb.fit(X_train_iris, y_train_iris)
y_pred_iris = nb.predict(X_test_iris)
accuracy_iris = accuracy_score(y_test_iris, y_pred_iris)
print("鸢尾花数据集的贝叶斯分类器准确率:", accuracy_iris)

Python

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

#导入需要用到的包,模型以及数据集
import numpy as np
# 导入sklearn中有关于数据集的包
from sklearn import datasets
# 导入高斯朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
# 加载鸢尾花特征数据及其标签
# 当load_iris函数中的参数return_X_y=True,函数会返回前面介绍的鸢尾花数据集中的data和target
X, y = datasets.load_iris(return_X_y=True)

#样本划分,将数据划分为训练集和测试集
# train_test_split函数用于划分数据集,按照test_size=0.2,将80%的数据划分为训练集,20%的数据划分为测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

#导入定义的高斯朴素贝叶斯模型,并利用训练集数据进行训练
# 定义模型,给出模型的相关参数,该参数在sklearn 0.20以上的版本才有,低于此版本的sklearn会报错
clf = GaussianNB(var_smoothing=1e-8)
# 利用训练数据训练定义好的模型
clf.fit(X_train, y_train)

# GaussianNB(var_smoothing=1e-08)

#利用训练好的模型进行预测
# 利用模型对测试集进行预测
y_pred = clf.predict(X_test)
# 评判模型预测的准确率(真确预测的个数/测试样本总个数)
acc = np.sum(y_test == y_pred) / X_test.shape[0]
# 打印准确率
print("Test Acc : %.3f" % acc)

# Test Acc : 0.967
#可以看到模型在测试集上的准确率为96.7%

#挑选测试集中的一个样本来看看具体情况
# predict_proba函数分别计算该样本属于每一类的概率,概率总和为1
y_proba = clf.predict_proba(X_test[:1])
# 打印测试集第一个样本的预测结果
print(clf.predict(X_test[:1]))
# 打印测试集第一个样本分别属于每一类的概率
print("预计的概率值:", y_proba)

# [2]
# 预计的概率值: [[1.63542393e-232 2.18880483e-006 9.99997811e-001]]
#可以看到模型预测出测试集第一个样本标签为第二类的可能性更大,且输出的标签也是2

#看一下测试集第一个样本的真实标签是多少
print(y_test[:1])

C++ #include "orsci.h"
#include "orsci_dm.h"
using namespace orsci;
using namespace dm;
cmdouble ds;
ds.dataset.load_iris();
cout << ds.model.naivebayes.kCloseTest() << endl;
cout << ds.model.naivebayes.kRand(10, 0.9) << endl;
cout << ds.model.naivebayes.kFold(10, true) << endl;
输出

150 6 0.96 0.96 0.96 0.96 0.96 0.02
150 8 0.946667 0.947256 0.946667 0.946961 0.946667 0.0253558
150 7 0.953333 0.953448 0.953333 0.953391 0.953333 0.0233333

书籍 姜维.《数据分析与数据挖掘》、《数据分析与数据挖掘建模与工具》,电子工业出版社, 2023,2024。
软件 Python,C++(附加orsci包)。