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似乎很容易被“不友好”消息破坏,并且没有简单的方法来添加正则化来修复它。