前两天有个朋友给我推荐了kaggle这个网站,感觉对于我这种想要学习却不太清楚如何实践的新手来说是个很有效的学习方式。
之前学的东西都比较乱,这边学一点,那边学一点,这次要一步一步的,从简到难好好搞一搞~
做这个的目的呢,主要是学习机器学习人工智能这方面的东西,通过具体的问题,把不同的算法放上去尝试,同时,也可以给想要学习的同学提供一些比较简单的方式~
之前看教程,感觉都是没有例子或者没有理论知识或者没有数据,或者理论知识讲的太专业,公式太多,有时候感觉很难下手,所以我还是通过这个系列把需要学的和做的都讲明白,让入门的人有一些良好的体验~
好了,废话不多说,开始正题
题目
连接:https://www.kaggle.com/c/titanic
这个问题大概的意思就是说,在泰坦尼克号撞冰山沉没的时候,由于没有足够的救生艇,导致不是所有人都能获救,虽然有幸运的成分在里面,但是有一部分群体获救的可能性更高,比如妇女小孩之类的人。你需要做的就是通过给定的数据,通过机器学习的方法,判断某个人是否能够生还。
简析
可以看出来这是一个二分类问题,所以我们需要一个分类器,我打算先用贝叶斯分类器搞一下,试试水,其实有其他的分类器,后面可以都试一试。
贝叶斯公式
首先可以看一下贝叶斯公式:
换个姿势可能更好理解一些:
这里所谓的求解对象,其实就是你关注的信息而已,你也可以关注别的信息,让其他的信息成为求解对象。贝叶斯公式求概率大概可以理解为:我知道过去发生了一些事情,在一件我关注的信息(求解对象)出现的时候,还有其他一些信息或者说特征,现在我掌握了除求解对象以外的信息,我关注的求解对象发生的概率是多少?
下面说一个简单的例子,也是我面试碰到过的问题,大概意思是说,我有两个完全一样的盒子,第一个盒子里放了2个红球和2个白球,另一个盒子里放了3个红球和1个白球,现在我从某一个盒子里拿了一个球,发现是红球,那么这个红球来自第一个盒子里的概率是多少?
我们定义:
P(A) = 从第一个盒子里取球的概率
P(B) = 取到红球的概率
根据前面的公式就可以算了,最后我们要求的就是
上面是贝叶斯公式简单的介绍,如果还是不太清楚就去找找别的教程吧~
贝叶斯分类器
那么贝叶斯分类器又是什么东西呢?结合我们要求解的问题,我们想要一个分类器,它的输入是乘客的各种信息(性别,年龄,舱位……),输出这个乘客是否生还。我们其实可以把乘客的信息作为输入信息,是否生还作为求解对象,根据给定训练数据,我们可以求出在某个信息下是否生还的概率和死亡的概率,取概率较大的那个,不就是一个分类器了吗?
假设我们有n个信息:
我们想要求解的对象就是是否存活,即:
利用贝叶斯公式,就有:
刚才也说了,我们要求生还概率和死亡概率两者中的较大值,两者中的分母是相同的,可以忽略,因此,我们要求的就是:
其中:
argmax 就是求最大值的坐标,这些值都可以算出来,我们就得到了一个贝叶斯分类器。
另外,虽然不需要求分母,但是我最开始写代码的时候是求了分母的,因为我想先算出个概率,然后比较一下谁比较大,但是我翻了个错误,是这样,当给定的n个事件都是互相独立的,那么就有:
但是,实际上对于这个问题,并不能用这个公式,因为事件并不是相互独立的,你可以想象当时我求出概率大于1时的懵逼心情,如果事件不是独立的,那么要求这个概率