朴素贝叶斯(Naive-Bayes)

  • 基本原理

贝叶斯定理:image.png 全概率公式:p(x) = p(x/y1)p(y1)+p(x/y2)p(y2)+...p(x/yk)p(yk),其中(y1,y2,...yk)组成一个完备事件且之间相互独立。

  • 前提条件

各个特征之间相互独立,其中各个特征又分别为离散的类别。 image.png

  • 直接上步骤:
  1. 计算训练X各个特征xi中某个类别xij在每一类yk下的条件概率:p(xij/yk),所有计算结果存为三维矩阵Pxy(j,i,k)
  2. 计算各类yk的先验概率 :p(yk),即该类在总体样品中所占的比例
  3. 再根据步骤1和2的计算结果,计算新x的全概率:p(x) = p(x/y1)*p(y1)+p(x/y2)*p(y2)+...p(x/yk)*p(yk),其中,p(x/yk) = Pxy(~,1,k)Pxy(~,2,k)...*Pxy(~,m,k),是yk下样品出现的概率,~代表该特征下的该类特征,m为特征维度。
  4. 依据贝叶斯公式计算出P(yk/x),排序选择最大的类别。
  • matlab测试代码:
%朴素贝叶斯 --- 分类算法
%假设x特征之间相互独立

%输入: x[n*m]=[特征1,特征2,...特征m],其中特征1、2...m的值又分别为ij类(即离散数值)
%       y[n*1]=[类1;类2;...类k]
%如:x=[1,'高'      y=[‘是’
%       0,'低'         ‘否’
%       1,'中'         ‘是’
%       0,'高']        ‘否’]

%输出:p(xi)
clc;clear;close all;

x=[1,1,0,1,0,0,1,1,0,0
   0,1,1,0,0,1,1,1,0,1
   0,1,1,2,0,1,1,0,2,2];
y=[1,0,0,1,0,0,0,1,0,1];



x=x';
y=y';


[n,m]=size(x);%确定x特征维数m,
for i=1:m 
    C(i)=length(unique(x(:,i)));%确定x每个特征的类数Ci;
end
uny=unique(y);
C(m+1)=length(uny);%确定y的类数;

%-----------------------------计算先验概率,条件概率------------------
for i=1:C(m+1)  %y的类别数
    num=find(y==uny(i));
    sumy(i)=sum(y==uny(i));
    py(i)=sumy(i)/n;%先验概率P(Y=yi)
    
    xi=x(num,:);%y==yi下的x矩阵;
    for j=1:m   %x特征变量个数
        unx{j}=unique(x(:,j));
        for k=1:C(j)  %x每个特征下的类别数
            pxy(k,j,i)=sum(xi(:,j)==unx{j}(k))/sumy(i);%条件概率矩阵,每一列为yi条件下xi特征的各类别的条件概率
        end
    end
end

%--------------------------------求后验概率---------------------------
% unx uny pxy py  C

xx=[0;0;0];

sum=0;
for i=1:C(m+1)
    mul=1;
    for j=1:m
        j_n=unx{j}==xx(j);
        mul=mul*pxy(j_n,j,i);
    end
    pxx(i)=mul;    
    sum=sum+py(i)*pxx(i);            
end
p_b=sum;%分母,全概率

for i=1:C(m+1)
    mul=1;
    for j=1:m
        j_n=find(unx{j}==xx(j));
        mul=mul*pxy(j_n,j,i);
    end
    pxx(i)=mul;
    p_a=py(i)*pxx(i);%分子,联合概率
    

    pyx(i)=p_a/p_b;
end

y_pre=max(pyx);%预测的最大概率
y_num=uny(unique(find(pyx==y_pre)));%预测最大概率的所属类别

disp('预测为:类别   概率')
disp([y_num,y_pre])
  • 附图 image.png

转载于:https://my.oschina.net/u/3851199/blog/1941666

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值