朴素贝叶斯分类

朴素贝叶斯分类

朴素贝叶斯

关于概率统计

世界时确定还是不确定的?这是个问题。一年四季,不断轮回,但是每年都是不一样的冬天,有时是暖冬有时候是冷冻。又比如投掷一个篮球,有时能仍10米有时能仍15米,这可能跟有没有吃饱有关,从这层面讲距离是不确定的。但是无论如何不可能超过100米,吃菠菜也不好使,从这层面讲该事件有时“相对”确定的。那么如何才能真实的建模这些事实呢?

概率论提供了模糊的数学方法,用来描述不确定的环境。利用概率既可以反映现实中的确定性和不确定性。如上例投掷篮球的例子,那个经过统计(假如)得到投掷5-10米的距离为95%,而100米的概率为0%。

其实我们在日常生活的交流中,包含了大量的概率原理,如果我们说给你个篮球,让你使劲投掷,一定小于15米距离,此处“一定“就包含了该事件的可信度,”一定“表达了想当强的期望,可以认为概率达到了95%。可见使用概率统计原理建模现实非常的适合。

总结使用统计概率进行非确定性建模的原因有:

  • 无法穷举所有可能;万千世界、芸芸众生,有无尽的可能,任何尝试穷举所有可能的行为都是可笑的。拿投掷篮球的例子,我们无法列举出世界上所有人的数据,只能寻找代表性的例子进行推断和估计。
  • 理论缺失;尽管我们已经知道物体总会下落,刮风总会下雨,夏去秋来,面朝大海春暖花开,但仍有太多事物、规律使我们没有掌握的,比如布朗运动。这是可以用概率统计进行分析。
  • 参数测试的复杂性;即使已经有足够的理论知识,有时获取足够的参数也是相当困难的。比如球体下落速度跟空气阻力有关,但是风速、空气湿度有很大的不确定性,难以测量,故可以使用估计值方便计算。

全概率分布——由因知果

假如你写C++,你可能有如下的领域知识:
尽可能使用智能指针、避免使用多线程竞争、压力测试可以有效保证程序稳定。

假设经过统计不使用智能指针有10%的概率crash,使用多线程的有30%概率crash,那么某Boss允许某Coder开发了一个没有智能指针、多线程、未测试的c++程序,推断该程序crash的概率。

典型的由因推果。可以使用全概率公式得到结果。

有假设H,以及状态集合{X|Xi,i=1,2,3…},则全概率公式:

P(H) = …..

由此得到该程序Crash的概率为:

P(crash) =

由果推因——贝叶斯方程
已知某C++ 程序crash了,到底最有可能是什么原因呢?
TODO 贝叶斯方程。。。。。

朴素贝叶斯分类

还是推荐手机的例子,接着上次url的例子继续,上次使用kNN 原则做到推荐计算。这次使用朴素贝叶斯分类法完成推荐。
建模如下,已知目标手机M、I、N,已知某人年龄age和收入income,求最哪款手机最适合,即求Max(P(Ci|age,income)) 的Ci。
应用贝叶斯公式展开如下:

1
Max(P(Cell|age,income)) = P(age,income|Cell) * P(Cell) / P(age.income)