数据分析:人和算法的关系
人有人的作用,算法有算法的作用。算法不可少,但人的作用可能更重要。
有人认为,搞数据分析就是两件事:选特征(变量)、找算法。剩下的事让机器去算就可以了。其实,这种思想就像个不负责任的领导:让下面把问题收集上来,再交给秘书就办。这时,研究算法的人就像研究《如何做好秘书工作》。
对数据分析来说,算法的本质是优化:就是在一族函数或者参数中,找到一个最好(或者较好)的、能够满足特定的需求的。但是,优化的范围是在算法运行之前就由人类给定了。形象地说就是:人画了一个圈,让机器在这个圈里面找一个宝贝。而算法好,就是找得快、找得准。但是,画圈的却是人啊!这个圈画到什么地方、画多大、什么是宝贝,都是人定义的。我们想想一下:如果把地球都画进来,去找一根针,再好的算法也会“累死”的。所以,对于真正复杂的问题,人往往比算法更重要。
对于复杂问题,人们事先说不清楚的问题很多。比如,说不清楚钢板的厚度与强度之间到底用什么函数来描述。这就好比,圈子根本画不好:如果这个问题一旦“开放了”、用通用的逼近函数,就相当于圈子变得非常大。再比如,对于可靠性要求高的复杂问题,精度高的模型未必是最好的(这个问题我早有论证)。这就好比,人说不清宝贝的价值用什么来衡量。所以,机器其实无法做最终的决定。
这时,一般的做法是:人大体去画一个圈,让机器去找。人再看看找到的东西是不是(一般不是);然后再根据找到的东西,决定下一次画圈往哪个地方偏移。也就是说,人是最终的决定者。人在人机互动的过程中,从算法的反馈得到很多信息、决定下一步怎么走的。
人的这些思考逻辑是否可以写下来,让机器去学呢?这显然是个不错的研究方向。但这很不容易:因为人做决定的逻辑和标准,很难说清楚:正如人无法说清楚梨子的味道。但是,人看到结果以后,往往能够比较容易地把握:这就像给他一个水果,问他是不是梨子。同样,人难以说清楚的原因,是他的判断往往基于大量的常识;而常识就像我们身边的空气,往往视而不见、只有缺少的时候才能显示出来。人说不清楚,自然也就难以通过编码告诉计算机。
所以,对于复杂问题,不要过多地寄希望于“算法”,而要更多地吸纳人的经验。这时的算法,是“站在巨人的肩上”。其实,人的经验是从很多地方得到的、包括古人的研究、其他学科的知识,而不仅仅是从现有数据中得到的。算法只能处理数据,数据往往可以让人的认识更加精细,其作用就像一个显微镜。而要更大尺度地看清楚一个问题,还是要依赖于更多其他的知识。这时,对数据的过度依赖,就会变成“管中窥豹”了。
人有人的作用,算法有算法的作用。算法不可少,但人的作用可能更重要。