机器学习_9、朴素贝叶斯

朴素贝叶斯解决鸢尾花数据集问题

#高斯朴素贝叶斯分类
#coding=utf-8
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
import numpy as np

# 导入数据集,并查看数据特征分布
data = load_iris()
#print(data.keys())
#print("目标数据类别:",data["target_names"])
# 提取特征数据和分类标签
X, y = data["data"], data["target"]

# 划分训练集与测试集
# 让参数stratify=y,使测试集与训练集中各类别样本数量的比例与原数据集中
# 各类别的样本数量比例相同
X_train, X_test, y_train, y_test = \
    train_test_split(X,y,test_size=0.2,stratify=y,random_state=1)

# 创建高斯朴素贝叶斯对象
model = GaussianNB()
# sklearn库支持三种朴素贝叶斯,分别是高斯朴素贝叶斯,多项式朴素贝叶斯,伯努利朴素贝叶斯
#高斯朴素贝叶斯GaussianNB,假设标签特征数据都服从高斯分布(正态分布)
#多项式朴素贝叶斯MultinomialNB,假设特征是由一个简单多项式分布生成,即多次重复实验。
#伯努利朴素贝叶斯(BernoulliNB),假设特征的先验概率为二元伯努利分布,即0和1,适用于二元离散特征
# 用训练集数据训练模型
model.fit(X_train, y_train)

# 性能评估
print("训练集准确率:", model.score(X_train, y_train))
print("测试集准确率:", model.score(X_test, y_test))

# 构建一个样本特征数据的数组
X_new = np.array([[4.5, 2.8, 2.5, 0.3]])
# 预测新数据的分类标签
class_code = model.predict(X_new)
print("预测的分类标签:", class_code)
print("预测的分类名称:", data["target_names"][class_code])

# 也可以查看属于各类别的概率
code_prob = model.predict_proba(X_new)
print("预测样本属于各标签的概率:\n", code_prob)
# 概率最大值的位置索引,axis=1求每一行的最大值索引
maxLoc = code_prob.argmax(axis=1)
print("每个样本预测标签最大概率值所在的标签序号:", maxLoc)
# 根据标签位置获取标签值(代码)
label = model.classes_[maxLoc]
print("预测的标签值:",label)
# 标签对应的鸢尾花种类
print("预测的鸢尾花种类名称:",data.target_names[label])

机器学习_9、朴素贝叶斯_第1张图片

你可能感兴趣的:(机器学习,机器学习,人工智能)