如何理解贝叶斯公式?我可以借助面向对象的思想去理解它.
假设我有很多JavaBean,
class Bean1 {
String porpertyX=value1
//其他属性......
}
class Bean2{
String porpertyX=value2
//其他属性......
}
//其他JavaBean......
不同的Bean(Bean1,Bean2,...)就可以看作不同的类的事物,
然后这些事物都有共同的属性(生物上叫性状),
一个属性可以有不同的值(也可以叫特征,生物上叫表现型),表现型一般是可以直接得到(观测到)的,举例如下:
class 成熟的西瓜 {
Boolean 瓜蒂是否掉落
float 西瓜体积
float 含糖量
//......
}
class 不成熟的西瓜 {
Boolean 瓜蒂是否掉落
float 西瓜体积
float 含糖量
//......
}
根据经验我们知道:
P(西瓜瓜蒂掉落|西瓜成熟)的概率是比较大的,
翻译成面向对象的语言就是:
已知Class1有个属性porpertyX,如果你确定了某个class为Class1的时候,那么很大概率下porperty1∈value1,
这其实就是简单的因果思维,由因得果.
那么现在我反过来,已经知道某个class的porperty1∈value1,那么我判断这个class就是Class1的概率(把握)是多少?
已知:
求:
核心问题就是这两个条件概率的转化,这就要用到贝叶斯公式了:
具体推到我就不写了.
所以我们能否以西瓜的半径判断西瓜是否成熟呢?
不行,因为P(所有水果摊位上出现大西瓜)和P(西瓜大|西瓜成熟)几乎都是1,所以结果就很滑稽了.
这在机器学习中是比较有用的,因为它要做分类的时候和我们一样也是通过判断事物的属性,
做分类的主要两个要素:
1.选择哪个属性(特征)
2.根据特征决定分类结果
人可以依据逻辑推理,经验总结来完成这两步,
但是机器呢?它不会逻辑推理判断,简单粗暴的方法就是统计方法,反正它算的快.
贝叶斯公式这么一看就好像是专门为它准备的一样,
1.选择用哪个特征:
给它确定数量的内部属性明确的Class1,Class2,Class3的足够多对象clss11,class12,...,class1n,clss21,class22,...,class2m,
clss31,class32,...,class3k,然后它依次选取所有的属性porperty1,porperty2,...,porpertyi
每选定一个porpertyi(取值为valuei),上面贝叶斯公式的右边是可求的,就可以得到当porpertyi取valuei时,判断这个class就是Class1的把握,
只要这个概率比较大(如超过50%),那么它就可以当特征了,好开心.
2.根据特征判断分类结果:
假设经过上一步我已经得到了可用的3个特征以及它们的值,记为porperty1(value1),porperty2(value2),porperty3(value3),
那么以后每遇到class,我就抽它的这三个porperty对应的值,
然后判断它的value集合和我的value集合的合程度.
这就是使用贝叶斯公式抽取特征并进行判断的基本原理和思想,下面是一些个人认为的拓展内容:
1.抽取特征所用的数据集,不同类别的数据比例是否需要和现实生活中的拟合?如果不拟合会对抽取出的特征有怎样的影响?
(我取了几个特值也没太想明白)
2.其实你除了要遍历所有的属性,还要在每取到一个属性下遍历它的可能值
3.根据抽取出的特征时计算出的左边的概率的不同在判断的时候加权