逻辑回归中的随机梯度下降

数据挖掘 机器学习 数据挖掘 r 逻辑回归 梯度下降
2021-09-22 03:37:48

我对机器学习很陌生,在我的第一个项目中偶然发现了很多我真正想解决的问题。

我将逻辑回归与 R 的glmnet包和 alpha = 0 用于岭回归。

实际上我使用的是岭回归,因为套索删除了我所有的变量并给出了非常低的曲线下面积(0.52),但使用岭回归并没有太大差异(0.61)。

我的因变量/输出是点击概率,基于历史数据中是否存在点击。

自变量为州、城市、设备、用户年龄、用户性别、IP运营商、关键词、手机厂商、广告模板、浏览器版本、浏览器家族、操作系统版本和操作系统家族。

其中,我使用状态、设备、用户年龄、用户性别、IP 运营商、浏览器版本、浏览器系列、操作系统版本和操作系统系列进行预测;我没有使用关键字或模板,因为我们想在深入研究我们的系统并选择关键字或模板之前拒绝用户请求。我没有使用城市,因为它们太多或移动制造商,因为它们太少。

可以吗,还是我应该使用被拒绝的变量?

首先,我从我的变量创建一个稀疏矩阵,这些矩阵映射到具有是或否值的点击列。

训练模型后,我保存系数并截取。这些用于使用逻辑回归公式的新传入请求:

1 / (1+e^-1*sum(a+k(ith)*x(ith)))

其中a是intercept,kith 系数,xith 变量值。

到目前为止我的方法正确吗?

R 中的简单 GLM(即没有正则化回归的地方,对吗?)给了我 0.56 AUC。通过正则化,我得到 0.61,但没有明显的阈值,我们可以说在 0.xx 之上它的大部分是 1,而在它之下,大多数零被覆盖;实际上,点击未发生的最大概率几乎总是大于点击发生的最大概率。

所以基本上我该怎么办?

我已经阅读了随机梯度下降如何在 logit 中是一种有效的技术,那么如何在 R 中实现随机梯度下降?如果不简单,有没有办法在 Python 中实现这个系统?SGD 是在生成正则化逻辑回归模型之后实施,还是完全不同的过程?

还有一种称为跟随正则化领导者 (FTRL) 的算法,用于点击率预测。是否有我可以通过的示例代码和 FTRL 使用?

3个回答

随机梯度下降是一种设置回归器参数的方法;由于逻辑回归的目标是凸的(只有一个最大值),这不会成为问题,通常只需要 SGD 来提高大量训练数据的收敛速度。

您的数字对我的建议是,您的功能不足以分隔课程。如果您能想到任何有用的功能,请考虑添加额外功能。您还可以考虑原始特征空间中的交互和二次特征。

您提到的许多功能都是分类的,并且每个级别都有这么多,您的问题的维度将会扩大。与其最初关注 Lasso 和 Ridge 回归,不如先在样本(记录)中寻找聚类来了解数据集?在您当前的方法下,您将所有内容都放入模型中并期望高 AUC(?)。您可能会发现几个集群,其中类别级别的频率在一个或多个潜在集群中占主导地位。如果您不知道样本(记录)的聚类结构是什么,请尝试基于特征值质心的 k-means 聚类,看看是否存在唯一聚类。

一旦你掌握了集群结构,然后解决回归问题。您的回归模型可能会崩溃,部分原因是您的数据存在很大的不均匀性,以及之前提出的问题。

机器学习是关于执行无监督的类发现,然后是类预测(你的输出二进制变量)。

此时,尚不清楚您是否研究了数据以了解其集群结构,而是将其放入期望获得高 AUC 值的监督模型中。

SGD 与正则化无关,FTRL 也是如此。它们是在分类或回归问题中逼近最优解的学习方法。

如果你想了解 FTRL 是如何工作的,你可以查看我在我的工业项目中应用的代码。

这里还有一种基于FTRL的TDAP学习方法,可以查看代码。

希望这会对你有所帮助,祝你好运!