R语言:逻辑回归算法的实现——glm函数

本文介绍了如何在R语言中使用glm函数进行逻辑回归分析。通过红酒质量数据集,展示了数据预处理、模型构建过程,并讨论了变量选择与模型优化。同时,文章提到了ROC曲线和AUC值的计算,以评估模型性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前文中,我们已经介绍过了逻辑回归算法的原理以及其python实现,具体请见逻辑回归算法及其python实现

本文将主要介绍逻辑回归算法的R语言实现。


数据简介

本文数据选择了红酒质量分类数据集,这是一个很经典的数据集,原数据集中“质量”这一变量取值有{3,4,5,6,7,8}。为了实现二分类问题,我们添加一个变量“等级”,并将“质量”为{3,4,5}的观测划分在等级0中,“质量”为{6,7,8}的观测划分在等级1中。

数据下载戳我

因变量:等级

自变量:非挥发性酸性、挥发性酸性、柠檬酸、剩余糖分、氯化物、游离二氧化硫、二氧化硫总量、浓度、pH、硫酸盐、酒精

library(openxlsx)
wine = read.xlsx("C:/Users/Mr.Reliable/Desktop/classification/winequality-red.xlsx") 
#将数据集分为训练集和测试集,比例为7:3
train_sub = sample(nrow(wine),7/10*nrow(wine))
train_data = wine[train_sub,]
test_data = wine[-train_sub,]

逻辑回归的实现

逻辑

### R语言GLM模型算法未收敛及拟合概率为0或1的解决方案 当使用 `glm` 函数构建广义线性模型 (Generalized Linear Model, GLM) 时,可能会遇到两种常见的警告:一是算法未能成功收敛;二是某些观测值的拟合概率接近于0或1。这些问题通常源于数据特性或建模过程中的不当设置。 #### 算法未收敛的原因分析及其解决方法 算法未收敛可能由以下几个原因引起: 1. **多重共线性** 如果自变量之间存在高度相关性,则可能导致优化器难以找到最优解。可以计算方差膨胀因子(VIF),并移除具有高VIF值的特征来缓解此问题[^2]。 2. **样本量不足** 当训练集规模较小而参数较多时,也可能引发不收敛现象。尝试增加样本数量或者减少自由参数的数量以改善这一状况[^3]。 3. **初始值不合适** 默认情况下,`glm` 使用特定策略设定起始估计值。如果这些默认值远离真实情况下的最大似然估算位置,则迭代过程可能无法达到稳定状态。可以通过调整控制选项指定更合理的初值[^4]。 针对上述提到的第一种情形——即由于多维空间内的强关联关系所造成的困难局面,可采取如下措施加以应对: ```r library(car) vif_values <- vif(modelFit1) print(vif_values) ``` 对于第二种可能性,也就是缺乏足够的观察实例支持复杂程度较高的统计描述形式而言,在实际操作层面往往需要重新审视研究设计本身是否存在局限之处,并据此作出相应修改决策比如扩大调查范围获取更多有效记录等等[^5]。 至于第三方面涉及的技术细节部分则相对较为具体化一些,下面给出一段示范代码用于演示如何手动定义新的初始化猜测向量供后续运算采用之需: ```r control_settings <- list(maxit = 100, epsilon = 1e-8, trace = TRUE) custom_starting_points <- c(coef(initial_model)) modelFit_with_custom_starts <- glm(formula = e1 ~ ., family = binomial(), data = imp, start = custom_starting_points, control = control_settings) summary(modelFit_with_custom_starts) ``` #### 关于拟合概率趋近极端值的情况处理办法 当发现预测结果中有若干项的概率估值要么非常低几乎等于零要么特别高近乎完全确定的时候,这表明可能存在所谓的“分离”(Separation) 或者准分离(quasi-separation) 的现象发生。这意味着至少有一个分类能够被当前输入组合完美地区分开来,从而使得极大似然估计变得不稳定甚至不存在理论上的有限解答[^6]。 为了克服这种挑战,推荐考虑以下几种替代途径之一: 1. **Firth's Bias Reduction Method** 这是一种通过引入惩罚机制修正传统MLE偏差的方法,适用于小样本场景以及面临分离困境的情形下仍能提供稳健可靠的系数评估成果。借助专门开发的相关包实现起来也十分简便快捷。 ```r library(logistf) firth_model <- logistf(data = imp, formula = e1 ~ ...) summary(firth_model) ``` 2. **Exact Logistic Regression** 另外一种精确逻辑回归技术同样适合用来处置那些常规手段失效后的棘手案例。不过需要注意的是这种方法计算成本较高,仅限于小型至中型的数据集合应用场合比较合适。 ```r library(elrm) exact_logistic_regression <- elrm(formula = e1 ~ ..., interest = NULL, r = Inf, iter = 1e+05, dataset = imp) summary(exact_logistic_regression) ``` 综上所述,无论是面对算法失败还是异常概率输出的问题,都可以依据实际情况选取合适的改进方案予以妥善化解。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值