1912 年泰坦尼克号沉没,船上 891 名乘客的名单留了下来,每人的舱位、性别、年龄都有记录,谁生还也是已知的。本实验从这 891 条记录中找出规律,再用这些规律去判断一位陌生乘客是否生还。整个过程分三步走:先由人自己找规律,再把找规律的工作交给机器,最后检验找出来的规律是否可信。
本实验围绕一个问题展开:泰坦尼克号上 891 名乘客中谁生还了,这件事能不能从舱位、性别、年龄这些记录里看出来。六个环节分成两段。第 01 节至第 03 节由人动手定规则,弄清特征、标签、阈值、决策边界这几个概念在数据上分别对应什么。第 04 节至第 05 节把定规则的工作交给机器,看决策树怎样自动找门槛,以及为什么树长得太深反而会变差。
| 实验环节 | 对应课件 | 本环节练习的知识点 |
|---|---|---|
| 01 认识数据:特征与标签 | 第一节 · 第 03 页 | 数据这一要素,特征与标签分别指什么 |
| 02 一个特征加一道门槛 | 第一节 · 第 07、08 页 | 阈值、决策边界、准确率与混淆矩阵 |
| 03 加一个特征就一定更好吗 | 第二节 · 第 14 页 | 线性不可分,特征要切开原来切不开的人 |
| 04 决策树:让机器自己定门槛 | 第三节 · 第 22 至 25 页 | 信息增益、树的深度、训练集与测试集、过拟合 |
| 05 随机森林:多棵树投票 | 第三节 · 延伸 | 多个模型投票为什么能提高成绩 |
| 06 实验报告 | 全实验 | 整理实验数据,归纳结论 |
课本第一节第 03 页讲的三要素里的数据。机器学习的第一步是把要研究的对象变成一张表:每一行是一位乘客,中间几列是特征,最后单独一列写着答案,叫标签。本节要做的是看清这张表,并找出哪些特征和标签之间有关系。
这份数据共 891 位乘客。特征有六个:舱位等级、性别、年龄、票价、同行家人、登船港口。标签只有一个,就是这位乘客是否生还。下面左图中每个小方块是一位乘客,深色表示生还,浅色表示未生还,深浅代表的就是标签。
性别这个特征,女性组和男性组的生还率相差 50 多个百分点,柱子一高一矮非常明显。舱位等级也差得比较多。登船港口这个特征,各组之间只差十几个百分点,三根柱子高度接近。
判断一个特征有没有用,就看它能不能把标签不同的人分到不同的组里去。组与组之间的生还率差得越多,这个特征越有用。
课本第一节说模型要从数据里学规律。这里的规律具体指什么,现在有了答案:就是这些组间的差距。后面每一节用到的方法,都是在利用这些差距。
性别只有两个取值,舱位只有三个,天然就能分组。年龄从零点四岁到八十岁,有几百个不同取值,每个取值只有一两个人,算出来的生还率不是 0% 就是 100%,看不出规律。
所以要先把年龄切成几段,0 到 10 岁一组,10 到 20 岁一组,依此类推。这个做法叫分箱。分得太粗看不出细节,分得太细每组人数太少、比例不可信,需要权衡。
这份数据里有 174 位乘客的年龄是空的。空值不能直接丢掉,也不能填 0,这里的处理办法是填成所有已知年龄的中位数。
| 分组 | 人数 | 生还率 |
|---|
课本第一节第 07、08 页讲的阈值和决策边界。第 08 页说,逻辑回归学出来的是一条线,线的一侧判一类,另一侧判另一类。本节用手工的办法画这条线:挑一个特征,定一道门槛,门槛一侧判生还,另一侧判未生还。这道门槛就是阈值,它划出来的分界就是决策边界。本节同时看清,只用准确率一个数字去评价分类结果是不够的。
规则的形式固定为一句话:满足条件的判为生还,其余判为未生还。你要做的是选一个特征、拖一道门槛,然后看这条规则在 891 人身上判对了多少。
上面这个四格表叫混淆矩阵。左上和右下是判对的两种情况,右上和左下是判错的两种情况。准确率就是这两个判对的格子加起来,除以 891。
两种错误的性质完全不同。漏判是本来能活的人被规则放弃了,虚报是本来活不了的人被规则算成能活。如果这条规则用来决定谁上救生艇,漏判对应的就是被放弃的那些人。
性别这个特征最好能到 78.7%。全部判未生还时准确率是 61.6%,这个数字看着不低,但这条规则一个生还者都没找出来。年龄这个特征,门槛怎么拖都超不过 61.6%。
第一,一道阈值就是一条决策边界。课本第 08 页画的那条虚线,在这里就是你拖出来的这道门槛。逻辑回归和支持向量机做的事,是让机器自动找到门槛的最佳位置,不用人一点点去拖。
第二,准确率高不等于模型有用。这份数据里本来就有六成人未能生还,所以一条什么都不做的规则也能拿到 61.6%。评价一个分类结果,还要看混淆矩阵里那四个格子。
第三,年龄这个特征在第 01 节看着有点用,这里却怎么调都不行。原因不在特征,而在规则的形式太简单:大于某个数这种单一门槛,抓不住年龄里的信息。第 04 节的决策树可以对同一个特征切好几刀,那时年龄就用得上了。
查全率=判对的生还者 ÷ 实际生还总人数,衡量该找出来的人找出来了多少。把门槛放宽,判生还的人变多,查全率上升。
查准率=判对的生还者 ÷ 规则判生还的总人数,衡量判出来的这批人里有多少是判对的。把门槛放宽,查准率下降。
两个数一升一降,无法同时取到最好。所以实际工作中首先要确定的是,在这个场景下漏掉一个的代价大,还是虚报一次的代价大。医院筛查宁可虚报也不能漏掉,垃圾邮件过滤宁可漏掉也不能虚报。
| 规则 | 准确率 | 查全率 |
|---|
课本第二节第 14 页讲的线性不可分。上一节只用了一个特征,这一节用两个:先按性别分成两组,再按舱位把每组分成三份,一共六个格子,每个格子单独判生还还是未生还。按常理,特征多了成绩该变好。本节要看到的是,多一个特征并不一定带来提升,以及这件事的原因是什么。
下面六个格子,每个格子由你决定判生还还是判未生还,点一下就能翻面。格子上写着这一组有多少人、其中多少人生还。
无论六个格子怎么翻,准确率最高只能到 78.7%,和上一节只看性别完全相同,一个百分点也没有增加。
逐个查看六个格子的生还率,会发现三等舱女性那一格是 72/144,正好一半。这一格判哪一类都会错一半。
对这一格再切一刀之后,准确率才真正往上走,三个选项的效果并不相同。
三等舱的女性一共 144 人,生还 72 人,正好一半。这一格无论判哪一类都会错 72 人。多加的舱位这个特征,没能把这一格里的人切开,所以整体成绩一点没提高。
课本第二节第 14 页说有些数据用直线分不开。这里遇到的是同一件事:性别加舱位这两个特征,画不出一条能把三等舱女性分开的界线。
由此得到一条判断标准:新特征有没有价值,要看它能不能切开原来切不开的那部分人,而不是看特征数量多不多。用第三个特征再切一刀之后,准确率才真正往上走。
一个格子里两类人各占一半时最难判,课本第三节把这种状态叫作熵最大。这时无论判哪一类都会错一半,信息增益接近于零。
解决办法只有一个,就是找一个新特征,它在这 144 人内部能把生还的和未生还的区分开。右下角三个选项分别试了家人、年龄、票价,效果并不相同。
这一结果来自真实数据,不是人为构造的。第 04 节的决策树做的正是同一件事,只不过由它自动去找该切哪一刀。
课本第三节第 22 至 24 页讲的熵与信息增益,以及第 25 页讲的过拟合。前三节的门槛都是你一个个手工定的。决策树做的是同一件事,区别在于它会自动算出每一刀的信息增益,挑增益最大的那一刀切下去,一层一层往下。本节看两件事:树是怎么长出来的,以及树长得太深为什么反而会变差。
先说清楚两个词,后面的图全靠它们。
训练集 从 891 人里拿出一部分交给模型,让它从中总结规律。这部分人模型是见过的。
测试集 剩下的人留着不给模型看,等它训练完再拿出来考它。这部分人模型没见过,用来模拟将来遇到的陌生乘客。
课本第一节第 02 页提过这两个词,这里第一次真正用上。判断一个模型好不好,看的是它在测试集上的成绩,而不是训练集。
左图最上面一层用的是性别,和第 01 节的结论一致。
右图的蓝线一路向上。赭线先上升,到某个深度之后掉头向下,两条线之间的缝隙越来越大。
第一,决策树自动选中了性别作为第一刀,说明信息增益这个指标算出来的结果,和你用眼睛看出来的一致。课本第 24 页那张表里性别增益最大,在真实数据上也是如此。
第二,蓝线一路向上的原因是:树越深,格子切得越细,最后每个格子里只剩几个人,模型把训练集里每个人的情况都记了下来,自然全部判对。
第三,赭线掉头向下就是课本第 25 页说的过拟合。树把训练集里那些纯属偶然的巧合也当成规律记住了,拿这些巧合去判断测试集里的乘客,一条也不成立,成绩反而回落。
所以树不是越深越好。该选的深度是赭线最高的那个,不是蓝线最高的那个。
对每一个特征、每一个可能的门槛,树都试着切一刀,再算切完之后两边有多整齐。一格里全是生还者或全是未生还者就是最整齐,一半一半就是最不整齐。这个整齐程度就是课本第 22 页讲的熵。
树把所有可能的切法都试一遍,挑那个让两边加起来最整齐的。这正是你在第 03 节用眼睛做的事,只不过它一秒钟能试几万种。切完之后整齐了多少,就是课本第 23 页讲的信息增益。
叶子至少几人这个滑块是一道限制,作用是不许切出人数太少的格子。三个人的格子里两人生还,说明不了任何问题。把这个数从 1 拖到 20,看赭线怎么变。
| 第几次 | 测试集准确率 |
|---|
课本第三节的延伸内容。上一节看到一个现象:同一批数据重新划分一次,树长出来就不一样,成绩也跟着跳。随机森林的应对办法是种很多棵不一样的树,让它们投票表决。本节要看的是,树的棵数增加到多少之后成绩不再上升。
每棵树训练时只随机拿到一部分乘客和一部分特征,所以每棵长得都不一样,判错的人也各不相同。最后把所有树的判断平均起来,超过一半就判生还。这里每棵树的深度固定为 6,训练集仍占 70%,和上一节保持一致。
棵数从 1 涨到十几棵时,准确率从 七成出头一路涨到 八成以上。再往后曲线基本走平,加到 60 棵也没有明显提高。
默认设置下,森林约 81%,灰虚线那棵单树约 75%,相差六七个百分点。
特征数那一项:取 1 时只有七成出头,取 3 到 4 时最高,取 6 时反而回落到七成九左右。
右图里各棵树的判断并不一致,有的高有的低,但平均之后落在 0.5 的同一边。
单独一棵树不稳定,换一批数据就长成另一副样子,判错的位置也跟着变。多棵树各自判错的地方不一样,投票之后这些错误互相抵消,留下的是它们共同看到的那部分真规律。这就是森林比单棵树高出六七个百分点的原因。
曲线走平说明:继续加树已经没有新的错误可以抵消。模型不是越复杂越好,加到该加的地方就够了。这和上一节树不是越深越好是同一个道理。
如果每棵树都拿到全部 891 人和全部六个特征,它们会长得一模一样,投票也就失去了意义。所以要人为制造差别。
第一种差别在数据上。种一棵树时,从 891 人中有放回地随机抽 891 次。有人被抽中好几次,有人一次也没抽中,平均每棵树只见到六成多的人。
第二种差别在特征上。每棵树只允许在随机挑出的几个特征里选。性别是最强的特征,如果每棵树都能用它,所有树的第一刀都会切在性别上。限制之后,有的树被迫先用舱位、先用年龄,于是长出不同的形状。
这个数取 1 时每棵树只能靠一个随机特征,判断依据太少。取 6 时每棵树都能挑到性别,所有树又长得太像,投票失去意义。所以最好的取值在中间,你试出来的应该是 3 或 4。工程上常用的经验值是特征总数开平方,六个特征开平方约为 2 到 3,和试出来的结果接近。
| 棵数 | 特征数 | 测试集准确率 |
|---|
本节目的汇总前六节的操作记录,整理成一份完整的实验报告。
前面五节的操作记录会自动汇总进报告。下列各题没有唯一答案,按实际观察到的现象和自己的分析作答。
| 特征 | 最高组 | 最低组 |
|---|---|---|
| 未记录 | ||
| 规则 | 准确率 | 查全率 | 查准率 |
|---|---|---|---|
| 未记录 | |||
| 树的棵数 | 每棵随机用几个特征 | 测试集准确率 |
|---|---|---|
| 未记录 | ||