美文网首页
贝叶斯定理

贝叶斯定理

作者: oceanLong | 来源:发表于2017-04-17 23:08 被阅读32次

    贝叶斯定理

    引言

    在生活中,我们常常对于把握很大的事情,坚信不疑。假设我们有一个检测人是否有过吸毒经历的设备,它的准确率为99%。如果,我们用它检测出小区内,有一个邻居呈阳性,我们很难相信他不是一个瘾君子。

    然而事实是这样吗?

    假设小区有200人,我能够确定有1个人吸毒。经过上面的检测装置,查出了这个倒霉鬼,我们是否能够结案了?

    答案是否定的。我们不仅不能结案,我们甚至会得出一个很惊人的结论。我们冤枉了好人的概率有67%,我们的正确率只有33%。

    发表于1763年的贝叶斯定理像我们揭示了这个惊人的结论。贝叶斯推理的问题是条件概率推理问题,这一领域的探讨对揭示人们对概率信息的认知加工过程与规律、指导人们进行有效的学习和判断决策都具有十分重要的理论意义和实践意义。

    准备

    条件概率公式:

    P(A|B) = P(AB)/P(B)
    P(A|B)——在 B 条件下 A 的概率。即事件A 在另外一个事件 B 已经发生条件下的发生概率。
    P(AB)——事件A、 B同时发生的概率,即联合概率。联合概率表示两个事件共同发生的概率。A 与 B 的联合概率表示为 P(AB) 或者 P(A,B)。
    P(B)——事件B发生的概率。

    推导

    结合上面的例子:

    我们把小区居民是吸毒者定为事件A,通过检测装置呈阳性的概率为B。我们需要求得的是在检测为阳性的情况下,这个人是吸毒者的概率,即P(A|B)。

    通过上面的条件,我们可以得知:
    P(B|A) = 0.99
    P(A) = 0.005
    假设A‘ 为小区居民不是吸毒者
    P(B) = P(B|A) x P(A) + P(B|A') x P(A') = 0.99 x 0.005 + 0.01 x 0.995 = 0.0149
    根据条件概率公式:
    P(A|B) = P(AB)/P(B)
    P(B|A) = P(BA)/P(A)
    所以:
    P(A|B) = P(B|A) x P(A) / P(B) = 0.99 * 0.005 / 0.0149 = 0.332
    可以看到,这里与我们上面的结论相同,我们这次检测结果正确的概率只有0.33。

    这其中P(A)为先验概率 , P(A|B)为后验概率。我们可以看到,虽然检测装置不完全靠谱。但借助它99%的准确率,我们也将0.005的概率提升到了0.332。

    贝叶斯定理

    贝叶斯定理

    应用

    场景

    在机器学习中,我们在处理文本信息(如邮件过滤)时,经常会用到贝叶斯定理。贝叶斯定理本质上擅于解决已知P(Bi|A)和P(A),求P(A|Bi)的问题。
    比如我们将A定为垃圾邮件,Bi定为邮件中包含的各种垃圾特征。现在我们有一堆已经标定的数据,我们可以从中统计出,如果邮件是垃圾邮件,它包含各种垃圾特征的概率是多少。同时,我们也已知在我们的数据中,垃圾邮件的概率是多少,包含各种垃圾特征的邮件是多少。
    通过贝叶斯定理,我们就能够求出包含各种垃圾特征的邮件中,垃圾邮件的概率。

    其中朴素贝叶斯(NaiveBayes)算法就是,只要包含各种垃圾特征的邮件是垃圾邮件的概率是50%,我就认为它是垃圾邮件了(非常朴素却有效的想法)。

    工程实践

    我们使用python的sklearn进行工程实践。

    数据

    我们需要大量的邮件数据,然后将数据分为特征数据和标签数据。
    特征数据表示,这些邮件中包含了哪些垃圾特征。
    标签数据表示,这些邮件中哪些是垃圾邮件。
    这些数据的获取方式不是本篇重点,不赘述

    features_train,  labels_train = getTrainData()
    

    训练模型

    我们用sklearn中的高斯贝叶斯进行训练

    from sklearn.naive_bayes import GaussianNB
    clf = GaussianNB()
    clf.fit(features_train , labels_train)
    

    使用模型

    通过训练好的模型,预测数据。

    pred = clf.predict(features_test)
    

    验证准确率

    如果我们事先已经获得了features_test这组数据的标签,我们就可以对clf上面的结果进行验证,以确定我们模型的准确率。

    from sklearn.metrics import accuracy_score
    print accuracy_score(pred , labels_test)
    

    总结

    贝叶斯定理,推导简单,应用广泛。在搜索、信息过滤、机器学习中都有它的身影。通过对条件概率的变换,给我们带来了更客观的视角,和解决问题的方法。其中,朴素贝叶斯由于方法简单,我们非常容易选取想要的特征,这也降低了这个算法的使用门槛。

    同时,朴素贝叶斯将各特征都当作了独立事件,没有考虑特征之间的联系,这也是贝叶斯算法的局限性,使它不适用于特征关系非常密切的系统。

    以上。

    相关文章

      网友评论

          本文标题:贝叶斯定理

          本文链接:https://www.haomeiwen.com/subject/qlmxzttx.html