博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
机器学习——朴素贝叶斯分类器
阅读量:4310 次
发布时间:2019-06-06

本文共 1994 字,大约阅读时间需要 6 分钟。

贝叶斯分类是一类分类算法的总称,这类算法均已贝叶斯定理为基础,因此统称为贝叶斯分类。在贝叶斯分类器中,常用朴素贝叶斯,就类似于看见黑人,大多会认为来自非洲。

事件A在事件B(发生)的条件下的概率,与事件B在事件A(发生)的条件下的概率是不一样的,但他们有确定的关系,贝叶斯定理就是对在这种关系的陈述。

优点:

简单、高效、健壮。能应用到大型数据库中,方法简单且分类准确率高,速度快。

缺点:

相关属性不独立,会影响贝叶斯分类准确率。

改进方法:

降低独立性假设的算法, 例如,TAN(Tree Augmented Bayes Network)算法、贝叶斯网络分类器(Bayes Network Classifier,BNC)。

朴素贝叶斯分类步骤:

(1)设为一个待分类项,a为x的一个特征属性。

(2)有类别集合

 

(3)计算

(4)如果,则

总体来说,大致分为三个阶段:

 

实例介绍:

运用朴素贝叶斯算法根据客户的16个属性,为一家银行建一个分类器,判断客户是否愿意购买理财产品:

MATLAB实现代码:

%% ————————————2.朴素贝叶斯分类器——————————————%% load 'bank.mat'; names = bank.Properties.VariableNames;%使用数据文件,记录自变量和因变量的属性名 category = varfun(@iscellstr,bank,'Output','uniform'); %输出格式为数值格式。为字符串的返回结果为1,为数字的返回结果为0 for i = find(category)     bank.(names{i}) = categorical(bank.(names{i}));     %将bank中的属性创建分类数组。 end catPred = category(1:end-1); %记录除y值的是否为字符串的逻辑矩阵 dist = repmat({'normal'},1,width(bank)-1); %repmat(A,M,N)指将A中的内容赋值给M*N的矩阵,A可为字符串或者矩阵等。 dist(catPred) = {'mvmn'}; %将不为数值型的属性赋值为mvmn。 %预测变量 X = table2array(varfun(@double,bank(:,1:end-1)));%先将自变量转化为double类型,再将table转化为数组类型。 Y = bank.y; %将因变量赋值给Y disp('数据中YES&No的统计结果'); tabulate(Y) %求重复数字的个数使用tabulate,占比率 %%%设置交叉验证方式 cv = cvpartition(height(bank),'holdout',0.40); %height(bank)取bank的行数,采用holdout validation(保持验证),其中0.4*height(bank)的样本会作为测试集 Xtrain = X(training(cv),:); %training是交叉验证的训练函数 %training(cv)返回'holdout' or 'resubstitution'的逻辑变量 %training(c,i)返回'kfold' or 'leaveout'.的逻辑变量 %test是交叉验证的测试集函数 %test(cv)与training函数用法类似 Ytrain = Y(training(cv),:); Xtest = X(test(cv),:); Ytest = Y(test(cv),:); Xnum = [X(:,~catPred) dummyvar(X(:,catPred))]; %~catPred是指catPed~=0的列,即初始不为数值型的属性 %dummyvar是用于生成虚拟变量的函数,主要将某种类别转化为0和1组合的矩阵。即使用数值变量代表研究的样本子组。 Ynum = double(Y)-1; XtestNum = Xnum(test(cv),:); YtestNum = Ynum(test(cv),:); %训练分类器 Nb = NaiveBayes.fit(Xtrain,Ytrain,'Distribution',dist); %进行预测 Y_Nb = Nb.predict(Xtest); Yscore_Nb = Nb.posterior(Xtest); Yscore_Nb = Yscore_Nb(:,2); %计算混淆矩阵 disp('贝叶斯分类结果'); C_nb = confusionmat(Ytest,Y_Nb)

 

转载于:https://www.cnblogs.com/somedayLi/p/9555578.html

你可能感兴趣的文章
图像滤波
查看>>
猜年龄游戏
查看>>
博客园在线运行及一键转载
查看>>
zigbee
查看>>
字符串 专题
查看>>
【Maven】---Linux搭建Nexus3.X私服
查看>>
睿智计数器
查看>>
1.celery概述
查看>>
洛谷 P1057 传球游戏
查看>>
DAY-5 Linux系统用户、群组和权限
查看>>
一、MongoDB的下载、安装与部署
查看>>
数据结构整理
查看>>
4基本动画
查看>>
10个小技巧助您写出高性能的ASP.NET Core代码
查看>>
JavaScript中的 JSON 和 JSONP
查看>>
字符串相关工具类
查看>>
iOS:图标尺寸
查看>>
项目冲刺,20151118
查看>>
O055、Detach Volume 操作
查看>>
MyBatis学习(3)
查看>>