Kaggle比赛总结
做完 Kaggle 比赛已经快五个月了,今天来总结一下,为秋招做个准备。
题目要求:根据主办方提供的超过 4 天约 2 亿次的点击数据,建立预测模型预测用户是否会在点击移动应用广告后下载应用程序。
- 数据集特点:
- 数据量很大,有 2 亿条之多
- 数据是不平衡的,点击下载的数量远远小于没有点击下载的数量
不平衡数据集的处理思路:
一般对样本进行 上采样 和 下采样,顾名思义就是 多的样本少采一点,少的样本多采一点。极端情况下,就是样本太多的时候,就可以做增强学习,就是我给我的少样本增加噪音。但是由于我们这个预测问题,它是一个时间连续序列,没有办法给时间连续序列做一个不同频率的采样,所以我们没有办法进行 上采样 和 下采样,所以,针对这个问题,我们所做的是,在算法原理上,引入一个正则项,来限制它的不平衡率。引入一个系数,这个系数就是它的不平衡率,在这个数据集中约是 99.7%。具体到我们这个模型,它有一个参数叫 isUnbanlanced(是否是不平衡的),设置为 true 后,它可以自动的检测不平衡率。
接下来,针对这个不平衡数据集,要使用一些比较可靠的评价指标。评价指标用一般的准确率是不行的,举个例子,我们现在有一个分类器,对所有的患者判定是否患病,这么一个傻瓜分类器,人群中可能患者是 万分之一 的概率,那么,这个分类器的准确率可以到达 好几个9,比如 99.9%,但是这个数字是没有意义的,它没有起到分类的作用。所以,我们的评价指标不能够使用准确率,一般使用的叫 AUC,AUC 的全名叫做 Area Under Curve ,被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。ROC 曲线的横轴和纵轴分别是真阳率和伪阳率,真阳率和伪阳率的和为1,然后就会画一条曲线,AUC 就是 ROC 曲线下的面积。AUC 越大,准确率越高。AUC 不受这种不平衡的影响,所以经常会用 AUC 去做指标。
以上是针对不平衡数据集的处理。
下面是正式的流程。
- 第一步是清洗数据。要给数据打上标签。
- 第二步是特征工程,第一种办法,比如说 time 类型的一维数值,给它拆成 day hour minute second 这样就变成 四维了。还有频率,比如当中有一个设备号,它在所有数据中出现的频率。因为它提供的是设备号,这是一个类别特征,要把这个变成频率,就成了一个连续值特征。对于频率来说,还有一点就是我们引入了一个叫 置信系数,比如频率出现了异常值,在 2亿 条数据中出现了一次跟两次,其实没有区别,但在频率这个维度上就是一倍和两倍的关系,我们不想要这个差异,需要引入一个 置信系数,给分子分母同时加上 Log,这样差距就缩小了。然后给特征之间加上交叉组合,比如说,设备号相同的用户他们的信道号的平均数、方差、绝对值差异,这些数据都很有意义。经过特征工程,我们的特征就从7维扩展到了50维。
- 建立模型。我们这里用到了 lightGBM。LGB 的原理,两个重点。1. 它是一个树模型,底层是二叉决策树;2. 它是在树模型上做一个 boosting 集成学习。集成学习有很多种,boosting 是其中之一。boosting 原理是产生很多模型,第二个模型拟合的不是真实对象,而是前一个模型与真实模型之间的残差,然后把所有模型加在一起。所以它是一个加法模型,然后不断逼近真实情况。这是 lightGBM 的两个特点。
Q: lightGMB 和GDBT 、XGB 的区别?
A:区别有:
1. 二叉树底层要找最佳收益分类点,但是数据太多了,复杂度很高。XGB 选择了预排序算法,就是说你要找最佳分类点,我就先跟你预排序,后面的复杂度就降下去了。但要维系一个已经排好序的特征,需要空间,而且时间上有所牺牲,但是,LGB不是这么处理的,它就不用传统的那种算法,它用统计学的一种算法,叫直方图算法,这种算法的好处是,不用对所有的数据做运算,而是把数据落在一个个区间上面,然后复杂度就会下降很快。就相当于邻近的数据都给缩成一类了。直方图很多时候都服从正态分布,一般有一个峰值。我们找到那个峰值,就默认它是最佳分类点。虽然在机器学习当中,经常是找到的最佳分类点不是绝对的最佳分类点,但是经过多次计算,也能达到同样的效果,就是牺牲了一定的精度,但速度比你快很多。
2. 因为 boosting 模型是不断逼近,可以做到非常准确,但是它有一个问题,就是容易过拟合。所以,XGB对树的深度做了一个限制,但是LGBM是对叶节点做限制。
3. XGB 不支持类别特征。比如说,你是男,我是女,这是类别。还有一种特征叫连续值特征,比如年龄,1岁,2岁,20岁,这是连续值特征。类别特征的输入,需要引入 独热编码 (OneHot编码),XGB在类别特征上需要做一个 独热编码,但是 LGB 不需要,因为它集成了
4. LGB 对并行的支持做了优化,比较快。
Q: 为什么使用 LGB,有没有试过别的模型,用过 LR 模型吗?
A: LR 和 LightGBM 的应用场景。LR、FM 这种以逻辑斯蒂回归为基础的算法模型,都使用于稀疏矩阵,而以 lightGBM 为代表的树模型,适用于不那么稀疏的,适用于连续值多的。业界往往有这么一种做法,用树模型挑选特征,因为特征比较稀疏,然后把稀疏矩阵送给 LR 做一个分类。因为我们的样本它不是稀疏的,所以直接用 LightGBM 做。
- 跑模型。的出来的 AUC 是0.98 。
Kaggle比赛总结的更多相关文章
- Kaggle比赛:从何着手?
介绍 参加Kaggle比赛,我必须有哪些技能呢? 你有没有面对过这样的问题?最少在我大二的时候,我有过.过去我仅仅想象Kaggle比赛的困难度,我就感觉害怕.这种恐惧跟我怕水的感觉相似.怕水,让我无法 ...
- Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量
Kaggle比赛冠军经验分享:如何用 RNN 预测维基百科网络流量 from:https://www.leiphone.com/news/201712/zbX22Ye5wD6CiwCJ.html 导语 ...
- kaggle比赛流程(转)
一.比赛概述 不同比赛有不同的任务,分类.回归.推荐.排序等.比赛开始后训练集和测试集就会开放下载. 比赛通常持续 2 ~ 3 个月,每个队伍每天可以提交的次数有限,通常为 5 次. 比赛结束前一周是 ...
- Kaggle比赛(一)Titanic: Machine Learning from Disaster
泰坦尼克号幸存预测是本小白接触的第一个Kaggle入门比赛,主要参考了以下两篇教程: https://www.cnblogs.com/star-zhao/p/9801196.html https:// ...
- Kaggle比赛(二)House Prices: Advanced Regression Techniques
房价预测是我入门Kaggle的第二个比赛,参考学习了他人的一篇优秀教程:https://www.kaggle.com/serigne/stacked-regressions-top-4-on-lead ...
- 我的第一个 Kaggle 比赛学习 - Titanic
背景 Titanic: Machine Learning from Disaster - Kaggle 2 年前就被推荐照着这个比赛做一下,结果我打开这个页面便蒙了,完全不知道该如何下手. 两年后,再 ...
- Kaggle比赛NCFM图像分类任务简介
为了保护和监控海洋环境及生态平衡,大自然保护协会(The Nature Conservancy)邀请Kaggle社区的参赛者们开发能够出机器学习算法,自动分类和识别远洋捕捞船上的摄像头拍摄到的图片中鱼 ...
- kaggle比赛之悟
一.模型与特征哪个重要? 参与Sberbank Russian Housing Market比赛,一开始使用sklearn的岭回归函数Ridge(),残差值一直是0.37左右,然后同样的特征又使用了X ...
- Kaggle 比赛项目总结(项目流程)
一.EDA(Exploratory Data Analysis) EDA:也就是探索性的分析数据 目的: 理解每个特征的意义: 知道哪些特征是有用的,这些特征哪些是直接可以用的,哪些需要经过变换才能用 ...
随机推荐
- 139.00.006 Git学习-标签管理Tag
@(139 - Environment Settings | 环境配置) 一.Why 发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本.将来无论什么时候,取 ...
- Netty相关面试题
1.BIO.NIO和AIO的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理.线程开销大. 伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源. N ...
- Data Flow ->> Excel Connection遇到错误:[Excel Source [16]] Error: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER.....
在SSIS下做Excel导入数据的时候遇到下面的错误 [Excel Source [16]] Error: SSIS Error Code DTS_E_CANNOTACQUIRECONNECTIONF ...
- SVNKit学习——使用低级别的API(ISVNEditor接口)直接操作Repository的目录和文件(五)
本文是参考官方文档的实现,官方wiki:https://wiki.svnkit.com/Committing_To_A_Repository 本文核心使用的是ISVNEditor这个接口直接对Re ...
- sql语句浅谈以及mysql遇到的问题解决见解
mysql数据库基本操作: .显示数据库和查看mysql版本 show databases; select version(); select user();查看用户 .选择数据库 use 数据库名; ...
- easyui学习笔记12—tab标签页的添加和删除
这一篇我们来看看标签页的添加和删除动作.我在想看这些例子还不如看文档,文档的内容更加全面,但是文档全部是理论没有实际的操作,看起来很枯燥,文档只能是遇到问题的时候查.easyui的文档写的还是很详细的 ...
- Wifi密码破解
Wifi密码破解1:通过字典(暴力)破解WIFI密码 简单破解WEP/WPA/WPA2加密的WIFI密码,平台kali-linux 工具:Aircrack-ng 过程很简单:先抓含有正确密码的握手 ...
- commons-lang(一)
写在开头的话: 在工作中,经常会要用到一些公用的组件包,比如日期,String这些等,换过几次工作的朋友对这事肯定比较深刻,如果自己有积累的还好,对于没有积累的同学,尤其是规模较小的公司,怕是又要重头 ...
- ThreadLocal介绍
作者:知乎用户链接:https://www.zhihu.com/question/23089780/answer/62097840来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- Cocos2d-x移植Android 常见问题处理办法
1.函数.变量出现"could not be resolved "问题 出现此问题通常是没有找到cocos2d-x声明的头文件.在eclipse将cocos2d的头文件文件夹引入. ...