请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

交叉验证真的科学吗?

看到学习曲线,我有一个很大的疑惑。

比如我近似地认为我喂给模型的数据越多(不是极端得很多,并且几乎不出现过拟合),模型的准确率越高。然后我又联想到了bobo老师讲过的留一法,留一法是最精确的,因为它把每个数据都测了一遍。比如我有100个数据,我先用svm训练其中的99个,然后测试剩下的1个,这样循环100次,然后再取平均。

但是,现在仔细想想,喂给svm的数据越多,svm的分类效果可能就越好,那用这个模型去测试,准确率肯定偏高呀。

如果用交叉验证的方法去验证准确率,五则交叉验证首先会把数据分成5份,每份只有20个数据,此时如果只把仅仅20个数据喂给svm训练,那准确率可想而知,肯定没有留一法高。然后我真的去试了一下,我发现5则交叉验证得到的准确率确实比留一法低。
所以我现在质疑交叉验证的科学性。。。

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2018-10-24 03:53:10

赞思考!


首先,你说到了“科学性”,这里就有一个哲学问题了,到底什么是“科学性”:)


必须明确,机器学习本身是基于统计学的,而不是客观规律的。实际上,正是因为我们找不到客观规律,所以才转而付诸于机器学习这种统计学的方式。否则,我们直接应用我们发现的客观规律就好了:)我们近乎不需要用机器学习的方法预测一个导弹发射的位置;也不需要使用机器学习的方法预测改好的大楼会不会倒塌。为什么?因为我们已经对力学的基本规律有了极其深刻的认识。但是我们需要用机器学习取预测地震;去判断肿瘤的性质;去评估金融风险发生的可能性;去识别图像中的物体;等等等等,为什么?因为我们对地震,医学,社会经济活动,人脑通过图像如何获取抽象概念,等等领域,知之甚少:)


正因如此,不仅仅是交叉验证,对于机器学习所学习到的一切结论,我们都应该要画一个大大的问号。这背后的本质,是统计学的局限性。如果你稍微深入的理解统计学,或者看一些统计学应用的内容,就会知道,在统计学的世界里,存在相当多的悖论,也存在相当多的“相关”非“因果”的例子,甚至很多时候,,在一个历史时期,我们认为至关重要的因素,过一段时间,竟发现是完全错误的。(这一点在医学发展史上尤其明显)。


这是我的第一个观点:在机器学习的世界里,我们可能很难说“科学性”。一切结果都是从数据而来。如果我们的数据不准确,或者质量不够高,或者不够能够说明问题,我们其实用什么方法都没有用。即使我们的数据足够准确,我们的数据和所探讨的问题之间,是否真的有联系,也要画巨大的问号。我经常举的例子是,用多少学生的身体健康数据,都无法预测学生的成绩。这个例子看似极端,但其实,很有可能,我们在实际更加真的应用中,就是在做“用学生的身体数据预测学生成绩的事情”。比如:用经济历史数据,是否真的能预测经济走势?比如,用地震的历史数据,是否真的能够预测地震的发生?比如,用大脑的脑电数据,甚至是成像数据,是否真的能够预测一些高级复杂情感的发生,比如“嫉妒”,比如“贪婪”,比如“宽恕”?至少我举的这三个例子,在我所指的范围里,都暂时是完全不可能的。而且,很有可能,人类斥巨资从这些角度在做的工作,多少年后来看,完全是无用功。


说了这么多,是想说,机器学习不是“科学”,更是一种“实验”。机器学习是探索科学的工具,但他完全无法取代“科学的研究方法”。这也是为什么各个领域的专家至今不会失业,而且我认为永远不会失业的原因。领域知识的作用性,至少从现在的角度,远远大于“机器学习”。


所以,交叉验证“科学”吗?交叉验证不科学。他只是获得一个实验结果的指标的方法而已。这个指标准不准确?近乎一定不准确。毕竟你的数据在变化,得到的结果就不一样。而且,在这个课程第十章,我还介绍了更多的指标。而且,在机器学习和统计学的世界里,还有更多的指标。哪种指标科学?恐怕都不能叫“科学”。但是这些指标辅助我们看懂我们的数据,让我们离我们的目标更近一些。因此,这些方法,这些指标,都有他们的价值。关于此的更多讨论,可以参考这个问答:https://coding.imooc.com/learn/questiondetail/42693.html


======


具体到交叉验证,得到的结果,首先,他是取代train_test_split的方式获得准确率的手段。相比train_test_split,交叉验证屏蔽了随机的干扰。


更进一步,当交叉验证我们将含有m个样本完全分成m份时(也就是留一法),此时,我们得到的结果,将完全没有随机性。我们完全屏蔽了随机性的干扰。

同时,这种方法最大程度的使用了样本的所有信息。


但是,这是否意味着准确率就偏高?完全不一定!如果你处理过大数据,就会知道:很多时候增加数据,是会降低准确率的,而不是数据越多,结果越好!如果数据越多,结果真的就越好,基本上你的方法已经完全没问题了。但是,对于大多数复杂问题,数据越多,结果越差!

但是,结果越差不是坏事。因为这可能就意味着你本来在原有数据下得到的模型不准确!多出来的数据帮助你检测到了这种不准确。


不过即便如此,我们对留一法获得的结果,也不能完全信任。依然是,上面说了那么多,结论就是:他只是一个参考!我们还可以使用更多方法,获得更多参考,综合起来看待我们的模型和我们的数据。没有哪个方法是100%科学的。这恰恰是机器学习最难的地方:)


希望我说清楚了我的意思:)


再赞思考!加油!:)

9 回复 有任何疑惑可以回复我~
  • 提问者 慕婉清4872412 #1
    我突然发现机器学习很有哲理(๑ ̄ ̫  ̄๑)
    但是现实情况是,我对于训练的模型,总要给个准确率吧,我用十则交叉验证算出来的准确率确实比留一法得到的准确率低,,,那我应该选哪个准确率作为最终准确率捏?
    而且我绘制了Learning rate curve ,我发现当喂给模型的数据增加时,训练集和测试集的mean square error 的确是减少的,所以在我的这200个数据上,十则交叉验证有理由比留一法的准确率低
    回复 有任何疑惑可以回复我~ 2018-10-24 10:12:52
  • liuyubobobo 回复 提问者 慕婉清4872412 #2
    如果你的数据能承受留一法的话,我倾向于用留一法作为后续动作的参照。
    回复 有任何疑惑可以回复我~ 2018-10-24 12:00:54
  • 提问者 慕婉清4872412 回复 liuyubobobo #3
    好的好的୧(๑•̀⌄•́๑)૭
    回复 有任何疑惑可以回复我~ 2018-10-24 13:03:06
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信