朴素贝叶斯分类器

实验2 朴素贝叶斯分类器

一、实验目的

(1)理解朴素贝叶斯分类器的工作原理。
(2)编程实现朴素贝叶斯分类器。

二、实验内容

1、(难度1)编程实现朴素贝叶斯分类器的训练。假设数据只涉及连续属性。

测试代码如下:

load('trainingData.mat');
load('testingData.mat');
[Params,prior,AllLabels] = NaiveBayesTrain(trAttr, trLabels);

(将执行正确的代码粘贴在此处,核心代码要求有注释)

function [params,prior,allLabels] = NaiveBayesTrain(trAttr,trLabels)
allLabels = unique(trLabels);
numClass = length(allLabels);
trAttr = trAttr(1:10,1:3);
trLabels = trLabels(1:10);
for i=1:numClass
    ind= find(trLabels==allLabels(i));
    indexClass{i,1} = ind;
    prior(i) = length(ind)/length(trLabels);
end
numAttr = size(trAttr,2);
params{numClass,numAttr}=[];
for attrIndex = 1:numAttr
       attrVals = trAttr(:,attrIndex);
       for i=1:numClass
            params{i,attrIndex}=getParamsContiAttr(attrVals,indexClass{i,1});
       end
end
end
 
function params1 = getParamsContiAttr(attrVals,index)
    attrValsThisClass = attrVals(index);
    params1(1)=mean(attrValsThisClass);  %Çó¾ùÖµ
    params1(1)=var(attrValsThisClass); %Çó•½²î
end
 
2、(难度2)编程实现朴素贝叶斯分类器的训练。假设数据既涉及连续属性,也涉及分类属性。

测试代码如下:

refund=[1 2 2 1 2 2 1 2 2 2]';
mar=[1 2 1 2 3 2 3 1 2 1]';
inc=[125,100,70,120,95,60,220,85,75,90]';
trAttr =[refund,mar,inc];
trLabels=[1 1 1 1 2 1 1 2 1 2]';
tstAttr=[2,2,120];
[type,Params,prior,AllLabels] = NaiveBayesTrain2(trAttr, trLabels);

(将执行正确的代码粘贴在此处,核心代码要求有注释)

function [type,Params,prior,AllLabels] = NaiveBayesTrain2(trAttr, trLabels)
allLabels = unique(trLabels);
numClass = length(allLabels);
trAttr = trAttr(1:10,1:3);
trLabels = trLabels(1:10);
for i=1:numClass
    ind= find(trLabels==allLabels(i));
    indexClass{i,1} = ind;
    prior(i) = length(ind)/length(trLabels);
end
numAttr = size(trAttr,2);
Params{numClass,numAttr}=[];
for attrIndex = 1:numAttr
       attrVals = trAttr(:,attrIndex);
       numAttrValsClass=length(unique(attrVals));
       maxAttrvals=max(unique(attrVals));
       if(isempty(find(rem(attrVals,1)~=0)))&&numAttrValsClass<10&&maxAttrvals==numAttr
           type(attrIndex)=0;
           for i=1:numClass
               Params{i,attrIndex}=getParamsCategoricalAttr(attrVals,indexClass{i,1});
           end
       else
           type(attrIndex)=1;
           for i=1:numClass
                Params{i,attrIndex}=getParamsContiAttr(attrVals,indexClass{i,1});
           end
       end
end
end
 
function Params1 = getParamsContiAttr(attrVals,index)
    attrValsThisClass = attrVals(index);
    Params1(1)=mean(attrValsThisClass);  %?¨®?¨´??
    Params1(1)=var(attrValsThisClass); %?¨®????
end
function Params1 = getParamsCategoricalAttr(attrVals,index)
    Params1=[];
    AllattrVals=unique(attrVals);
    numAttrValsClass=length(AllattrVals);
    AllattrVals4ThisClass=attrVals(index);
    nj=length(index);
    for i=1:numAttrValsClass
        nij=length(find(AllattrVals4ThisClass==AllattrVals(i)));
        Params1(i)=nij/nj;
    end
    
end
3、(难度3)编程实现朴素贝叶斯分类器的训练和分类。

(将执行正确的代码粘贴在此处,核心代码要求有注释)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值