赞思考!
首先,你说到了“科学性”,这里就有一个哲学问题了,到底什么是“科学性”:)
必须明确,机器学习本身是基于统计学的,而不是客观规律的。实际上,正是因为我们找不到客观规律,所以才转而付诸于机器学习这种统计学的方式。否则,我们直接应用我们发现的客观规律就好了:)我们近乎不需要用机器学习的方法预测一个导弹发射的位置;也不需要使用机器学习的方法预测改好的大楼会不会倒塌。为什么?因为我们已经对力学的基本规律有了极其深刻的认识。但是我们需要用机器学习取预测地震;去判断肿瘤的性质;去评估金融风险发生的可能性;去识别图像中的物体;等等等等,为什么?因为我们对地震,医学,社会经济活动,人脑通过图像如何获取抽象概念,等等领域,知之甚少:)
正因如此,不仅仅是交叉验证,对于机器学习所学习到的一切结论,我们都应该要画一个大大的问号。这背后的本质,是统计学的局限性。如果你稍微深入的理解统计学,或者看一些统计学应用的内容,就会知道,在统计学的世界里,存在相当多的悖论,也存在相当多的“相关”非“因果”的例子,甚至很多时候,,在一个历史时期,我们认为至关重要的因素,过一段时间,竟发现是完全错误的。(这一点在医学发展史上尤其明显)。
这是我的第一个观点:在机器学习的世界里,我们可能很难说“科学性”。一切结果都是从数据而来。如果我们的数据不准确,或者质量不够高,或者不够能够说明问题,我们其实用什么方法都没有用。即使我们的数据足够准确,我们的数据和所探讨的问题之间,是否真的有联系,也要画巨大的问号。我经常举的例子是,用多少学生的身体健康数据,都无法预测学生的成绩。这个例子看似极端,但其实,很有可能,我们在实际更加真的应用中,就是在做“用学生的身体数据预测学生成绩的事情”。比如:用经济历史数据,是否真的能预测经济走势?比如,用地震的历史数据,是否真的能够预测地震的发生?比如,用大脑的脑电数据,甚至是成像数据,是否真的能够预测一些高级复杂情感的发生,比如“嫉妒”,比如“贪婪”,比如“宽恕”?至少我举的这三个例子,在我所指的范围里,都暂时是完全不可能的。而且,很有可能,人类斥巨资从这些角度在做的工作,多少年后来看,完全是无用功。
说了这么多,是想说,机器学习不是“科学”,更是一种“实验”。机器学习是探索科学的工具,但他完全无法取代“科学的研究方法”。这也是为什么各个领域的专家至今不会失业,而且我认为永远不会失业的原因。领域知识的作用性,至少从现在的角度,远远大于“机器学习”。
所以,交叉验证“科学”吗?交叉验证不科学。他只是获得一个实验结果的指标的方法而已。这个指标准不准确?近乎一定不准确。毕竟你的数据在变化,得到的结果就不一样。而且,在这个课程第十章,我还介绍了更多的指标。而且,在机器学习和统计学的世界里,还有更多的指标。哪种指标科学?恐怕都不能叫“科学”。但是这些指标辅助我们看懂我们的数据,让我们离我们的目标更近一些。因此,这些方法,这些指标,都有他们的价值。关于此的更多讨论,可以参考这个问答:https://coding.imooc.com/learn/questiondetail/42693.html
======
具体到交叉验证,得到的结果,首先,他是取代train_test_split的方式获得准确率的手段。相比train_test_split,交叉验证屏蔽了随机的干扰。
更进一步,当交叉验证我们将含有m个样本完全分成m份时(也就是留一法),此时,我们得到的结果,将完全没有随机性。我们完全屏蔽了随机性的干扰。
同时,这种方法最大程度的使用了样本的所有信息。
但是,这是否意味着准确率就偏高?完全不一定!如果你处理过大数据,就会知道:很多时候增加数据,是会降低准确率的,而不是数据越多,结果越好!如果数据越多,结果真的就越好,基本上你的方法已经完全没问题了。但是,对于大多数复杂问题,数据越多,结果越差!
但是,结果越差不是坏事。因为这可能就意味着你本来在原有数据下得到的模型不准确!多出来的数据帮助你检测到了这种不准确。
不过即便如此,我们对留一法获得的结果,也不能完全信任。依然是,上面说了那么多,结论就是:他只是一个参考!我们还可以使用更多方法,获得更多参考,综合起来看待我们的模型和我们的数据。没有哪个方法是100%科学的。这恰恰是机器学习最难的地方:)
希望我说清楚了我的意思:)
再赞思考!加油!:)