还是第 3 章那 891 名乘客,还是猜谁能活下来。这一次按算法竞赛的做法走一遍:造特征、补缺失、交文件,再看排行榜上的名次有多少是运气。
数据说明:891 名乘客和第 3 章实验一是同一批,按公开的泰坦尼克号乘客数据重建,年龄不详的 174 人按真实比例保留。模型用第 3 章学过的随机森林。
这一步看什么原始六列是舱位、性别、年龄、票价、同行家人数和登船港口。右边表里几组人的生还率差得很远,把这些分组算成新的一列交给模型,看分数能涨多少。
分数用五折交叉验证算:891 人分成五份,轮流拿一份当测试集、其余四份训练,取五次准确率的平均。年龄不详的人先用中位数(—)填上。
| 这一组人 | 人数 | 生还率 |
|---|
原始六列的分数是 79.6%。加一列新特征,分数在 79% 到 81% 之间,最多高出 1.2 个百分点。只加“小男孩”反而低了 0.4 个百分点,只差三四个人。
随机森林的树能自己按性别、年龄切出“男孩”这一组,替它算好这一列帮助不大。一个百分点不到九个人,第 03 步会看到,这么小的差距很容易被运气盖住。
这一步看什么模型不认识空着的格子,年龄不详的 174 人要先处理。比一比四种做法,打分有两种办法:各自在剩下的人身上考,或者都考年龄有记录的 717 人。
| 做法 | 人数 | 分数 | 名次 |
|---|
各自考各自的时候,“丢掉这些人”得分最高,81.9%,可它只考了年龄有记录的 717 人。都考这 717 人时,它排到最后,80.2%,这种比法下它训练时也少了这 174 人。分数只有在同一批人身上算出来,才能放在一起比。
提交文件第一行是列名 PassengerId(乘客编号)和 Survived(是否生还),下面每位乘客一行,生还概率过了 0.5 写 1,否则写 0。这里用 891 人演示,比赛时要给 418 名不知道结局的乘客交答案,一个都不能少,所以不能丢掉年龄不详的人。
这一步看什么比赛把不公布答案的乘客分成两半,公开榜的分数随时能看,私榜的分数赛后才公布,最终名次按私榜排。这里把 891 人分成 535 人训练、178 人算公开榜、178 人算私榜,让 42 个模型各交一份答案。
每洗一次,891 人重新分成三份,42 个模型重新训练、交答案。11 号模型用原始六列加“小男孩”,30 棵树。
| 洗牌 | 第一名 | 私榜名次 | 11 号公开分 |
|---|
连洗五次,公开榜第一名五次各不相同,私榜名次从第 1 名到第 38 名都有。11 号模型的设置一点没改,公开榜分数却在 73.6% 到 83.7% 之间跳。
公开榜只有 178 人,多猜对一个人,分数就高 0.56 个百分点。42 个模型的公开榜分数最高最低只差四到六个百分点,也就是七到十一个人,换一批人就可能翻过来。
前面三步的结果会自动写进报告,题目按你实际看到的情况回答。