newLISP bayes算法使用
来源:互联网 发布:哔哩哔哩 mac 编辑:程序博客网 时间:2024/04/28 23:51
理解条件概率
要用bayes,先要理解条件概率,参考之前的文章理解条件概率
两阶段算法-训练和查询
现在来看看大名鼎鼎的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, 同时也表示不同的类别,所以也可以称之为traning set category.
我们在使用的时候,会事先经过一定的分析,将样本空间按照某种方法划分成几类数据集,每个数据集都用token list表示。因此,我们是带着目的来划分训练数据集,并为之提供良好的数据进行训练。另外,假定我们已经划分了3类,如果训练的时候只有一类数据,可以将另外两类数据用'() 作为参数,也是没有关系的。
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时候,增量训练都是最好的方法。
查询
最终都是为了查询。bayes-query函数的原型如下:syntax: (bayes-query list-L context-D [bool-chain [bool-probs]])
list-l 是一个token list,如同训练用的若干token list一样,context-D 是训练得到的上下文,包含了训练结果。后面两个参数不在此处讨论。
下面是一个很好理解的例子,三个traning set里面分别对应了三种类别的数据:颜色,人和编程语言,然后用一个包含了编程语言和人的token list来查询,
发现属于颜色分类的概率为0,属于编程语言和人的概率个有50%.
(bayes-train '("red" "blue" "yellow") '("girl" "boy" "uncle" "female") '("c++" "java" "newlisp") 'L)(3 4 3)> (bayes-query '("c++" "girl") L)(0 0.5 0.5)
这个例子很好理解,但是要注意,实际上训练的时候token应该会出现在多个token list(training set category)中,不大可能像这个例子一样仅在一个training set category中。
我们这里默认使用的是inverse Chi² 算法,需要保证不同的training set's categories要有相同的token出现:
If the inverse Chi² method is used, the total number of tokens in the different training set's categories should be equal or similar.
bayes查询使用如下条件概率公式为计算基础
假定有两个training set category
p(A|tkn) = p(tkn|A) * p(A) / ( p(tkn|A) * p(A) + p(tkn|B) * p(B) )
说明:
1. p(A|tkn) 是计算training set category A 在某个token出现时的条件概率
2. ( p(tkn|A) * p(A) 指的是 token和A同时出现的概率。
假定有N个training set category
p(Mc|tkn) = p(tkn|Mc) * p(Mc) / sum-i-N( p(tkn|Mi) * p(Mi) )
0 0
- newLISP bayes算法使用
- 使用MapReduce实现Bayes算法
- newlisp kmeans算法
- newlisp 使用crypto模块
- newlisp 使用gnuplot绘图
- newLisp使用初步
- Bayes分类算法
- Bayes 分类算法
- 分类算法:bayes
- 通俗易懂掌握Bayes算法
- 朴素bayes 算法
- mahout测试naive Bayes算法
- 机器学习之bayes算法
- Naive Bayes 朴素贝叶斯算法
- 3.1 贝叶斯算法Naive Bayes
- 用newLISP开发网站一 基本使用
- 在newLISP中使用正则表达式 一
- 在newLISP中使用正则表达式 二
- bootstrap的下拉菜单
- 【C++】(一)宏观导论
- [暖手][学习阶段-各路杂题][HDU-1164]Beat the Spread!
- Java系列(十八)__Java IO(2)
- windows安装PHP5.4+Apache2.4+Mysql5.5
- newLISP bayes算法使用
- APUE之信号中的一些基本概念
- HDU 2612 Find a way (BFS)
- Unix编程之size_t、ssize_t
- 《30天软件开发 告别瀑布拥抱敏捷》一书 读后总结
- 如何下载自己想看的电子书呢?
- Fedora14下共享PC文件夹
- C#使用Dotfuscator混淆代码以及加密
- Python学习笔记——Unicode