基于朴素贝叶斯网络的iris鸢尾花数据集分类到新闻分类

本篇文章是对最简单的朴素贝叶斯网络的运用进行python实践,先对iris鸢尾花数据集做一个分类预实验,再对实际新闻进行分类预测
有关贝叶斯网络原理可以查看这篇文章 :贝叶斯网络基础

一、iris鸢尾花数据集分类
1、开头先导入相关模块:

import matplotlib.pyplot as plt  # 绘图
from sklearn.datasets import load_iris  #导入鸢尾花集
from sklearn.model_selection import train_test_split #对数据集进行切分
from sklearn.naive_bayes import MultinomialNB  # 朴素贝叶斯网络模型

2、导入鸢尾花数据集:

X = load_iris().data  # 数据集
Y = load_iris().target  # 相应类别标签

鸢尾花数据集一共有150行,每一行代表一个鸢尾花的一些属性,比如花瓣长度、花瓣宽度等;数据集中一共有3类,所有标签类别为0 1 2

数据集data(没有展现完)
在这里插入图片描述
类别标签:
在这里插入图片描述
3、鸢尾花数据集分类

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=0)  
#将数据集按照 训练集比测试集为8:2的比例随机拆分数据集
clf = MultinomialNB()  # 建立朴素贝叶斯网络
clf.fit(X_train, y_train)  # 带入训练集训练模型
pre = clf.predict(X_test)  # 预测测试集中特征矩阵所属的类别
print('预测集标签')
print(y_test)
print('预测结果')
print(pre)

打印出来看看,预测标签和预测结果有很多不吻合的
在这里插入图片描述
4、计算预测结果

N = len
  • 6
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
下面是一个简单的贝叶斯最小风险决策的 Matlab 实例,该例演示了如何实现贝叶斯最小风险决策,并且可以使用它来帮助分类来自两个不同种类的数据。 假设有两种类型的数据,其中每种类型的数据都来自一个高斯分布。我们可以使用贝叶斯最小风险决策来确定给定一个新的数据点属于哪种类型的数据。 首先,我们需要生成一些示例数据: ```matlab % 生成数据 mu1 = [1, 1]; % 类别 1 的均值 sigma1 = [1, 0; 0, 1]; % 类别 1 的协方差矩阵 X1 = mvnrnd(mu1, sigma1, 100); % 从类别 1 的高斯分布中生成 100 个数据点 mu2 = [-1, -1]; % 类别 2 的均值 sigma2 = [1, 0; 0, 1]; % 类别 2 的协方差矩阵 X2 = mvnrnd(mu2, sigma2, 100); % 从类别 2 的高斯分布中生成 100 个数据点 % 绘制数据 figure; scatter(X1(:,1), X1(:,2), 'r'); hold on; scatter(X2(:,1), X2(:,2), 'b'); legend('Class 1', 'Class 2'); ``` 然后,我们可以计算每个类别的先验概率,以及每个类别的条件概率密度函数: ```matlab % 计算先验概率 p1 = 0.5; % 类别 1 的先验概率 p2 = 0.5; % 类别 2 的先验概率 % 计算条件概率密度函数 pdf1 = @(x) mvnpdf(x, mu1, sigma1); % 类别 1 的条件概率密度函数 pdf2 = @(x) mvnpdf(x, mu2, sigma2); % 类别 2 的条件概率密度函数 ``` 接下来,我们可以定义一个函数,该函数将一个新的数据点作为输入,并通过计算每个类别的期望损失来确定该数据点属于哪个类别: ```matlab function [label, loss] = bayes_decision(x, p1, p2, pdf1, pdf2) % 计算每个类别的期望损失 l11 = 0; % 类别 1 被误认为是类别 1 的损失 l12 = 1; % 类别 2 被误认为是类别 1 的损失 l21 = 1; % 类别 1 被误认为是类别 2 的损失 l22 = 0; % 类别 2 被误认为是类别 2 的损失 E1 = l11 * pdf1(x) * p1 + l21 * pdf2(x) * p2; % 类别 1 的期望损失 E2 = l12 * pdf1(x) * p1 + l22 * pdf2(x) * p2; % 类别 2 的期望损失 % 确定数据点属于哪个类别 if E1 < E2 label = 1; loss = E1; else label = 2; loss = E2; end end ``` 最后,我们可以使用这个函数来分类一些新的数据点,并将其可视化: ```matlab % 分类新数据 N = 100; X = [linspace(-4, 4, N)', linspace(-4, 4, N)']; labels = zeros(N, N); losses = zeros(N, N); for i = 1:N for j = 1:N [labels(i,j), losses(i,j)] = bayes_decision([X(i,j), X(i,j)], p1, p2, pdf1, pdf2); end end % 绘制分类结果 figure; contourf(X(:,1), X(:,2), labels, 1); hold on; scatter(X1(:,1), X1(:,2), 'r'); scatter(X2(:,1), X2(:,2), 'b'); legend('Decision boundary', 'Class 1', 'Class 2'); ``` 运行这个脚本,你将看到一个分类器将数据点分成两个类别的图形输出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值