= = 尽管试了很长时间,正确率也只能到75%,也许用其他的决策树方法能达到更高的效果吧。
这次主要用的是决策树方法去解决问题的,在机器学习实战的ID3决策树算法上进行扩展的。发现了机器学习实战决策树的一个bug,同时领会到决策树的一个局限性。都在文章里了,结构大致如下:
1 问题分析
2 解决方案
3 问题收获
1 问题分析
我们的问题和上一篇kaggle的一样,还是TitanicKaggle的预测问题。这次使用决策树方法。决策树的基本意图就是想通过不断分特征把所有的样本都分离开来,对应相应的分类结果,在这个题目里就是对应人员是否存货。然后把这个分离的方法提炼成模型,也就是我们的决策树,然后将新的数据按照同样的模型进行分类。
决策树的话,我们需要思考下面几个问题。
1.1 每个bin的混杂性。
根据决策树进行分类,分到最后的时候,所有的样本都被分到属于各自的bin里面。
从极限上考虑,最好的情况是,在利用各个特征进行分类的时候,每个样本都分到属于自己独特的那个bin里面,也就是一个萝卜一个坑,这样我们有新数据样本加 入的时候,就可以照猫画虎,对应到那个里面了。但是其实这个只是一个理想状况,真实的bin里面肯定是有这个类那个类的,举个例子,如果我们按照决策树分类的话,同样是一等舱,同样是妇女,同样是20-30岁,符合这样条件人里面,我们的rose活了,但是同样的一个少女却死掉了,唯独她缺少Jack这个人(但是我们的数据无法反应出来)这是很可能的。因此,基本上一个bin里面,有的符合有的不符合,但是我们决策树只能做到这个地步了,得给这个bin下个结论,要么这个bin是存活的,要么他们死掉。如何办呢?我们就计算这个bin的训练样本中存活的有多少,死亡的有多少。比如一等舱,妇女,20-30岁,这个bin里面有20个是存活的,3个是死掉的,那么我们就说这个bin是存活的。数据训练完,有新的测试样本如果进来,我们就判断她是活着的。
1.2 决策树分类次序的依据
决策树是根据多个特征进行分类的,比如像一等舱,妇女,20-30岁这样,我们是按照它是几等舱-->是什么性别的-->多大了.进行分类的。那么为什么是按照这个次序进行的?而不是先看年龄再看性别这种分类呢? 这涉及到决策树的贪心算法和熵判定方法。
决策树是贪心算法,什么是贪心算法,就是我保证每一步都是当前最好的决定。举个例子就是下棋的时候如果我的当前这个步最有利的话,我就走这一步,别人让给我个车,我吃了就好了,但是如果别人目的是为了让车去将军呢?那么我就玩完了。也就是说贪心算法保证每步最优,但是不一定整体是最优的。而且很可能根本不是最优的,也就是说我们废了这么大劲,也许到头来从模型上就不是最优的。这是完全有可能的,但是它至少有可能是次优的,这样做要比乱出牌好的多。
那么如何判定当前一步是最优的呢?我用熵计算方法作为依据,应用某个特征进行分类后,分类后集合的熵最小,就是我最好的方法.。为什么?熵是用来计
算混乱程度的。我们用这个公式计算熵:sum(-P*log2(P)),怎么理解?P是某个类别在集合里面出现概率,比如10个人的样本里面3个存活,7个走了。如果我按
照年龄特征将他们分成4个年少(2走2生)和6个年长(5走1生),那么分类后的熵就是-(0.5*log2(0.5)+0.5*log2(0.5))-(0.167*log2(0.167)+0.833*log2(0.833))=1.65, 而如果我们按照性别进行划分,3个女性(0走3生),7个男性(7走0生),这样计算分类后的熵是 -(1*log(1)-(1*log(1))=0 显然按照性别的划分更好(虽然实际数据中不太可能这样),因此这个是我们就根据熵选择按照性别这个特征先划分。
总之,熵就是计算混乱程度,一个集子里面各种类别越多,越杂,熵自然越大,如果越纯净,熵就越小。决策树就是找到当前最能使得划分后样本纯净度最小的那个特征作为这次划分的特征。
1.3 决策树是根据横纵特征进行划分。
决策树是根据特征进行划分的,比如Pclass舱等级,Sex性别,Age年龄等等几个横向维度进行划分。这个是横向的,而在特征中其实还有划分。离散变量特征比如Parch船上的父母数量,我们可以划分出0,1,2几种。对于连续变量,比如年龄,我们可以这样划分0-15岁幼年的,15-24青年,24-40成年 40+老年。这是在纵向上进行划分。决策树要做的就是利用横向和纵向的特征,联合进行划分。横向特征和纵向特征其实实质上都是划分的一个维度而已,只不过我们通过熵计算法计算横向维度的划分次序而已。