newLISP bayes算法

理解条件概率

在理解条件概率的前提下,参考之前的文章理解条件概率

两阶段算法-训练和查询

现在来看看大名鼎鼎的bayes算法。bayes分成训练和查询两个阶段。训练指的是对样本数据集的训练,从而找出规律。

newlispe提供了bayes-train函数

训练

先来看看函数原型:

syntax: (bayes-train list-M1 [list-M2 ... ] sym-context-D)

list-M1 [list-M2 ...] 是输入参数,都是一堆list,list中的元素可以是symbol或者string, 在bayes中,这些元素有一个规范的名称,叫做token. 因此list-M1 ... 这些称之为token list.

bayes-train函数实际上就是统计每个token在这些输入的list中出现的次数,然后将统计结果以key/value的形式存入context中,也就是sym-context-D表示的context。

现在来看一个例子,token都是symbol, 一共有两个token list,训练结果存入context ‘L中

> (bayes-train ‘(A A B C C) ‘(A B B C C C) ‘L)
(15 18)
> (symbols L)
(L:A L:B L:C L:L L:total)
> 

用symbols函数显示了结果L中有若干个symbol, 其中total是总计,现在逐一显示它们的值。

> L:A
(2 1)
> L:B
(1 2)
> L:C
(2 3)
> L:total
(5 6)

可以看到token A的次数在两个token list中分别是是2和1次,B和C次数分别是(1 2)和(2 3)次,总数是(5 6)

key是token value是在不同token list中的频次。

token也可以是string,不过注意,在结果context中,key是用_开头的,比如:

(bayes-train ‘("one" "two" "two" "three")
             ‘("three" "one" "three")
             ‘("one" "two" "three") ‘S)   

在S中,key是_one, _two和_three。

这些token list,逻辑上表示的是token的排列顺序。token list可以包含百万的token,比如用于自然语言训练。

增量训练

值得注意的是,训练是可以不断进行的,如果再调用一次,你会发现token的频次是在递增的。比如:

> (bayes-train ‘(A A B C C) ‘(A B B C C C) ‘L)
(10 12)
> L:A
(4 2)
> L:total
(10 12)

这是个好消息,我们每次可以将L的结果保存在数据库中,以后有新的训练样本过来,可以继续训练,而不是从头开始。i而且,如果的确已经通过其他手段获得了token的频次,我们可以跳过一次训练,直接将结果保存在context中,帮助后续的训练。

新的token也可以加入进来,bayes-train函数能够正确的更新结果。

当训练集非常大的时候,或者训练数据i随着时间不断增长的i时候,增量训练都是最好的方法。

查询

最终都是为了查询。

时间: 2024-07-29 11:58:09

newLISP bayes算法的相关文章

Microsoft Naive Bayes 算法——三国人物身份划分

Microsoft朴素贝叶斯是SSAS中最简单的算法,通常用作理解数据基本分组的起点.这类处理的一般特征就是分类.这个算法之所以称为“朴素”,是因为所有属性的重要性是一样的,没有谁比谁更高.贝叶斯之名则源于Thomas Bayes,他想出了一种运用算术(可能性)原则来理解数据的方法.对此算法的另一个理解就是:所有属性都是独立的,互不相关.从字面来看,该算法只是计算所有属性之间的关联.虽然该算法既可用于预测也可用于分组,但最常用于模型构建的早期阶段,更常用于分组而不是预测某个具体的值.通过要将所有

newlisp kmeans算法

kmeans是经典的聚类算法,newlisp提供了函数,同样分为train和query两个阶段. kmeans的算法目的是将训练数据划分成k个类,按照一定的算法动态的选择k个中心点.下面是个例子,我添加了中文注释: (set 'data '( (6.57 4.96 11.91 0.9) (2.29 4.18 1.06 0.8) (8.63 2.51 8.11 0.7) (1.85 1.89 0.11 0.6) (7.56 7.93 5.06 0.6) (3.61 7.95 5.11 0.8) (

基于Naive Bayes算法的文本分类

理论 什么是朴素贝叶斯算法? 朴素贝叶斯分类器是一种基于贝叶斯定理的弱分类器,所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关.举个例子,如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果.尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的. 朴素贝叶斯分类器很容易建立,特别适合用于大型数据集,众所周知,这是一种胜过许多复杂算法的高效分类方法. 贝叶斯公式提供了计算后验概率P(X|Y)的方式: 其

Spark ML下实现的多分类adaboost+naivebayes算法在文本分类上的应用

1. Naive Bayes算法 朴素贝叶斯算法算是生成模型中一个最经典的分类算法之一了,常用的有Bernoulli和Multinomial两种.在文本分类上经常会用到这两种方法.在词袋模型中,对于一篇文档$d$中出现的词$w_0,w_1,...,w_n$, 这篇文章被分类为$c$的概率为$$p(c|w_0,w_1,...,w_n) = \frac{p(c,w_0,w_1,...,w_n)}{p(w_0,w_1,...,w_n)} = \frac{p(w_0,w_1,...,w_n|c)*p(c

(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 关联规则分析算法)

前言 本篇继续我们的微软挖掘算法系列总结,前几篇我们分别介绍了:Microsoft决策树分析算法.Microsoft聚类分析算法.Microsoft Naive Bayes 算法.Microsoft 时序算法,后续还补充了二篇结果预测篇.Microsoft 时序算法——结果预算+下期彩票预测篇,看样子有必要整理一篇目录了,不同的算法应用的场景也是不同的,每篇文章都有它自己的应用场景介绍,有兴趣的同学可以参阅.本篇我们总结微软挖掘算法系列中一款比较重要的算法:Microsoft关联规则分析算法,根

分类算法总结

      目前看到的比较全面的分类算法,总结的还不错.       主要分类方法介绍解决分类问题的方法很多[40-42] ,单一的分类方法主要包括:决策树.贝叶斯.人工神经网络.K-近邻.支持向量机和基于关联规则的分类等:另外还有用于组合单一分类方法的集成学习算法,如Bagging和Boosting等.      (1)决策树       决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序.无规则的实例中推理出以决策树表示的分类规则.构造决策树的

微软数据挖掘算法:结果预测篇

本文原文地址:(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(结果预测篇) 前言 本篇文章主要是继续前几篇微软数据挖掘算法:Microsoft 决策树分析算法(1).微软数据挖掘算法:Microsoft 聚类分析算法(2).微软数据挖掘算法:Microsoft Naive Bayes 算法(3),算法介绍后,经过这几种算法综合挖掘和分析之后,对一份摆在公司面前的人员信息列表进行推测,挖掘出这些人员信息中可能购买自行车的群体,把他们交个营销部,剩下的事就是他们无情的对这群团体骚扰.推荐.

hadoop+mahout部署及20newsgroups经典算法测试

--------------------------------------------------------------------------第一阶段:hadoop的伪分布式安装 第二阶段:mahout的安装 第三阶段:20newsgroups的bayes算法测试------------------------------------------------------------------------- 注意:安装完vmwaretools必须重启centos才可以生效第一阶段:hado

《BI那点儿事》数据挖掘各类算法——准确性验证

准确性验证示例1:——基于三国志11数据库 数据准备: 挖掘模型:依次为:Naive Bayes 算法.聚类分析算法.决策树算法.神经网络算法.逻辑回归算法.关联算法提升图: 依次排名为: 1. 神经网络算法(92.69% 0.99)2. 逻辑回归算法(92.39% 0.99)3. 决策树算法(91.19% 0.98)4. 关联算法(90.60% 0.98)5. 聚类分析算法(89.25% 0.96)6. Naive Bayes 算法(87.61 0.96) Naive Bayes算法——分类矩