机器学习和分类算法我总结了三条定律,铭记在心可少走很多弯路:
第一定律(不可比较定律):算法没有绝对的好坏。
初学者常犯的一个错误就是过度醉心于研究和运用比较“先进”的算法。总觉得Naive Bayes不够帅,非得上Logistic回归;或者觉得BP神经网络不够NB,非得搞支持向量机才觉得过瘾。
然并卵。
残酷的真相是,哪怕是再可靠、再严谨、再NB的期刊上的paper说某某算法效果显著,阅读时都需要加一个状语从句,“在paper作者所用的数据集上”。换言之,每年雪花一样的paper多数都是为了灌水而精心选择实验条件做出来的,对于你的问题、你的数据,通常没有什么效果。
算法和姑娘一样,是没有办法进行绝对的比较的。
没有好的算法,只有合适的算法。也就是说,算法所应用于的数据的特性往往更关键。正如姑娘所嫁的你是什么人品、什么条件往往更关键一样。这就是俗话说的,看饭下菜。比如垃圾邮件分类,朴素贝叶斯就非常棒了。
不要追求所谓“更好”的算法。工程实践上,往往是体系结构、运算能力决定了对于算法的选择。就像不要盲目追求你消受不起的姑娘。比如搜索引擎的CPC广告,Logistic回归就是比SVM更好的选择,因为其求解速度更快、更容易并行化。
简言之,数据比算法重要。工程性能比算法性能重要。
第二定律(不可判定定律):算法的有效性无法预判。
有句玩笑话,算法如算命。
有个老教授的笑话说,他每天早上起来就找个数据集跑一遍算法,看看是否撞大运得到了好的结果。
这反应了一个现实,就是对于算法的科研(以发paper为目的的)是很原始的“体力活”——拿一个新算法,然后不断找新的数据集去实验,运气好碰到一类数据集有好的效果,就能发一篇不错的paper。
也就是说,给出一个算法,再给出一个数据集,我们能够肯定这个算法对于这个数据集是有效(判真)的唯一方法就是拿这个算法跑一遍这个数据。没有一个简单、方便、精确的方法能够预判算法的有效性。
科学=探索。这就是科研和工程最大的区别。
科研解决的是不确定能否解决的问题。需要的不断的试错。
如果这样也就罢了。
为什么说算法连科学都算不上呢。因为科学的一个重要特性就是可证伪性。而算法是不能证伪的。
不灵验就是不适用,灵验了就是算的准。灵验之前不知道准不准,灵验之后就说准准准。
关键是,为什么不适用十有八九说不上来。
算命的说法是心不诚。算法的说法是data nature不合适。
嘿嘿,开个玩笑。
第三定律(不可预测定律):模型只是刻画过去,而非描绘未来。
我们还常常犯的一个错误就是误以为模型是能够预测未来的。
其实模型只不过是对历史数据的统计刻画。
历史数据不过是历史的表象。
历史有没有本质呢?
叔本华的意见是没有。
黑格尔的意见是有。
人的归因能力是洞察本质的要件。
而算法没有归因能力。
再NB的算法也只能计算相关性,而无法计算因果性。
休谟说,这世界上没有因果性。
他是对的,也是错的。
因果性只存在于主观中。没有了主观,就没有了因果。
而算法没有主观。
所以算法无法计算因果性。
所以算法没有归因能力。
所以算法无法洞察本质。
所以模型只能刻画表象。
所以,一个刻画历史表象的模型是否能够在未来依旧正确刻画事实呢?
这完全取决于未来是否会不断重复历史。
而历史给我们最大的借鉴,就是历史几乎完全不可借鉴。[*]
只有洞察本质的人才能把系统进行分类,以确认模型是否以及如何运用。
我们面对的,有三类系统:
一类是,完全不可重复的。比如扔硬币。下一次正反面的概率和上一次以及全部历史毫无关系。
另一类是,完全可重复的。比如小球掉落。掉落时间和重力加速度、距离的关系符合牛顿公式。这个是完全可以重复的实验。
而还有一大类是,介于两者之间的。比如股市涨落。股市涨落是完全随机的吗?不是。是能够用历史预测的吗?也不是。这类复杂系统的问题,是目前我们面对的最复杂的问题之一。
不做进一步展开。
简单总结一下,三条定律:
第一定律(不可比较定律):算法没有绝对的好坏。
第二定律(不可判定定律):算法的有效性无法预判。
第三定律(不可预测定律):模型只是刻画过去,而非描绘未来。
对于自然,对于主客观的问题,我们要保持敬畏心。对于我们人类的知识水平和能力的极度有限,要保持谦卑心。敬畏和谦卑不是畏缩,而是更加稳健地前行。
没有银弹。No silver bullet.
[*] 注:此句应删除。这是对黑格尔的谬传。
原发微信公众号startupmost《最创业》 1441900800