问题描述
在用R语言的glm函数做logistic回归时主要有以下两种报错:
Warning: glm.fit: algorithm did not converge
Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
Warning messages:
1: glm.fit:演算法沒有聚合
2: glm.fit:拟合概率算出來是数值零或一
glm.fit:演算法沒有聚合
对于第一个警告1: glm.fit:演算法沒有聚合 ,报错原因是用来拟合的数据在达到最大迭代次数时还没有收敛
(因为R在计算logistic回归时,是用极大似然估计法来进行迭代求解的,并且glm函数默认的最大迭代次数是 maxit=25,所以当拟合数据(matrix X或者说training set)不太好时,可能经过25次迭代后系数解还无法收敛)
解决方法
(1)增加最大迭代次数。比如在glm函数中设置 maxit = 200
(2)如果上述方法还无法解决问题,可能确实是 training data 不太ok,这时需要对 trainning data做进一步的处理,比如奇异值分解。
glm.fit:拟合概率算出來是数值零或一
要明白这个报错是怎么回事,我们可以先使用自带的数据集做可视化来帮助理解,先用如下函数导入数据
library("ggplot2")
data<-iris[1:100,]
samp