算法介绍完毕,可能不完美,但实践证明确实有效。所以我心里就产生了这样一个疑问:这个算法是如何被设计出来的?专业的统计人员是根据了什么知识,哪样的方法论,而能够设计出这么一长串式子,这么复杂的一系列方法步骤,来完成分类与识别的任务?这些方法最初是如何被推导出来的?这于我而言是一个更有趣的问题。
《统计学习方法》里面有一段话讲得非常通俗:
“提升方法基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理。”
也许要探寻这类方法(boosting)来源的根本,需要追溯到某些“专家系统”的原理。当然,严谨的统计学理论是需要通过专业训练,长期学习来形成的,例如说决策树,损失函数等等,掌握了这些知识的人,在经过研究的努力之后,自然能发现这样的算法或者设计出这样的一系列步骤,这不足为奇。我只是打算从相对通俗和直觉的角度,为没有受过完整的统计学训练的人提供理解这一问题的途径。
下面我们就来讲讲AdaBoost算法的另一种通俗的理解。
假如说公司有一个专家库,专门来分析全球各地的石油生产状况的。这是一个非常复杂的问题,所以通常一个专家并不能全部都预测对。那么公司先找来专家A,他通常能预测对全球60%的石油生产状况,另外40%是错误的。这已经很牛了,但是公司还想进一步提高预测水平,这时候公司要做的,就是接着找人来预测另外40%的市场。
假如全球的市场大概分为中东,北美,欧洲,南太,南美等,专家A这哥们对中东和北美比较熟悉,而欧洲和南太等地方经常预测错,那公司只需要再从专家库里找几个,对这几个区域的生产比较了解的专家补充进来,就可以提升预测水平。比如这样:
专家A 预测60%(对应中东、北美)
专家B 预测30%(对应欧洲、南太)
专家C 预测9%(对应南美)
这样一组合,公司的预测水平就提高到了99%。
但是现实没这么简单的问题,都是比较复杂的,都像石油预测这样,找个专家系统就能解决问题了,也不需要用到人工智能算法。现实中,这样的方法最大的缺陷就是,我们无法对样本进行分类(哪些样本属于中东,哪些属于南太),要是这么容易区分,也就相当于可以把复杂问题分解为几个简单问题了。事实上是:
专家A 60%(不知道对应哪个区域)
专家B 30%(不知道对应哪个区域)
专家C 20%(不知道对应哪个区域)
所以你选的专家之间,他们的知识可能是重叠的,就是把三个专家加到一起,也不一定能达到70%。所以这个问题的关键是如何区分样本,或者说,让专家知识之间的重叠率最低。
你可能会说,样本怎么能够进行划分?样本不就是随机的吗?而且就算你强制进行了区分,因此所设计出来的算法在样本上面跑得好好的,但是在全量数据面前可能就完全乱套了。我想说的是,样本与样本之间,当然也必须是有规律的,不然的话,它们又如何代表全体呢?如果样本不能模拟全体,又如何能成为一个合理的样本?如果一套算法在样本上跑得好好的,一到全量数据就完全不行,那可能是算法不行,也很可能是样本不行。
这当然就有一个统计学本身比较难解决的难题,样本永远代替不了全体,但一定概率下,它还是有用的。
扯回来,如何区分样本。我们当然无法像上面的例子那样,人为的分析出样本的区别(中东,南太),所以只好用到统计方法自己去区别,一个显而易见能想到的办法是,增加那些没被预测出来的样本的权重,然后将这些新样本在剩余的专家中进行测试,找到准确率最高的专家,依此类推一轮轮进行选择。
所以,打比方说,将专家A所预测错误的全部40%的样本,它们的权重全部加倍,然后再把专家B,C,D,E,F等等叫来,让他们进行预测,看这时候谁的错误率最低。由于我们是加了权重,所以错误率最低的人,虽然不一定预测得更准确,但可能与专家A的知识面重叠率越小,所以他们在小众市场如欧洲,南美这些地方预测的准确率更高。
当然了,这时候样本权重加倍够不够,如果不够,可以加到3倍,4倍,具体就看如何设计,多少倍最好了。
假如这时候找到了专家B,他在加权了的样本集上面预测是最准的,达到70%,那么还有30%没预测对怎么办呢,继续找专家C来,依此类推。
最终得到的准确率就是
(专家A的60% * 1)+(专家B的70% * 40%)+(专家C的…)
我想这也许就是提升算法背后的原理吧。