stata和机器学习
最近在用stata做机器学习。挺神奇的,因为总觉得stata是很正统(称不上传统,前面还有sas)的计量软件,对一些机器学习的算法并不是很感兴趣。就语言而言,stata的潜能还是很大的,但是因为路数跟传统的语言,区别很大,所以写code有的时候很费劲。这就像让毕加索用毛笔画画(张大千真的送过毕加索一根毛笔!他也真的画过),他最终也可以画出来一幅画,但作画的技法是你很难想象的。总之就是比较费劲,不太顺手。这一点上,matlab虽然也是高级语言,但明显比较贴近于一般的语言比如C。所以在我来看没什么过渡感。
我又仔细想了想原因,stata的stat工具包多到发指,这个必须以牺牲一些别的功能为代价。很多时候我觉得线性代数、数值分析上可能就是这种代价。matlab带个matrix的前缀,就像stata带着stat,矩阵不必说了,数值计算也是杠杠的,但很多别的工具包就顾不上了,特别是matlab还得顾着做simulation的科学家们。C就更不用说了,基本除了加减乘除别的什么都没有,但做计算无比快,不像matlab能用来给mac取暖。
stata做计算没有长处,对回归问题不大,因为本质上都有套路,很多时候做L2回归,对平方项求导,感谢高斯的发明,一切变得很简单。机器学习很多方法比如支持向量机,核方法,也都跟回归差不多,大家都是超平面分割,不是因为你叫机器学习我叫回归你就高端了。但很多时候求L1回归,看着绝对值而不是平方项求极值,这个连解析解都没有。这个时候stata就吃亏了,计算潜能再说,写浮点数这些都不方便,自然用stata就不顺手了。比如算个牛顿法,很明显stata不如matlab。我拿stata都不知道怎么写。当然matlab比C还是差远了。
我觉得做应用经济学,应用数量社科的,应该多学一学stata,spss这些之外的语言。当然做theory的可能也不太屑于考虑stata的事儿。不过语言终究是工具而已,还不是最核心的。核心的还是语言中的算法,更核心的是算法背后的一种思想和概念。虽然噱头颇多,我还是很支持机器学习的,不是说某种方法炫酷,某个名词高大上的问题,关键是机器学习的一种思想。在大数据时代,这不是赶时髦,有的时候是为了减少开销而不得不做的一件事,至于具体什么算法都可以商量。而这种思想我觉得是最值钱的。