ml 贝叶斯算法

贝叶斯算法
贝叶斯分类算法是统计学的一种分类方法,它是一类利用概率统计知识进行分类的算法。在许多场合,朴素贝叶斯(Naïve Bayes,NB)分类算法可以与决策树和神经网络分类算法相媲美,该算法能运用到大型数据库中,而且方法简单、分类准确率高、速度快。
由于贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际情况中经常是不成立的,因此其分类准确率可能会下降。为此,就衍生出许多降低独立性假设的贝叶斯分类算法,如TAN(tree augmented Bayes network)算法。
 

事件A在事件B(发生)的条件下的概率,与事件B在事件A的条件下的概率是不一样的。这句话我们可以这样理解:你喜欢一个妹子,这是事件A,妹子喜欢你的概率是B,记为P(B|A);那么P(A|B)是妹子喜欢你,你喜欢妹子的概率。这两个是不是不一样啊,因为大家保持单身的唯一理由就是:我喜欢的不喜欢我,喜欢我的,我不喜欢

妹子喜欢你的情况下,你喜欢妹子的概率=你喜欢妹子的情况下,妹子喜欢你的概率*你喜欢妹子的概率|妹子喜欢你的概率

下图是公式:

有拼写纠错的项目实战

在这里学习到了先验概率

https://www.cnblogs.com/yemanxiaozu/p/7680761.html 这里有详细的先验概率与后验概率的解释

简单来说就是在拟合的时候,高阶的拟合效果更好,尤其是n个点,n-1阶能完全拟合,这样会出现过拟合的现象。

为了使拟合曲线不出现过拟合现象,我们通常不采用高阶的多项式进行拟合。

下面是垃圾邮件过滤实例。中间用到了朴素贝叶斯

这就是朴素贝叶斯:

拼写纠错项目实战已完成,在这里不做过多的介绍。下面是源代码

import re, collections
 
def words(text): return re.findall('[a-z]+', text.lower()) 
 
def train(features):
    model = collections.defaultdict(lambda: 1)
    for f in features:
        model[f] += 1
    return model
 
NWORDS = train(words(open('big.txt').read()))
 
alphabet = 'abcdefghijklmnopqrstuvwxyz'
 
def edits1(word):
    n = len(word)
    return set([word[0:i]+word[i+1:] for i in range(n)] +                     # deletion
               [word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n-1)] + # transposition
               [word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet] + # alteration
               [word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet])  # insertion
 
def known_edits2(word):
    return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)
 
def known(words): return set(w for w in words if w in NWORDS)
 
def correct(word):
    candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
    return max(candidates, key=lambda w: NWORDS[w])
拼音纠错

调用函数:

correct('appl')

注意,训练集这里没有,需要自己搞。

 

posted @ 2018-09-11 12:12  ivanthor  阅读(205)  评论(0)    收藏  举报