m_NumClasses               训练数据中类的个数

m_NumAttributes            属性的个数

m_Instances                   训练数据

m_ClassDistribution        类的概率分布, 即P(C)。 其类型是Estimator, 估值器

m_Distributions[m_NumAttributes][m_NumClasses]  每个属性在每个类中的概率分布。 其类型也是Estimator。

1) 数值类型要用连续分布的Estimator, 如NormalEstimator

2) 名词性类型, 如(少年人、中年人、老年人), 需要离散化, 如DiscreteEstimator

然后增量式的训练。

针对每个样本, 修改m_Distributions[m_NumAttributes][m_NumClasses], 以及 m_ClassDistribution

识别时, 通过调用函数 distributionForInstance, 该函数返回正规化的一组值, 表示该待测样本在每个类中的概率

public void updateClassifier(Instance instance) throws Exception { if (!instance.classIsMissing()) { Enumeration enumAtts = m_Instances.enumerateAttributes(); int attIndex = 0; while (enumAtts.hasMoreElements()) { Attribute attribute = (Attribute) enumAtts.nextElement(); if (!instance.isMissing(attribute)) { m_Distributions[attIndex][(int)instance.classValue()]. addValue(instance.value(attribute), instance.weight()); } attIndex++; } m_ClassDistribution.addValue(instance.classValue(), instance.weight()); } }

核心是  Estimator, 如NormalEstimator

//data表示属性的值, weight表示该属性值所在样本的样本权重 public void addValue(double data, double weight) { if (weight == 0) { return; } data = round(data); m_SumOfWeights += weight; m_SumOfValues += data * weight; m_SumOfValuesSq += data * data * weight; if (m_SumOfWeights > 0) { m_Mean = m_SumOfValues / m_SumOfWeights; double stdDev = Math.sqrt(Math.abs(m_SumOfValuesSq - m_Mean * m_SumOfValues) / m_SumOfWeights); // If the stdDev ~= 0, we really have no idea of scale yet, // so stick with the default. Otherwise... if (stdDev > 1e-10) { m_StandardDev = Math.max(m_Precision / (2 * 3), // allow at most 3sd's within one interval stdDev); } } } /** * Get a probability estimate for a value * * @param data the value to estimate the probability of * @return the estimated probability of the supplied value */ //计算该属性的值为data的概率 public double getProbability(double data) { data = round(data); double zLower = (data - m_Mean - (m_Precision / 2)) / m_StandardDev; double zUpper = (data - m_Mean + (m_Precision / 2)) / m_StandardDev; double pLower = Statistics.normalProbability(zLower); double pUpper = Statistics.normalProbability(zUpper); return pUpper - pLower; }

对应到bogofilter的bayes,

类个数为2; 属性个数就是token的个数

Estimator就是简单的计数

训练时,

扫描待训练邮件的逐个token,增加其在对应类别中的计数===>m_Distributions;

增加对应类别的样本数====> m_ClassDistribution

分类时,

1)得到各个类的先验概率                            P(C)

2)乘以该属性在该类中出现的概率                P(D|C), D为待测文档,D由一组token组成

P(C|D) = P(C) *P(D|C)/P(D); 其中P(D)不必求,都一样, 只需要求出P(C)*P(D|C)即可

其中, P(D|C) = P(t1|C)*,,,*P(tn|C)........条件独立。 只需要 P(ti|C) 与 P(tj|C) 独立即可。 因此是条件独立

weka: naive bayes相关推荐

  1. 机器学习——Naive Bayes算法

    文章目录 一.符号型数据的Naive Bayes算法 1.例子数据集 2. 基础理论 2.1 条件概率 2.2 独立性假设 2.3 Laplacian 平滑 二.数值型数据的Naive Bayes算法 ...

  2. Spark MLlib 源码学习---朴素贝叶斯模型(Naive Bayes)

    朴素贝叶斯是机器学习中比较常用的一种模型,尤其在文本分类的问题上是比较常用的baseline.朴素贝叶斯本身训练速度快,具有可并行化程度高,可解释性好的优点,但由于其对特征之间的独立性假设不是很符合某 ...

  3. R构建朴素贝叶斯分类器(Naive Bayes Classifier)

    R构建朴素贝叶斯分类器(Naive Bayes Classifier) 目录 R构建朴素贝叶斯分类器(Naive Bayes Classifier) 朴素贝叶斯原理及分类器

  4. 数据挖掘十大经典算法之——Naive Bayes 算法

    数据挖掘十大经典算法系列,点击链接直接跳转: 数据挖掘简介及十大经典算法(大纲索引) 1. 数据挖掘十大经典算法之--C4.5 算法 2. 数据挖掘十大经典算法之--K-Means 算法 3. 数据挖 ...

  5. 朴素贝叶斯(naive bayes)

    朴素贝叶斯(naive bayes) 标签: Python 机器学习 主要參考资料:<机器学习实战><统计学习方法> 1.朴素贝叶斯分类原理 朴素贝叶斯法是基于贝叶斯定理和特征 ...

  6. matlab中的分类器使用小结(SVM、KNN、RF、AdaBoost、Naive Bayes、DAC)

    1.前言 目前了解到的MATLAB分类器有:K近邻,随机森林,朴素贝叶斯,集成学习方法,鉴别分析,支持向量机.现将其主要函数使用方法总结如下,更多细节需参考MATLAB 帮助文件. 设: 训练样本:t ...

  7. 朴素贝叶斯(Naive Bayes),“Naive”在何处?

    加上条件独立假设的贝叶斯方法就是朴素贝叶斯方法(Naive Bayes). Naive的发音是"乃一污",意思是"朴素的"."幼稚的".&q ...

  8. [机器学习] 分类 --- Naive Bayes(朴素贝叶斯)

    一.概率知识点复习 (1)条件概率 就是事件A在另外一个事件B已经发生条件下的发生概率.条件概率表示为P(A|B),读作"在B条件下A的概率". (2)联合概率 可以简单的理解为事 ...

  9. Mahout分类算法学习之实现Naive Bayes分类示例

    1.简介 (1) 贝叶斯分类器的分类原理发源于古典概率理论,是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类.朴素贝叶斯分类 ...

最新文章

  1. OpenCV(十二)漫水填充算法
  2. Python3.x(windows系统)安装libxml2库
  3. 记录java应用部署到k8s中
  4. weblit渲染过程
  5. 简而言之:JRunner
  6. 【OpenCV 例程200篇】74. 图像的抗混叠
  7. 微信小程序uni.getImageInfo踩坑大计划
  8. .arx 与此版本的 AutoCAD 不兼容。
  9. dqo变换_基于dqO变换的电压暂降检测方法研究
  10. pantum打印机驱动安装m6506_奔图m6506驱动程序
  11. MATLAB绘图——加强篇
  12. Mac App自动化测试
  13. 机器学习可以应用在哪些场景
  14. re模块 match serach findall 详解
  15. 李阳和他的疯狂英语(r5笔记第46天)
  16. 特征图注意力_深度学习入门之注意力机制
  17. 方法finalize()的应用
  18. 中英文说明书丨艾美捷HEK293T宿主细胞蛋白ELISA试剂盒
  19. 考研最易出现的几种心理状态,让人崩溃!
  20. 【解救Ros】CLB的Ros小车imu校正,角速度校正,线速度校正过程

热门文章

  1. 自己动手实现的 Spring IOC 和 AOP - 下篇
  2. ThreadPoolExecutor源码解析(二)
  3. Spring中事务内部调用引发的惨案
  4. Xftp使用教程——问答方式
  5. 美团O2O排序解决方案——线下篇
  6. java学习笔记16--I/O流和文件
  7. 程序员面试题精选100题(12)-从上往下遍历二元树[数据结构]
  8. Sed教程(一):简介、环境设置、工作流程
  9. 理解Spark的核心RDD
  10. 2019年,你需要关注这些Node API和Web框架