考虑各种情况,有些机器学习项目成功了,有些项目失败了,到底是什么原因造成的。
毫无疑问,最重要的原因是所使用的特征。
一般而言,原始数据不能直接搬来学习,需要从原始数据中构建特征,这是机器学习项目的主要工作。
而且特征工程这个环节,直觉,创意和偏招,和技术一样重要。
而且特征设计伴随着大量的试验和错误。
而且,机器学习不能做到一次搞定构建数据集和运行学习器,而需要反复迭代,包括运行学习器,分析结果,修改数据,修改学习器等,不断重复这些工作。
学习反而是最快完成的部分,而特征工程更加苦难。
原因很简单,特征工程是具有领域差异性的,而学习是很大程度通用的。
特征相比学习,具有更大的专业差异,用来做股票分类的学习算法和阿猫阿狗的图像识别可能差不多的,但是里面特征工程的差异就很大。
当然,机器学习的终极目标之一就是自动化特征工程,当下常用的一种方法就是自动生成大量的备选特征,然后根据这些特征和分类类别的信息增益等方法来还筛选出好的特征。
而且运行包含大量特征的学习器来寻找有用特征太耗时了,也容易导致过拟合,所以,老老实实地投入精力做特征工程吧,这是底线要求。
从天马Alpha+团队这几年的开发实践来看,特征工程的确是重中之重的环节,也是核心投资团队的交易经验和直觉,最直接的体现。
打个比方,如果让机器学习判断照片里的姑娘是不是美女,借鉴游戏里的捏脸工具,可以找出N个原始特征,比如眉毛就有上下左右位置,角度,眉弓形状,眉峰形状等等。
如果大量使用这些原始的特征进行学习,前面的内容告诉我们,维度过多,很容易出现过拟合和维度灾难等问题。
但是有些经验就可以成为很好的特征,比如下面图里的三庭五眼,或者类似的三低四高,就有可能是学习效果很好的特征。
类似的,基于经验和直觉,对一些原始的技术指标或者基本面指标进行组合加工,就有可能设计出好的特征。
假如已经竭尽所能构建了最好的特征集,但是分类器的效果还是欠佳,这个时候该怎么办?
有两个主要选择:更好的学习算法,或者更多的数据(包括更多的样例,以及不会制造维度灾难的更多原始特征)。
研究者更关心算法,但实践角度来看,捷径应该是收集更多的数据。
作为一条经验,有大量数据的本算法要胜过数据少的聪明算法,毕竟,机器学习就是从数据里面搞出花来。
但是,更多的数据又带来另外一个问题:可升级性(scalability)。
而且,采用更聪明的算法得到的回报少于预期,一部分原因是因为,机器学习学习的工作原理基本是相同的。
这个结论可能有些令人吃惊,尤其当看到规则集合和神经网络的表示方法之间差异巨大的时候。
但本质上,所有的学习器都是把临近的样例归类到同一个类别,关键不同是怎么定义“临近”。
非常不同的分类边界可以产生类似的预测结果,如下图所示
+和-表示两类训练样例,里面K近邻(KNN),决策树(D.Tree),支持向量机(SVM)和朴素贝叶斯(N.Bayes)的表示形式五花八门,但分出来的效果基本是类似的。
首先尝试简单的学习器总归是有好处的,更复杂的分类器很诱人,但通常比较难控制,因为需要调节更多的参数,而且内部机制更不透明。
学习器又可以分为两类:一类是大小不变的,比如线性分类器,另一类大小可变,随着数据增长而变大,比如决策树。
所以,数据超过一定数量后,大小不变的学习器就不能从数据增加中受益。
如果有足够多数据,大小可变的学习器理论上可以学习任何函数,但实际却力不从心,主要是受到算法和计算复杂度的限制。
而且由于维度灾难,再多的数据也不会够用。
由于上面这些原因,只要足够努力,聪明的算法,也就是充分利用有数据和计算资源的算法,最后总是能够成功。
终极而言,最大瓶颈不是数据,不是运算能力,而是人力。
那些可以生产人类可理解的输出的学习器,比如规则集合,理应更受欢迎。
实际很多时候,因为不确定性能,也不知道代码有没有低级错误,需要盯着程序的输出,跟着准确率和误差的上上下下而大喜大悲,所以相当地消耗人力。
本部分最后,Domingo教授做了一个相当华丽的论断:
机器学习最成功的组织,是那些建立了基础架构,能够便捷地在多个学习器,数据源和学习目标上敏捷地开展实验,而且实现机器学习专家和领域专家密切合作的组织。
天马Alpha+开发团队也正是以此为初衷,努力实现机器学习专家和投资专家的密切合作。
一开始的时候,每个人都有自己最爱的一个学习算法,而且先入为主地迷恋它的优越性,然后投入大量的精力尝试这个学习算法的各种模型变种,从中选择最好的那个。
模型变种,比如循环神经网络RNN,产生了两个最广泛使用的模型变种,长短期记忆模型LSTM和门控循环单元GRU。
后面研究发现,与其找最好的那个,不如把多个学习器结合(模型集成)的效果更好,而且往往花更少的人力。
而且现在模型集成已经标准化,常见的方法有bagging(装袋),boosting(强化提升)和stacking(堆叠)等等。
所以团队开始合并,规模越来越大。现在冠亚军都合并了超过100个学习器,把这两者集成后,推荐效果又得到了进一步提升。
毫无疑问,未来会看到更大规模的学习器集成系统。
大名鼎鼎的奥卡姆剃刀原则(occam’srazor)原理称:若无必要,勿增实体(entitiesshouldnotbemultipliedbeyondnecessity)。
机器学习中,这个原则通常是指:对于两个有相同训练误差的分类器,比较简单的那个,更可能有更低的测试误差。
虽然不少文献证明这个原则,但这个原则实际中有很多反例。
因此与直觉相反,模型参数的数量和过拟合之间并没有直接的关联。
另外一个更成熟的看法是把复杂度等同于假设空间的大小,也就是基于这样一个事实:更小的空间假设可以用更短的代码来表示假设。
前面经验六-理论保证里面提到,如果缩小假设空间,边界就会得到改进。这个可以进一步改进为,可以为有先验偏好(priorpreference)的空间假设分配更短的代码。
这里有一个先验偏好的概念,先验字面是先于经验获得的知识,这个点掰下去,哲学家康德就要出场了。
这里还是用另一尊大神YoshuaBengio讲过的一个例子来大致说一下,对于人来说,计算(210除以6等于几)容易,计算(CCX除以VI等于几)则复杂很多。
把数字表示成阿拉伯数字而非罗马数字的理由,就是方便人类计算,这就是一种先验偏好。
但如果把这个准确和简单权衡的证明,就变成循环论证了(先有鸡还是先有蛋)。
意思就是结果是准确的是因为我们的偏好是准确的,而不是因为这些假设的表示方法是简单的。
是偏好是准确的决定了结果是正确的,而这些偏好往往是简单表达的,但不代表简单就能得到准确。
还有一个因素:没有学习器可以穷尽搜索整个假设空间。
一个较大假设空间搜索较少假设的学习器,相比在较小的假设空间搜索较多假设的学习器,更不容易发生过拟合。
正如Pearl指出,假设空间的大小只是对确定影响训练误差和测试误差的关键因素有初步的指导意义。
所以,先选择简单的假设,只是因为简单本身就是个优点,而不是简单和准确有着必然的联系。
本质上,因为大小可变学习器(比如决策树)都有一个类似的定理-“每个函数都可以表达为,或者无线逼近的方式近似地表达为XXX“。
仅仅因为一个函数可以被表示,并不意味着它可以被学习。比如,决策树学习器无法学习出比训练样本更多的叶子节点。
假设空间的评价函数有局部最优点,但学习器压根找不到这个真正的函数,即便它可表示。诸如此类。
所以,关键问题不是可不可以被表示,而是可不可以被学习。
对于一些函数,某些表示方法比其他方法更简单,从而需要更好的数据来进行学习,比如对简单的奇函数进行线性组合等,这种深层表示的学习方法是当下机器学习的主要研究前沿之一。
这样做错了吗?如果是错的,为什么还要这样做。
更多的时候,机器学习预测模型的目的是指导行动,看看数据挖掘里面那个著名的啤酒和尿布的例子。
如果我们发现超市里面啤酒和尿布经常一起购买,那把啤酒放在尿布旁边将会提高将会提高啤酒的销售量。
这个现象背后的原因是妈妈在家中带娃,年轻的爸爸去买纸尿片,顺便给自己买些啤酒。
一些学习算法其实有潜力从观测数据中发现因果关系,但可用性比较差。
很多研究者认为因果关系,纯粹是一个杜撰出来的概念,比如,物理定律中就没有因果的概念。
因果存在与否是个深奥的哲学问题,现在并没有一个确切的答案。
但对于机器学习有2个实用的点,首先,不管是否存在“因果关系”,我们都希望能预测行动的效果。
其次,如果能够获取到实验数据,那务必获取。
”在1997年前,大部分的信号还能被解释,例如超跌/超涨反弹,有60%的概率会反弹。但1997年以后,大部分信号,大家都不能理解了。
与别的对冲基金不同的是,文艺复兴不会去找背后的原因,也不会把信号丢掉,除非信号太离谱。
这种不能解释的信号有额外的超额收益,因为其他对冲基金更可能把这类信号丢掉。
为了防止过拟合,文艺复兴的员工先把这种信号丢到实盘里,用小钱先跑并观察,看一下这种异象能不能理解,大部分时候都能理解。当然也有小部分完全不能理解但确实很强的信号。”
所以,如果预测可以成为行动指南,只要不太离谱,其实一定程度上不必太纠结于因果链条。
结论
和其他学科一样,机器学习中的“旁门左道”不是那么容易就可以能了解到,但这些知识对于成功运用机器学习又至关重要。
读者可以参加一个完整内容的机器学习在线课程融合了正式和非正式的知识,网站是
Weka是一款优秀的机器学习开源工具包。
刘知远《机器学习那些事》
周志华《MachineLearning》学习笔记
吴恩达(AndrewNg)《机器学习》课程笔记
YoshuaBengio访谈笔记:用意识先验糅合符号主义与联结主义
VincentSpruyt,