R 的 glm 功能在大数据/机器学习环境中没用吗?

机器算法验证 r 物流 广义线性模型 网络 分离
2022-02-27 00:56:02

glm对于以下“玩具”示例(具有约 50k 数据的二进制分类,约 10 个特征),R 将“破坏”(不收敛于默认设置),但glmnet在几秒钟内返回结果,我感到很惊讶。

我使用glm不正确(例如,我应该设置最大迭代等),还是 Rglm不适合大数据设置?添加正则化会使问题易于解决吗?

d=ggplot2::diamonds
d$price_c=d$price>2500
d=d[,!names(d) %in% c("price")]

lg_glm_fit=glm(price_c~.,data=d,family = binomial())

library(glmnet)
x=model.matrix(price_c~.,d)
y=d$price_c
lg_glmnet_fit=glmnet(x = x,y=y,family="binomial", alpha=0)

Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

编辑:感谢 Matthew Drury 和 Jake Westfall 的回答。我了解已经解决的完美分离问题。 如何处理逻辑回归中的完美分离?

在我的原始代码中,我确实有第三行删除了派生标签的列。

我之所以提到“大数据”,是因为在许多“大数据”/“机器学习”设置中,人们可能不会仔细测试假设或知道数据是否可以完美分离。glm似乎很容易被“不友好”消息破坏,并且没有简单的方法来添加正则化来修复它。

2个回答

这与 无关glm,您只是用人为的完美分离制造了一个问题:

df <- data.frame(x = rnorm(100), y = rnorm(100))
df$y_c = df$y > 0

glm(y_c~., data=df, family=binomial())

警告消息:1:glm.fit:算法未收敛 2:glm.fit:拟合概率为 0 或 1

y是 的完美预测器y_c

非正则化模型正遭受完全 分离的困扰,因为您正试图从衍生变量price_c的连续变量中预测二分变量。price

正则化模型通过施加惩罚来避免完全分离的问题,该惩罚使price预测变量的系数不会下降到 $\infty$ 或 $-\infty$。因此,它设法收敛并运行良好。 or . So it manages to converge fine and work well.

在这个玩具示例中,您应该从设计矩阵中删除连续price预测变量。

编辑:正如@Erik 指出的那样,连续price预测器已经从设计矩阵中删除,我不知何故错过了。因此,完全分离来自其他一些预测变量或预测变量的组合。

还值得补充的是,当然,这些问题都与 Rglm()函数中逻辑回归的特定实现无关。它只是关于正则化与非正则化逻辑回归。