朴素贝叶斯0概率时不进行拉普拉斯平滑与进行了拉普拉斯平滑后正确率对比(德国信用卡案例)

1.导入德国信用卡数据

data = load('german.data-numeric');

2.进行数据处理,选取模型数据与测试数据

数据处理

% 最后一列变成0-1
for i = 1:x
    data(i,y) = data(i,y)-1;
end

选取数据

train_data = data(1:5,[1,2,25])
text_data = data(76,[1,2,25])

           先选取小样本数据,之后再扩大数据样本,这里选取了1-5行的1,2,25列作为模型数据,第76行的1,2,25列作为测试数据

 

3.接下来进行贝叶斯模型概率的计算

(1)当贝叶斯概率为0时不进行拉普拉斯平滑(即在当贝叶斯概率为0时不额外增加样本数据)

function [default,nodefault] = beiyesi_function(data,columns,value,index)

[x,y] = size(data);

p_default = 0; % 违约
for i = 1:x
    if data(i,index) == 0
        p_default = p_default+1;
    end
end

p_nodefault = 0; % 未违约
for i = 1:x
    if data(i,index) == 1
        p_nodefault = p_nodefault+1;
    end
end


% columns,value 且 违约
default = 0;
for i = 1:x
    if data(i,columns) == value && data(i,index) == 0
        default = default+1;
    end
end
default = default/p_default;


% columns,value 且 不违约
nodefault = 0;
for i = 1:x
    if data(i,columns) == value && data(i,index) == 1
        nodefault = nodefault+1;
    end
end
nodefault = nodefault/p_nodefault;

function [p0,p1] = beiyesi_train(train_data,text_data)
% 算测试集和模型集的大小
[x_train,y_train] = size(train_data);
[x_text,y_text] = size(text_data);

% 后验0的概率 后验1的概率
p0 = [];
p1 = [];
for i = 1:x_text
    for j = 1:y_text-1
        [p0(i,j),p1(i,j)] = beiyesi_function_old(train_data,j,text_data(i,j),y_text);
    end
end



default = 0; % 违约
for i = 1:x_train
    if train_data(i,y_train) == 0
        default = default+1;
    end
end
default = default/x_train;

nodefault = 0; % 未违约
for i = 1:x_train
    if train_data(i,y_train) == 1
        nodefault = nodefault+1;
    end
end
nodefault = nodefault/x_train;

p0(:,y_text) = 1;
p1(:,y_text) = 1;
for i = 1:x_text
    for j = 1:y_text-1
        p0(i,y_text) = p0(i,y_text) * p0(i,j);
        p1(i,y_text) = p1(i,y_text) * p1(i,j);
    end
    p0(i,y_text) = p0(i,y_text) * default;
    p1(i,y_text) = p1(i,y_text) * nodefault;
end

 主要算法思想为

先进行计算最后一列0跟1的概率

 然后计算测试样本(1,12)在概率1跟0时的概率

 

(2) 当贝叶斯概率为0时进行拉普拉斯平滑(即在当贝叶斯概率为0时额外增加一条样本数据)

由上方概率结果可知,此样本只有在P(12|1)时概率为0,导致后面计算P((1,12)|1)时的概率也为0

若在此时进行拉普拉斯平滑后(在样本数据后面自己增加一条当第三列为1时第二列是12的数据),其概率变成

 4.接下来计算贝叶斯的正确率

代码参考文章(6条消息) MATLAB朴素贝叶斯(德国信用卡案例)_huaye0101的博客-CSDN博客

(1)当没进行拉普拉斯平滑时小样本正确矩阵及正确率

 (2)当进行了拉普拉斯平滑时小样本正确矩阵及正确率

 

5.接着进行数据量的扩大(更容易比较出两者的区别) 

 将前800行作为模型数据,后200行作为测试数据

train_data = data(1:800,:)
text_data = data(801:1000,:)

 (1)当没进行拉普拉斯平滑时大样本正确矩阵及正确率

  (2)当进行了拉普拉斯平滑时大样本正确矩阵及正确率

6.总结

拉普拉斯平滑的核心思想:平等对待新出现的样本与特征值 。

在朴素贝叶斯概率等于0时使用拉普拉斯平滑后正确率会比没有使用拉普拉斯平滑后的正确率高

代码参考文章(6条消息) MATLAB朴素贝叶斯(德国信用卡案例)_huaye0101的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值