数据挖掘实验(五)Matlab实现Bayes算法【朴素贝叶斯分类】

本文代码均已在 MATLAB R2019b 测试通过,如有错误,欢迎指正。

(一)Bayes算法的基本原理

设X∈Ω是一个类别未知的数据样本, c j c_j cj为某个类别,若数据样本X属于一个特定的类别 c j c_j cj,那么分类问题就是决定P( c j c_j cj|X),即在获得数据样本X时,确定X的最佳分类。
在这里插入图片描述

  • P( c j c_j cj|X):即给定数据样本X时 c j c_j cj成立的后验概率,是我们所感兴趣的。
  • P( c j c_j cj) :类cj的先验概率(prior probability)。
  • P(X| c j c_j cj):是当已知类别为cj的条件下,样本x出现的后验概率。
  • P(X)指的是样本x出现的概率。

对于包含多个属性的数据集,直接计算P(X| C i C_i Ci) 的运算量是非常大的。为实现对P(X| C i C_i Ci)的有效估算,朴素贝叶斯分类通常假设各属性是相互独立的,即在属性间,不存在依赖关系,则对于给定的类别 C i C_i Ci ,有:
在这里插入图片描述
而P( x 1 x_1 x1| C i C_i Ci), P( x 2 x_2 x2| C i C_i Ci),…, P( x n x_n xn| C i C_i Ci)的值,可以由训练样本集进行估算。

总结:
在这里插入图片描述

(二)问题描述

训练集:
在这里插入图片描述
转换后的数据(字符串转换为整型,只保留后5列):
在这里插入图片描述
你需要输入一个类别未知的样本,例如[1,2,2,1],求出它属于哪类的概率最大,预测其分类。

(三)利用matlab实现Bayes算法

clear;clc;

% 录入数据,最后一列为决策属性
data=[
1	1	1	1	1
1	1	1	2	1
2	1	1	1	2
3	2	1	1	2
3	3	2	1	2
3	3	2	2	1
2	3	2	2	2
1	2	1	1	1
1	3	2	1	2
3	2	2	1	2
1	2	2	2	2
2	2	1	2	2
2	1	2	1	2
3	2	1	2	1
];

[n,m]=size(data);
C=data(:,m);
C_unique=unique(C);
C_num=length(C_unique); % 决策属性取值个数(决策属性的不同取值代表不同类别)

fprintf("当前数据集:"); data
X=input("请输入类别未知的样本。示例:[1,2,2,1]\n");

for i=1:m-1
	if ~ismember(X(i),data(:,i))
		warning("输入的某个属性值不在数据集中!"); % 警告 
	end
end

% 设第i种决策属性取值为Ci
% 设第j个条件属性取值为Xj
for i=1:C_num 
	C_select=(C==C_unique(i)); % n行1列的逻辑向量,其取值为1表示取出此行(元组)
	data_new=data(C_select,:); % 取值均为Ci的行构成新数据子集
	C_num=sum(C_select); % Ci所占行数
	pc(i)=C_num/n; % 计算p(Ci)
	pxc(i)=1;
	for j=1:m-1 
		A=data_new(:,j); % 取出新数据子集的第j个条件属性
		t=sum(A==X(j))/C_num; % 计算p(Xj|Ci)
		pxc(i)=pxc(i)*t; % 计算p(X|Ci)
	end	
	p(i)=pc(i)*pxc(i); % 计算p(Ci)*p(X|Ci)	
end

fprintf("\n计算 p(Ci) 的结果为:"); pc
fprintf("计算 p(X|Ci) 的结果为:"); pxc
fprintf("计算 p(Ci)*p(X|Ci) 的结果为:"); p

[mx,mxpos]=max(p);
fprintf("结论:当前类别未知的样本属于类别%d的概率最大,其概率为%f\n",C_unique(mxpos),mx);

运行结果:

当前数据集:
data =

     1     1     1     1     1
     1     1     1     2     1
     2     1     1     1     2
     3     2     1     1     2
     3     3     2     1     2
     3     3     2     2     1
     2     3     2     2     2
     1     2     1     1     1
     1     3     2     1     2
     3     2     2     1     2
     1     2     2     2     2
     2     2     1     2     2
     2     1     2     1     2
     3     2     1     2     1

请输入类别未知的样本。示例:[1,2,2,1]
[1,2,2,1]

计算 p(Ci) 的结果为:
pc =

    0.3571    0.6429

计算 p(X|Ci) 的结果为:
pxc =

    0.0192    0.0439

计算 p(Ci)*p(X|Ci) 的结果为:
p =

    0.0069    0.0282

结论:当前类别未知的样本属于类别2的概率最大,其概率为0.028219
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nefu-ljw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值