聊聊数据挖掘竞赛中的套路与深度学习的局限互联网+

雷锋网 2017-07-25 15:22
分享到:
导读

则是因为每一个非线性模型提取非线性特征的方法都不一样,流程无非是   数据预处理   特征工程   模型训练与挑选(这里会讨论深度学习可能存在的局限性)   模型融合   接下来我对每一个进行讨论,因为多个模型的非线性特征组合后。

雷锋网按:本文原作者兔子老大,原载于其知乎专栏――MLの玄学姿势。雷锋网(公众号:雷锋网)已获得授权。 前言刚好在暑假通过参加 kaggle 的 Zillow Prize 比赛来让我在数据挖掘和机器学习中完成了菜逼到 Level 1 的转变,借知乎的平台总结一下比赛的经

  雷锋网按:本文原作者兔子老大,原载于其知乎专栏――MLの玄学姿势。雷锋网(公众号:雷锋网)已获得授权。前言刚好在暑假通过参加 kaggle 的 Zillow Prize 比赛来让我在数据挖掘和机器学习中完成了菜逼到 Level 1 的转变,借知乎的平台总结一下比赛的经验,先声明本文绝不是只列出名词的文章,每一点背后都会有相应的文字解说,各位客官可以安心吃用和讨论。

  其次要强调的是这篇文章不承诺带你上 kaggle top1%,不承诺你看完后就懂数据挖掘,就懂机器学习,这次的总结分享只针对下列有如下问题的人群。

  网上其他的攻略文章看得不少,为啥自己还是一波操作猛如虎,一看比分 0-5?

  为啥深度学习近年成绩斐然,然而一些问题上了深度学习后,比分却变成了 0-6?

  这两个问题会随着介绍整个流程而和大家讨论,所以先来对一般的流程进行总结,流程无非是

  数据预处理

  特征工程

  模型训练与挑选(这里会讨论深度学习可能存在的局限性)

  模型融合

  接下来我对每一个进行讨论。

  数据预处理这一点我不谈具体的技术,因为这些技术名词时老生常谈,什么归一化,标准化恐怕数据挖掘的第一课就是谈这些东东,这里只讨论两个问题,你知道什么时候该用什么技术手段进行预处理吗?你知道预处理的目标是什么吗?

  按我自己的理解,数据本身决定了模型表现的上限,而模型和算法只是逼近这个上限,这和大部分数据挖掘教材中的 RIRO 原则是对应的,因此,对数据的预处理(和特征工程),要干的就是提高模型可逼近的上限,以及提高模型鲁棒性

  明白这两个目标,在预处理阶段你需要干什么就很容易反推出来了。

  怎么提高模型可逼近上限?

  提特征

  特定领域还需要滤波和去噪

  把干扰模型拟合的离群点扔掉

  怎么提高模型的鲁棒性?

  数值型数据中的缺失值可以花式处理,默认值,平均值,中位值,线性插值

  文本数据可以在字,词,句等粒度不同进行处理

  图像数据进模型之前把图像进行 90,180,270 等不同角度翻转也是常见的处理方式了

  总的来说,在这里就是需要在不同方面的进行数据的描述,将一份原始数据稍作扩展。

  特征工程特征工程应包括两部分特征抽取和特征挑选,特征挑选的资料网上一搜一大堆,因此这里只讨论特征抽取,为什么?因为巧妇难为无米之炊啊,没有特征你挑选个宝宝吗?

  第一个方法叫做按业务常识抽取。

  简单点来说,就是通过对你需要分类 / 预测等领域的先验知识来进行抽取,比方说,要区分男生和女生,直接使用性特征肯定要比其他的身高体重这些数据的准确率要高。当然,考虑到每一个人都不可能所有知识都精通,当面对一个陌生的业务领域时,建议优先提取 X1/X2 这样形式的特征(这里的 X1,X2 不一定是一个变量,也可能使一个式子),因为传统的统计流派特别喜欢通过 X1/X2 组成一个叫做 *** 率这样的指标,有时可能有奇效。

  第二个方法叫做抽取非线性特征。

  线性模型具有简单,快速等优势,但它的劣势也很明显,他只能表达线性关系,而一般现实问题那有这么简单的线性关系。因此,解决方案就是线性模型使用非线性特征。

  可能有些同学有有点懵逼,什么叫线性模型搭配非线性特征?看完这个下面这个例子就清楚了:

  假设一个回归预测的问题,求的 y=f(x),那么有如下两种形式的表达

  …… (1)

  ……(2)

  (1) 式是线性回归,只能表达线性关系,(2) 式是多项式回归,能够表达非线性关系。这时我们令:

  , , , ,

  这时再回首去看 (2) 式,就能得到

  …… (3)

  有些童鞋应该反应过来了,是的,所谓的线性模型使用非线性特征的原理就是将非线性特征记作新的变量 t,然后扔进一个线性模型里面,这时得到的就是关于 t 的线性模型,但却可以表达 x 的非线性关系。

  至于提取非线性特征,除了人工提取这种多项式来做特征外,也可用深度学习,SVM 等非线性模型的中间输出来作为非线性特征。这些非线性模型的方法,也大概是把低维度投影到高维度后塞进线性模型,至于说为什么要用非线性模型提取,一是因为省人力,二是因为模型往往能学习到人类常识上意识不到的特征的,至于为什么不适用非线性模型直接进去端对端的工作方式,则是因为每一个非线性模型提取非线性特征的方法都不一样,那么提取出来的非线性特征自然也就不一样了。

  但要注意一点的是,是否使用模型来提取非线性特征这个决定要考虑实际情况,因为多个模型的非线性特征组合后,或者是模型融合技术,计算量或时延是不可接受的,有些方法连工程实践上都不一定可取(即使有分布式计算的环境),就更不要说打 kaggle 的大部分都是个人用户,只有台式机或笔记本。

  模型训练和选择合理的划分数据集和训练集,平衡样本,交叉验证这些东西是老生常谈,网上一找一大堆,所以本文继续不谈。

  先说说的是模型的选择,机器学习经常被称为玄学,刚开始我以为说的是因为调包侠本根本不知道里面算法的原理,所以这样造成,但后来我发现,即使你知道里面的算法的原理,也依然是玄学。

  为什么这么说,我们对比一下其他的一些类型的程序出错是怎么解决的?print 大法?二分排查找 bug?无论是何种方法,只要 bug 可重新,你总是可以通过程序的表现而定位到错误,但机器学习不行,除了模型是否过拟合可以通过一些指标看出,然后调整对应得参数外,其他的一些问题,压根无法通过现象而定位到需要修改的错误。

  比如说,预测效果不好,我知道肯定是需要增加特征,但需要增加一个哪些方面的特征?这个特征是需要引入新的数据维度,还可以从现有的数据提取出来?或者说当前的数据的价值已经被我榨干了吗?又或者说,你通过算特征与预测值的相关系数,相关系数低的特征就一定没用了吗?显然不是,因为你现在只是算了单变量的,没有算排列组合的结果,而至于算排列组合的结果,真的能算吗?…… 诸如此类的是没有 100% 准确的指导方案的(可能连 90% 准确的指导方案都没)。

  当然,解决方法还是有的,就是不断的堆特征,和堆模型,挑选后来一波融合,指望不同的模型能学到不同的方面,然后互相互补。

  落实到行动,就是那句老话,大胆假设,小心求证。

模型 特征 数据 线性 需要
分享到:

1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。


观点约架