标签:五个 对象 连续序列 类别 比赛总结 增加 超过 编码 深度
做完 Kaggle 比赛已经快五个月了,今天来总结一下,为秋招做个准备。
题目要求:根据主办方提供的超过 4 天约 2 亿次的点击数据,建立预测模型预测用户是否会在点击移动应用广告后下载应用程序。
不平衡数据集的处理思路:
一般对样本进行 上采样 和 下采样,顾名思义就是 多的样本少采一点,少的样本多采一点。极端情况下,就是样本太多的时候,就可以做增强学习,就是我给我的少样本增加噪音。但是由于我们这个预测问题,它是一个时间连续序列,没有办法给时间连续序列做一个不同频率的采样,所以我们没有办法进行 上采样 和 下采样,所以,针对这个问题,我们所做的是,在算法原理上,引入一个正则项,来限制它的不平衡率。引入一个系数,这个系数就是它的不平衡率,在这个数据集中约是 99.7%。具体到我们这个模型,它有一个参数叫 isUnbanlanced(是否是不平衡的),设置为 true 后,它可以自动的检测不平衡率。
接下来,针对这个不平衡数据集,要使用一些比较可靠的评价指标。评价指标用一般的准确率是不行的,举个例子,我们现在有一个分类器,对所有的患者判定是否患病,这么一个傻瓜分类器,人群中可能患者是 万分之一 的概率,那么,这个分类器的准确率可以到达 好几个9,比如 99.9%,但是这个数字是没有意义的,它没有起到分类的作用。所以,我们的评价指标不能够使用准确率,一般使用的叫 AUC,AUC 的全名叫做 Area Under Curve ,被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。ROC 曲线的横轴和纵轴分别是真阳率和伪阳率,真阳率和伪阳率的和为1,然后就会画一条曲线,AUC 就是 ROC 曲线下的面积。AUC 越大,准确率越高。AUC 不受这种不平衡的影响,所以经常会用 AUC 去做指标。
以上是针对不平衡数据集的处理。
下面是正式的流程。
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 做。
标签:五个 对象 连续序列 类别 比赛总结 增加 超过 编码 深度
原文地址:https://www.cnblogs.com/boxin/p/9785604.html