“ 舰长还是还是那个舰长吗?”
01—尾舱压力阀脱落
穿过引力沼泽之后,大家稍微平复了一下情绪,开始筹划下一步的路线。
议事厅里议论纷纷,各抒已见,谁都没有听见,就在议事厅的侧壁上传来了嘶嘶声,就像老旧机械硬盘故障时传来的嘶嘶声。只有向来不爱发言的naco躲避着人群,走到议事厅一角的椅子旁坐了下来。他刚坐下就注意到了这奇怪的嘶嘶声,左瞧右瞧,最后指着连接尾舱的管道对大家喊:舰船好像有故障,大家过来看一下!
议事厅从嘈杂中渐渐静下来,纷纷警觉地跑向naco所在的位置查看情况。
工程师逐步排查,发现是舰体躲避天体碎片攻击的时候,尾舱被一个当时未能成功躲避的天体碎片划出了一个口子。因为舰船三级保护机制的存在,舰船没有报警,但是现在这个伤口已经导致舱压减小到了安全阈值以下,二级保护机制即将失效,尾舱的30个悬空压力阀(悬空压力阀控制着整个舱体内部的压力,如果悬空压力阀失效,短时间内舱体内部气体泄露导致压力会骤减,最严重后果是舱体内逐渐失去适合K星人生存的压力环境)全部因为压力失衡原因脱落,要解决这个问题需要:
(1)修复伤口,停止舱压继续减小
(2)舱内充压,使尾舱压力恢复到源水平
(3)恢复30个悬空压力阀各自的位置
做到前两点不难,但是第(3)步… …,倘若这30个悬空压力阀的大小或者形状不一样或者标记着各自的位置,那这个问题也就解决了。难就难在,30个压力阀的模样一模一样,形状大小体积重量密度颜色全都一样,只有一个地方不一样。
显示所有大图
从开普勒452b出发前压力总工曾跟舰长说过,尾舱的压力阀与舱内其他部位的压力阀是“亲戚”,但是他们都有自己的“身份”,每个压力阀都是“分裂型人格”。
尾舱压力阀的失效导致了舰船部分系统的间歇性宕机,而舰长的暗语系统恰好就在其列,这就意味着失去了压力阀的“身份”,无法恢复原位… …
现在需要靠大家的智慧来破解这玄机了!
舰长说在暗语系统宕机之前他曾经破解过一部分:意思是所谓的身份,指的是每个压力阀都有一个ID,这个ID是由“多重人格”组成的,但是“多重人格”是什么还没有来得及破译,说到这,舰长愧疚地叹了口气。
BIT拿起掉落舱底的一个压力阀仔细端详,但是似乎也没有看出什么门道,便将这颗压力阀放到了面前的桌子,而从naco的位置看这颗压力阀,正好是被尾舱的红外光源透过的视角,naco鬼头鬼脑地走到这颗压力阀前面,盯着压力阀看了半天,再一次吸引了大家的注意力:大家过来看,压力阀上有数字!
舰长及BIT等走到naco的身后观察这颗压力阀,看到了上面清晰的一串数字:
23 15 07 91 22 17 54... ...89
是的,每个压力阀透过红外光源的照射都有这么一串数字!
BIT恍然大悟,舰长所说的“多重人格”指的是多个不同的特征,就像一个苹果的颜色、打小、形状等;每个压力阀的身份就是不同特征的值的集合;尾舱压力阀与其他部位的压力阀是“亲戚”指的是他们在同一个特征空间,在概率上是独立同分布的(也就是处在舰船不同位置不同区域的压力阀都有对应的位置类别,比如上、下、左、右,中等)!
如此一来,虽然尾舱的30个压力阀的位置不清楚,但舰船其他位置的压力阀所在的位置我们清楚(相当于有了一批监督数据),既然每个压力阀都有一串数字作为“身份”,那么我们就可以通过已知位置的这些压力阀的位置分布(在这部分数据上训练监督模型),找到尾舱这30个压力阀位置应该在何处(通过训练之后的模型进行预测)。
BIT向舰长申请调到了所有压力阀的位置分布图和“身份”信息——每个压力阀携带的一串数字;分析道:既然是“分裂型人格”,那么占主导的人格就会主导这个压力阀的大致方位;占次要位置的“人格”在能够进一步明确这个压力阀更具体的位置;如此,通过找到哪一列数字(也就是哪一个特征或者哪一个“人格”)占主要,哪一列数字次之... ...给这些数字的重要性排好序,然后按照这些数字的顺序依次去锁定压力阀的更具体的位置,直到确定出来的最后的位置就是真实位置,那么我们就找到了合理的顺序去根据这些数字确定压力阀的位置;对于尾舱的30个压力阀,我们都可以找到确定的位置,整个过程就像根据西瓜的众多特征找出哪个是好瓜:
那么如何知道哪些数字更重要,哪些数字作用更小呢?
试!
大家笑了...
BIT进一步说,关键就是怎么试,每次尝试得知道好坏。BIT解释道:就像我们的宇宙,混沌一片,混乱无序是常态,想把身边的物体变得井然有序,变得整洁就需要我们做一些努力,哪怕这些努力是轻轻的挪动一下椅子,扫掉地面的灰尘。
星牛说:我觉得我已经绕进去了,晕,怎么扯远了呢?
BIT哈哈一笑,就是说到:刻画宇宙的混乱程度,我们可以用熵这个指标。熵越大越混乱,熵越小越有序;那么为了刻画我们每次选择哪个数字作为当前最重要的特征去判断压力阀的具体位置的时候,我们就需要刻画每次选择之后的信息的混乱程度变化多少,同样的道理,我们就可以用“信息熵”这个概念:
-plogp,log是对数函数,p就是概率,也就是可能性大小。
说人话就是,我们想要挑选这样的特征:在选用这个特征去判断每个压力阀所属的【上下左右中】具体位置类别之前,各类别比较混乱,就是啥位置的都有;在选用某个特征(也就是特征对应的数字)去判断位置之后,属于位置上面的都划到一块,位置下面的都划到一块,这样比之前有序了一点,起码上面的和下面的不会掺和在一块,那信息熵就减小了一些;我们需要看看选哪个特征能够让这个变化最大,也就是选哪个数字能够让这些压力阀的位置更有区分性。这个区分性的程度就通过信息熵的差,也就是信息增益来刻画:
假如除了尾舱之外的所有位置一共有D个压力阀,他们在舰船不同的位置都是按照上下左右中这样的位置来摆放的,而且上下左右中位置的压力阀个数分别是a,b,c,d,e,那么这时的混乱程度——信息熵就可以表示为:
(-a/D)log(a/D) + (-b/D)log(b/D) +(-c/D)log(c/D)+(-d/D)log(d/D) +(-e/D)log(e/D) = A
每一类的熵加在一起,就是现在所有这些压力阀的混乱程度;每一类的占比,就是-plogp公式里面的p,比如a/D这个比例就是a这一类的概率,以此类推... ...
然后呢?比如我们按照第一个数字分,分完之后D个压力阀划分成了3坨,每一坨里面有的位置分对了,有的分错了,也就是说每一坨里面还是回有一定的混乱程度,但是已经没有像原来那么混乱了,比方说第一坨,里面20个压力阀,有15个都是“上”这个位置的,其他5个分错了;其他的坨也一样;假设这3坨的信息熵也就是混乱程度分别是aa,bb,cc;三坨的压力阀的数量分别是n1,n2,n3;那么按照第一个数字分完之后的总体混乱程度(信息熵)就是:
n1/D * aa + n2/D * bb + n3/D * cc = B,
那么划分之后更有序了,信息熵应该小,所以B < A, 用A-B得到的差就是信息增益;
然后再去试试用第二个数字走一遍;
用第三个数字走一遍;
... ...
发现第三个数字的时候,能够让划分之后的压力阀更有序,也就是区分的更好,大概可以把上下左右中分个差不离... ...
然后星牛抢过话茬:然后接着分,再看一遍其他数字,看看哪个适合用来进一步确定那些分的不对的压力阀的位置... ...直到最后所有的压力阀位置都分对了,那么说明我们找到了利用这些数字判断压力阀位置的顺序;也就是我们知道,先看哪个数字,再看哪个数字,,,,最后看哪个数字能够把位置判断的最正确。
“哈哈哈”,BIT拍了一下星牛的肩膀:“学得很快嘛!”
就这样,通过BIT的方法,找到了尾舱30个压力阀所处的方位,舰体成功修复!
众人目瞪口呆:BIT怎么一下子有这么强的分析与抽象能力了!
只是一旁的naco忽然想起来一件事:几天前,在大家统一休息时,naco失眠出来舰长曾独自一人进入了按规定本需安全小组全体成员在场才能进入的安全会议室并待了很长时间… ...
02—掉书袋
【1】 上述情节是对决策树分类算法的一个通俗演义。
【2】 决策树就像一堆if-else集合,不断地进行选择从而走向不同的分支,最终走到叶子结点(也就是最终的位置)。
【3】 有时候决策树在部分数据上训练之后,容易过拟合(也就是过于贴合训练数据,导致模型迁移到其他数据上时表现不佳),这时候可以对决策树进行剪枝——也就是裁掉部分节点或者换句话说减少一些if-else规则。
【4】 奥卡姆剃刀原则是机器学习中经常遵守的基本原则,简单说就是达到相同的效果(如正确率)需要的参数越少越好或模型的规模越小越好。
【5】剪枝分为预剪枝和后剪枝,预剪枝指的是对特征进行筛选,也就是通过挨个尝试每个特征进行划分之后的正确率更大,就采用哪个特征;后剪枝指的是事先先训练好一个决策树,然后自底向上对非叶子结点进行判断:如果删掉该节点,整棵树的分类正确率是否提高,如果提高了,那么裁减掉这个节点及其叶子结点,从而达到缩减模型复杂度的效果,提高泛化性。
03—参考文献
1. 关键字:《统计学习方法》、李航
2. 关键字:《机器学习》、西瓜书、周志华
3. 关键字:coursera、决策树