朴素贝叶斯分类器之小试牛刀

  朴素贝叶斯分类,是一基于统计概率的分类器。它是机器学习、模式识别等学科的基本方法。可用于文件、网页等文本类目标的分类。实现的思想非常简单,就是将n维的特征看成n个相互统计独立的随机变量。下面简单的讲解下:


朴素贝叶斯分类器

(1)前提假设:

·X为样本容量为N的特征矩阵,x是属于X的一个特征向量;

·x为L维的数据向量,每个维度上为bool值(取值为【0或1】);

·X中的所有样本可分为J类(W);

·x的每一维的值视作统计独立的随机变量;

(2)符号定义:

·表示第k个样本的第i维变量;

·表示第j类。

(3)原理推导:

·因为将视作统计独立的随机变量,所以属于类的概率为

,(1)

似然值为

,  (2)

其中样本被分为第j类的概率。这样我们就能明确通过训练(学习)所要得到参数:

·训练过程:

 (3)

        ,   (4)

其中,表示属于第j类,[X]表示bool型函数,当X为真是返回1,否则返回0。

对所有训练数据分别运用(1)、(2)式进行处理,应该等到一个J*L的矩阵和1*J的向量。

·预测过程:

对于目标数据,分别计算1,2,3,...,J类的

,  (5)

求出最大的,则就是预测的类标。


小试牛刀

MATLAB代码如下

·朴素贝叶斯训练函数:

function [ pxj,pj ] = nbc_train( data,label )

[N,l]=size(data);
wn=length(unique(label));
wm(1:wn)=0;
pxj=zeros(wn,l);

for j=1:wn
   idx=(label==(j-1));
   wm(j)=sum(idx); 
   pxj(j,:)=(sum(data(idx,:)>0)+1)/(wm(j)+wn);
end

pj=wm/N;

end


·朴素贝叶斯预测函数:

function [test_label,predict_prob]=nbv_predict(data,pxj,pj)

N=size(data,1);
wn=length(pj);
predict_prob(1:N,1:wn)=0;

for k=1:N
    for j=1:wn
        idx=(data(k,:)>0);
        predict_prob(k,j)=mul(pxj(j,idx))*pj(j);
    end
end
[~,test_label]=max(predict_prob');
end


function value=mul(vector)

    m=length(vector);
    value=1;
    
    for i=1:m
       value=value*vector(i); 
    end

end

·测试函数,随机生成10000个100维的数据样本,同时随机创建他们的类标(分为2类),测试100次取平均准确率。因为数据和类标都是随机生成的,所以当样本容量足够大时,朴素贝叶斯预测结果的准确率应该趋向于0.5。

clear all;
clc;

N=10000;
L=100;
time=100;
map=0;

for i=1:time
    data=rand(N,L);
    data=data-0.5;
    label=(rand(N,1)>0.5);

    train_data=data(1:50,:);
    train_label(1:50)=label(1:50);
    [pxj,pj]=nbc_train(train_data,train_label);

    test_data=data(51:100,:);
    test_label=label(51:100);
    [predict_label,p]=nbv_predict(test_data,pxj,pj);

    predict_label=(predict_label-1)';
    ap=sum((predict_label-test_label)==0)/length(test_label);
    map=map+ap;
    i
disp('          Classfication completed               ');
end

map=map/time;


经测试 map=0.5024,证明程序有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值