专题《算法》4:想得太多?你可能过度拟合了

专题目录

  1. 算法的世界
  2. 最优停止理论,什么时候停止观望
  3. 一个关于时间管理的数学解决方案
  4. 想得太多?你可能过度拟合了
  5. 博弈论,别人的想法

本篇文章想探讨一个关于想太多or想太少的问题,在机器学习当中有过拟合欠拟合的这两个概念,前者是指对过往的数据点过度拟合,也就是总结出来的规律高度适用判断过往的发生过的事情,但是对未来新出现的数据点则波动很大;欠拟合则是指头脑简单,一个很糟糕的模型,怎么样都预测不准,大家可以考虑街边摆摊小学文化的算命先生,大概就知道是怎么回事了。

世界不是一个客观存在,每个人的想法和价值观都构筑起自己的世界,人与人的差别比猫和狗的差别更大。如果你想面对的是简单的世界,那你使用一个差不多的线性模型或者二次模型就差不多了;但是,如果你想直面真实的现实世界,你需要来到3维,4维,甚至是n维的思考空间,用既不过拟合又不欠拟合的模型去构筑你的思考系统,世界是复杂的,我们也需要变复杂。

我们早已经有了算法

大家这里的模型可以理解成是你的价值观或者说你的原则,也就是判断各种事情的标准等等。是你安装在底层的操作系统。你可以想象,我们在看到跌倒老奶奶,到底扶不扶,每个人的决定都不一样,但总体上结果输出就只有扶与不扶两种选择,可以对应到计算机的1和0,实际上各种生活上涉及计算机的算法判断输出都是1和0的标签。

我们每个人在相同情景下作出不同的结果输出,恰恰是因为我们内心里面的价值观引申出的想法不同,最终造成我们的行动不同,自然就会有不同结果。

当然我这里不是要卖鸡汤,我想说的是,我们在出生的时候就已经预装了操作系统或者说模型算法,只不过一开始非常稚嫩的算法(类似于人之初性本善)经过家庭父母,学校,社会还有各种其他互动,很多情况甚至是你现在都没有意识到的信息流(想象压根不想要接触到的吴亦凡,Angelababy这等信息是如何进入我们生活),在所有信息的不断训练下, 形成了你现在有的算法。
这并不是坏事,说明我们的算法越来越稳健,越来越能够使我们适应当下的生存环境。

但问题恰恰是,我们适应了这些算法,适应了这些鱼龙混杂训练出来的思考逻辑,没有反过头来回去审视自己周围的信息流是否质量低下,没有反过头来审视自己本身的算法是不是过于适应当下,以至于无法看到未来。

复杂性案例

最近德国进行了一项婚姻的满意度调查,横坐标是结婚时长,纵坐标是生活满意度,研究者希望基于变量x能够拟合出对y的结婚时长的预测。



如上图所示,是结婚时长和生活满意度真实的数据点。我们分别按照单因素、两因素以及九因素进行拟合分别可以得到以下结果:
(备注:这里的因素可以认为是指数的多少次方)


这里最后的结果是,单因素预测模型预测不准,九因素预测模型完美经过所有的数据点,但对新出现的数据点预测效果波动很大,而且它预测随着结婚时长的增加,生活满意度会像坐过山车一样断崖式下降,实际上大多数婚姻在一定年限后都会在生活满意度上渐趋平稳。在三个模型当中,只有双因素模型能够比较好拟合所有的数据点且对未来趋势的预测也比较平稳。
其结论是:考虑更多的因素并不一定会使我们的模型预测能力更加强,它有一个限度,模型需要复杂,但过于复杂的话预测效果会急剧恶化。

过度拟合的困境

我们很多时候只能根据过往的股票来预测未来的走势,通过一个人过往的成绩来判断接下来的成就大小。但问题恰恰在于,我们生活中的数据是很嘈杂的,也就是充满各种波动,随机因素,噪声,如果我们过度崇拜数据,那么就会进入一个把这些噪声和随机因素最优化的误区,从而对未来作出十分错误的判断,要知道是理论要符合现实,别说那种现实要符合理论的傻话。

比如在教育,体育,健身,工作等各种随处可见的行业当中,只要有评价指标的地方,我们都存在过度拟合
比如我们工作存在KPI的评价指标,只要有指标的存在,也就会有相应的标准,我们就能够按照标准去追逐在一个季度内最大化符合标准的工作成果,而不去放眼对公司更加重要的变革。例如对工作流程进行优化,对部门的公共资源进行配置,培养团队的沟通协作,这些都不计入KPI。这个时候,我们会发现原本KPI是用来评价我们的工作成果的指标,但是有时候我们对KPI的过度拟合反而让我们只专注于短期的工作,而缺少关注做一些长期建设,以及对公司输出更大变革性成果。

同样的道理也是适用于培养学生,原本分数是用来筛选出能力优秀的学生,后来只要有这样的评价指标,就会有各种名师钻研考题技巧,拆解各种解题思路,对指标的追求反而过度拟合,真实的思考能力和独立解决问题的能力反而是其次。

什么时候想得更少

如果这本书只是涉及到我们应该思考简单,那么它跟“于丹语录”就没啥差异了,我们恰恰想知道的是什么时候我们该停止思考?
一个参考标准就是:如果你有很充足和很确信的信息的话,且不会有任何错误和混淆,那么这样的信息是越多越好,不要过早停止思考,这些因素都有助于你做出决定;但是现实恰恰相反,当你思考的内容对你来说很大的不确定性,或者说数据很有限,你应该提前停止思考,并使用简单的模型。书中给出的建议是,当我们对预期不确定的时候,身处黑暗之中,最好的办法就是用一支粗的马克笔而不是圆珠笔来绘制,这样可以帮助我们把思维集中到大的想法而不是小的细节上面。不确定性越大,所能衡量的东西和真正重要的东西的差距就越大。

当达尔文思考要不要结婚的时候,在左边一栏写上结婚的理由,在右边一栏写下不结婚的理由。可笑的是,左边一栏有一些奇怪的理由,“结婚后会时间损耗/没有自由/买书的钱会变少”,而当他发现自己陷入过拟合的时候,他做了一件事,就是停止写出页面上所有不重要的理由,他最终下定决心结婚首要理由是“孩子和陪伴”,书的预算只是干扰项。

一些建议

1.多做一些无用之事

这些无用之事可能是你喜欢做的事情;也可以是你觉得虽然短期内不会获得很大的回报,但是持续去做等到某个时间节点就会有指数级的爆发;还可以是那种紧跟潮流或者是未来趋势所在并且时间会带来复利的事情。在王烁的「30天认知训练营•2019」的课程当中有提到相同的道理。

2.使用交叉验证

当你过度专注于自己的事情的时候,或者评价标准的渠道还有维度是单一的时候,考虑多多拓展自己的验证渠道和维度。比如你想进入一个新的行业,例如量化投资,那么应该去做完相对应比较充足的信息搜索并整合好后,提出你的问题,然后拿着这些问题去跟这个行业工作的人士去讨论可行性和未来的前景回报等。使用这种交叉验证可以避免你过于闭塞,沉浸在自己的世界里。

3.学会停止
在上一篇「一个关于时间管理的数学解决方案」文章中,提到过,如果你已经陷入到了时间的泥淖里面,光是判断事情要先做什么再做什么都已经耗费了你所有的内存,那你干脆停止什么都不做,要么放自己一天假,要么就其他任务都全部删除掉,只留下一件事情去做,要么就随机抽。总之,你需要设计一个当你死机的时候仍能够自动弹出的安全救生舱,使得在这种死循环下你仍能够重新启动。这其实就有点像是当模型已经变复杂了,我们主动去反向惩罚约束我们的模型,使其裁剪为更加简单的模型。

结语

虽然我们这个专题讲的是《算法》,目的是给原本简单的头脑安装更加能够面对复杂现实世界的操作系统,但是这篇文章的意思反而是要避免在这个问题上走太极端,也就是我们需要有复杂的思维,但是也要有避免过于复杂的算法,这看起来有点像是开倒车,但恰恰不是,我认为这是在一个更高的层次上思考这个问题。

这恰似万维钢老师经常挂在嘴边一句名言:「《了不起的盖茨比》的作者菲茨杰拉德有句名言:检验一流智力的标准,就是看能不能在头脑中同时存在两种截然不同的想法,同时保持正常行事的能力」

欢迎大家关注我的公众号,与我一起交流

你可能感兴趣的:(专题《算法》4:想得太多?你可能过度拟合了)