原理知道一百遍不如自己动手写一遍,当然,现在基本上不需要自己来写算法的底层code了,各路大神们已经为我等凡夫俗子写好了,直接调用就行。

这里介绍在MATLAB中和Python中应用贝叶斯算法的小例子。

1、matlab实现朴素贝叶斯算法

先load matlab中自带的数据集

load fisheririsX = meas(:,3:4);Y = species;tabulate(Y)%返回概率表格

用朴素贝叶斯算法进行拟合,大家可以注意下matlab的机器学习算法的命名规则,都是以fit开头,中间一个字母'c'或者'r', 'c'代表是分类算法(classification),'r'代表回归算法(regression),后面的字母就是算法的通用名称。

以下是对X、Y进行拟合,指定Y变量中分类的名称分别为'setosa', 'versicolor' 和 'virginica'

Mdl = fitcnb(X,Y,'ClassNames',{'setosa','versicolor','virginica'})

Mdl =   ClassificationNaiveBayes              ResponseName: 'Y'     CategoricalPredictors: []                ClassNames: {'setosa'  'versicolor'  'virginica'}            ScoreTransform: 'none'           NumObservations: 150         DistributionNames: {'normal'  'normal'}    DistributionParameters: {3x2 cell}这里返回了贝叶斯分类器的各种参数,包含分类名称、数据行数是否归一化等。

在matlab中,默认每一个特征的都符合高斯分布,拟合结果中也计算了每一个特征的均值和方差。

假如我们想看分类为'setosa'类的X的第一个特征的均值和方差。

setosaIndex = strcmp(Mdl.ClassNames,'setosa');estimates = Mdl.DistributionParameters{setosaIndex,1}estimates =

均值是1.4620,方差是0.1737

接下来我们将拟合结果可视化,让大家更直观地感受拟合效果。

figure 打开一个新的画布gscatter(X(:,1),X(:,2),Y);%画出散点图h = gca;cxlim = h.XLim;%获取x轴坐标cylim = h.YLim; %获取y轴坐标hold onParams = cell2mat(Mdl.DistributionParameters);%获取高斯分布的参数Mu = Params(2*(1:3)-1,1:2); % 提取均值列Sigma = zeros(2,2,3);for j = 1:3    Sigma(:,:,j) = diag(Params(2*j,:)).^2; % Create diagonal covariance matrix    xlim = Mu(j,1) + 4*[1 -1]*sqrt(Sigma(1,1,j));    ylim = Mu(j,2) + 4*[1 -1]*sqrt(Sigma(2,2,j));ezcontour(@(x1,x2)mvnpdf([x1,x2],Mu(j,:),Sigma(:,:,j)),[xlim ylim])% 绘制多元正态分布的等高线endh.XLim = cxlim;%设置X轴显示范围h.YLim = cylim;%设置Y轴显示范围title('Naive Bayes Classifier -- Fisher''s Iris Data')xlabel('Petal Length (cm)')ylabel('Petal Width (cm)')hold off

默认情况下,先验类概率分布是根据数据集计算的各类的相对频率分布,在这种情况下,对于每个分类,其相对频率分布均为33%。但是假如你知道在总样本中50%的'setosa',20%是'versicolor',30%是' ViGiCina’。你可以在训练分类器的时候指定先验概率。

prior = [0.5 0.2 0.3];Mdl = fitcnb(X,Y,'ClassNames',classNames,'Prior',prior)%指定每一类的概率

使用10倍交叉验证估计两个模型的交叉验证误差。

rng(1); % For reproducibilitydefaultCVMdl = crossval(defaultPriorMdl);defaultLoss = kfoldLoss(defaultCVMdl)CVMdl = crossval(Mdl);Loss = kfoldLoss(CVMdl)

2、Python(sklearn实现贝叶斯算法)

2.1 利用GaussianNB类建立简单模型.

import numpy as npfrom sklearn.naive_bayes import GaussianNBX = np.array([[-1, -1], [-2, -2], [-3, -3],[-4,-4],[-5,-5], [1, 1], [2,2], [3, 3]])y = np.array([1, 1, 1,1,1, 2, 2, 2])clf = GaussianNB()  #默认priors=Noneclf.fit(X,y)GaussianNB(priors=None)

2.2 经过训练集训练后,观察各个属性值

clf.priors  #无返回值,因priors=None

clf.set_params(priors=[0.625, 0.375])  #设置priors参数值GaussianNB(priors=[0.625, 0.375])clf.priors  #返回各类标记对应先验概率组成的列表clf.class_count_ #获取各类标记对应的训练样本数clf.sigma_#获取各个类标记在各个特征上的方差

matlab算法用python做_机器学习笔记—朴素贝叶斯算法实现(matlab/python)相关推荐

  1. 机器学习实战---朴素贝叶斯算法实现+使用K折交叉验证(代码详解+创新)

    <机器学习实战朴素贝叶斯算法实现+使用K折交叉验证> 未经允许,不得擅自转载! 提供数据集如下(永久有效,需要的自行下载): 链接:https://pan.baidu.com/s/1Sv0 ...

  2. 朴素贝叶斯 php,PHP实现机器学习之朴素贝叶斯算法详解.pdf

    PHP实实现现机机器器学学习习之之朴朴素素贝贝叶叶斯斯算算法法详详解解 本文实例讲述了PHP实现机器学习之朴素贝叶斯算法.分享给大家供大家参考 具体如下: 机器学习已经在我们的生活中变得随处可见了.比 ...

  3. 机器学习之朴素贝叶斯算法原理+Python实现

    朴素贝叶斯 1.简介 ​ 贝叶斯分类算法是统计学中的一种概率分类方法,朴素贝叶斯分类是贝叶斯分类中最简单的一种.其分类原理就是利用贝叶斯公式根据某特征的先验概率计算出其后验概率,然后选择具有最大后验概 ...

  4. 机器学习之朴素贝叶斯算法

    作者:RayChiu_Labloy 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 目录 贝叶斯公式与朴素贝叶斯算法 贝叶斯公式推导 用机器学习的视角理解贝叶斯公式 NB ...

  5. 机器学习之朴素贝叶斯算法原理

    朴素贝叶斯(naive Bayes)法是基于贝叶斯定理与特征条件独立假设的分类方法.它和其他绝大多数的分类算法都不同. 对于大多数的分类算法,比如决策树,KNN,逻辑回归,支持向量机等,他们都是判别方 ...

  6. 机器学习:朴素贝叶斯算法与垃圾邮件过滤

    简介 贝叶斯算法是由英国数学家托马斯·贝叶斯提出的,这个算法的提出是为了解决"逆向概率"的问题.首先我们先来解释下正向概率与逆向概率的含义: 正向概率:假设一个箱子里有5个黄色球和 ...

  7. 【机器学习】朴素贝叶斯算法

    朴素贝叶斯(Naive Bayes)是经典的机器学习算法之一,也是为数不多的基于概率论的分类算法.由于朴素贝叶斯计算联合概率,所以朴素贝叶斯模型属于生成式模型.经典应用案例包括:文本分类.垃圾邮件过滤 ...

  8. 机器学习(7): 朴素贝叶斯算法 小结及实验

    文章目录 1 朴素贝叶斯简介 2 条件概率与全概率公式 3 贝叶斯推断 4 引例 5 朴素贝叶斯算法分类 (1) GaussianNB (2) MultinomialNB (3) BernoulliN ...

  9. 机器学习基础 朴素贝叶斯算法

    文章目录 一. 朴素贝叶斯算法简介 二.概率基础复习 1.概率定义 2.案例:判断女神对你的喜欢情况 3.联合概率.条件概率与相互独立 4.贝叶斯公式 4.1 公式介绍 4.2 案例计算 4.3 文章 ...

最新文章

  1. 数论重大突破:120年后,希尔伯特的第12个数学难题借助计算机获得解决
  2. Python3 list 自定义比较函数
  3. scanf函数和printf函数
  4. Load-time relocation of shared libraries
  5. Winform中设置ZedGraph的颜色填充使用Fill
  6. OpenJudge 2796: 数字求和
  7. Linux目录结构介绍-http://yangrong.blog.51cto.com/6945369/1288072
  8. Linux下的lua和boost c++的搭建和安装
  9. Hibernate中1+N问题以及解决方法
  10. codeblocks 调试
  11. python 静态方法_Python编程思想(25):方法深度解析
  12. webpack配置:打包第三方类库、第三方类库抽离、watch自动打包、集中拷贝静态资源...
  13. 拓端tecdat|R语言对HullWhite短期利率模型仿真
  14. Atitit 引流矩阵与矩阵引流 推广方法 attilax总结
  15. 阿里云域名注册和怎么使用(域名解析)
  16. unity3d:粒子随摄像机远近有大小变化bug
  17. C 不常见的一些晦涩语法
  18. opencv3.4.4 +contrib模块在win10+vs2017的编译和配置
  19. 微信公众号Makrdown编辑器,语法你懂吗?
  20. 【学习笔记】欧拉公式证明(定义法、泰勒公式法)

热门文章

  1. 该拒绝MSN Messager了
  2. Python 命令行之旅:深入 argparse(二)
  3. Oracle Restart能够用来给Oracle GoldenGate 做 High Availability 使用么?
  4. html5+css3动画学习总结
  5. codevs 2651 孔子教学——同桌
  6. 【CodeVS】p1174 靶形数独
  7. 如何运行 PPAS上的pgpool-II
  8. 阿里云数据库RDS MySQL 物理全备文件数据恢复至自建数据库Mysql 5.7中
  9. Centos7配置Samba服务实现与Windows文件共享
  10. CentOS 8源码安装Zabbix5.0