你实践中学到的最重要的机器学习经验是什么?

在quora上看到了这个问题,感觉很有意义,希望在知乎上也能听一听大家机器学习实践的经验之谈 。
关注者
2508
被浏览
41086

56 个回答

理解模型的基本假设,看自己的数据是否符合这种假设。任何模型都是有某种假设的,如果数据不符合这种假设,就不太可能学出有意义的模型并用于预测。

比如LDA(主题模型),假设是在同样一批文档中经常共现的词,语义上往往是相关的。这种特性不仅在自然语言中成立,在一些领域,比如每个人经常访问的网址集合,可能也是成立的,所以LDA也可以拿过去用。但如果数据不符合这个特性,套用LDA就是没有意义的,比如每个球队里的队员,可能并没有因为属于一个球队而具有什么相似性。

再举个例子,CNN(卷积神经网络),它的基本假设是特征的不同维度之间有局部相关性,卷积操作可以抓住这只局部相关性,形成新的特征。比如自然语言里,有重复出现的bigram,或者图像里代表性的局部像素块。不满足这种局部相关性的数据,比如收到的邮件序列,这种局部相关性很弱,那用CNN就不能抓到有用的特征。

最后,高斯copula,在量化金融里曾被广泛使用,把债券之间非高斯的相关性用copula转化成高斯然后拟合。然而这个模型隐含的假设是这种相关性符合瘦尾分布(thin tailed distribution),即罕见事件发生的概率非常非常低。这个不合理假设导致对黑天鹅事件概率严重低估,曾被视为2008年金融危机的根源之一。

我这里先抛砖引玉,翻译下quora上的高票回答,同时加了点自己的理解,原文在这里:quora.com/What-are-the-

1. 首先要多花时间定义好要解决的问题,至于解决问题的方法可以先放一放。 不要过早的给问题选择解决方案(例如看到一个问题,就说应该用多任务学习的方法解决)。用凑合的技术去解决一个正确的问题要好于用一个高大上的技术去解决一个错误的问题。不要只给你的客户展示机器学习的好处,而不告诉他们你的训练测试误差是多少。

2. 要做数据清洗,保证你的训练数据是干净和高质量的。否则不管你的技术多高大上,也只是在训练垃圾。

3. 不要只看训练和测试误差,要看一看模型的系数,做一些模型检查。 例如看一看模型在一些数据上的表现,要重点关注那些结果不好的。看待机器学习的问题,应该同时用统计和优化的视角。

4. 不要只关注训练结果,也要想想模型花费的代价。花巨大代价取得一点点提升可不划算。

5. 多了解一些领域知识有助于提高通用部分的理解。例如一个模型有很多评价指标,如果你能了解他们的不同,那么就能选择合适的指标,专注于正确的方面。

6. 做实验前,要做好规划。想清楚哪些适合在线跑,哪些适合离线跑。都在线跑太费时间,但是有些问题还是需要在线实验的,例如广告模型。