基于 mlr 包的逻辑回归算法介绍与实践(下)

简介: 上期 基于 mlr 包的逻辑回归算法介绍与实践(上)关于逻辑回归的介绍内容中主要包括了特征工程、特征选择和缺失值的处理等问题,都是小编之前没有系统学过的机器学习任务。本期逻辑回归内容基于上期进行了扩展,主要包括逻辑回归中的交叉验证、odds ratio 和预测等。

前言


上期 基于 mlr 包的逻辑回归算法介绍与实践(上)关于逻辑回归的介绍内容中主要包括了特征工程、特征选择和缺失值的处理等问题,都是小编之前没有系统学过的机器学习任务。本期逻辑回归内容基于上期进行了扩展,主要包括逻辑回归中的交叉验证、odds ratio 和预测等。

2~RCWSPKTXAEPVC@I]]]RWD.png




1. 交叉验证逻辑回归模型


交叉验证时,应该交叉验证整个模型的构建过程,包括任何依赖于数据的预处理步骤,例如缺失值填充等。在之前介绍 KNN 算法的推文中,我们使用了一个 wrapper 函数,将 learner 和超参数调优过程封装在一起。本期,我们将为 learner 和缺失值填充创建一个 wrapper


1.1 包括缺失值填充的交叉验证过程

函数 makeImputeWrapper()learner 和缺失值填充方法封装在一起:

logRegWrapper <- makeImputeWrapper("classif.logreg",#指定learner
                                   cols = list(Age = imputeMean()))#使用wrapper封装


接下来,对 logRegWrapper 应用 10 次交叉验证,重复 50 次,过程和 KNN 算法的嵌套交叉验证类似。对于交叉验证的每一个 fold,训练集中 Age 变量的均值将被用来输入到任何的缺失值。

kFold <- makeResampleDesc(method = "RepCV", folds = 10, reps = 50,
                          stratify = TRUE) #设置 K-fold 交叉验证
logRegwithImpute <- resample(logRegWrapper, titanicTask,
                             resampling = kFold,
                             measures = list(acc, fpr, fnr))
logRegwithImpute
#Resample Result
#Task: imp$data
#Learner: classif.logreg.imputed
#Aggr perf: acc.test.mean=0.7966432,fpr.test.mean=0.2988353,fnr.test.mean=0.1439165
#Runtime: 6.67456


由于这是一个二分类问题,我们可以访问一些额外的性能指标,例如 false positive rate (fpr)false negative rate (fnr)。平均而言,模型将 79.7% 的乘客正确分类,但将 29.9%的死亡乘客错误地分类为幸存乘客(fpr),将 14.4% 的幸存乘客错误地分类为死亡乘客(fnr)。


1.2 性能指标

这里小编举一个简单的例子来帮助读者们更好地理解 fprfnr

假设你在一家银行的欺诈检测部门工作,是一名数据科学家。你的工作是建立一个模型,预测信用卡交易是合法的还是欺诈的。假设在 10 万次信用卡交易中,只有 1 次是欺诈。因为欺诈相对罕见,所以你决定建立一个模型,将所有交易简单地归类为合法交易。

模型精度为 99.999%,但该模型无法识别任何欺诈交易,并且有 100% 的 fnr

由此可知,我们应该在特定的问题中选择合适的评估模型性能的指标。

性能指标网站[1]中可以查看 mlr 包当前包含的所有性能指标以及其适用的情况。


2. 解释模型:odds ratio

在上期推文中曾经提到由于模型参数的可解释性,逻辑回归非常受欢迎。

为了提取模型参数,我们需要使用 getLearnerModel() 函数将 mlr 模型对象 logRegModel 转化为 R 模型对象。接下来,再将这个 R 模型对象作为参数传递给函数 coef(),它代表“系数” (或参数),返回模型参数。

logRegModelData <- getLearnerModel(logRegModel)#转换模型对象
coef(logRegModelData)#提取模型参数
#(Intercept)      Pclass2      Pclass3      Sexmale          Age 
# 3.809661697 -1.000344806 -2.132428850 -2.775928255 -0.038822458 
#        Fare      FamSize 
# 0.003218432 -0.243029114


当所有连续变量都为零且各因素处于参考水平时,截距代表的是泰坦尼克号灾难幸存几率(odd)的对数。实际上我们对斜率比对截距更感兴趣,但这些值是用对数几率单位(log odds unit)表示的,将很难解释。因此,人们通常把它们转换成 odds ratio


例如,如果你是女性,在泰坦尼克号上幸存的几率(odd)是 0.7,如果你是男性,幸存的几率(odd)是 0.2,那么如果女性幸存的 odds ratio 就是 3.5。换句话说,如果你是女性,你的幸存可能会是男性的 3.5 倍。

odds ratio 是解释预测因子对结果影响的一种非常流行的方式。


2.1 将模型参数转换成 odds ratio

要将 log odds 转换为 odds ratios,取指数即可,还可以使用 confint() 函数计算 95% 置信区间。

exp(cbind(Odds_Ratio = coef(logRegModelData), confint(logRegModelData)))
#Waiting for profiling to be done...
#             Odds_Ratio       2.5 %       97.5 %
#(Intercept) 45.13516691 19.14718874 109.72483921
#Pclass2      0.36775262  0.20650392   0.65220841
#Pclass3      0.11854901  0.06700311   0.20885220
#Sexmale      0.06229163  0.04182164   0.09116657
#Age          0.96192148  0.94700049   0.97652950
#Fare         1.00322362  0.99872001   1.00863263
#FamSize      0.78424868  0.68315465   0.89110044

大多数的 odds ratio 都小于 1,意味着事件不太可能发生。如果用 1 除以它们,就更容易理解了。例如,如果你是男性,幸存的  odds ratio  是 0.06,1 除以 0.06 = 16.7。这意味着,在所有其他变量不变的情况下,男性的幸存率是女性的 16.7 倍。


对于连续变量,我们将 odds ratio 解释为:变量每增加一个单位,乘客幸存的可能性就增加多少。例如,每增加一名家庭成员,一名乘客幸存的可能性就会降低 1 / 0.78 = 1.28 倍。


对于因子,我们将 odds ratio 解释为与该变量的参考水平相比乘客幸存的可能性有多大。例如,我们有 Pclass2 和 Pclass3 的 odds ratio,分别是 2 级和 3 级乘客与 1 级乘客相比存活的倍数。


95% 置信区间表示每个变量具有预测价值的强度。odds ratio 为 1 意味着几率相等,并且变量对预测没有影响。因此,如果 95% 置信区间包含值 1,例如 Fare 变量的置信区间,则这可能表明此变量对预测没有影响。


2.2 增加一个单位是没有意义的

一个单位的增加通常是不容易解释的。 假设你得到一个odds ratio,即在蚁丘中每增加一只蚂蚁,这个蚁丘在白蚁攻击中存活的可能性就增加 1.000005 倍。如何解释这么小的 odds ratio 呢?

当一个单位的增加没有意义时,一种流行的技术是在训练模型之前对连续变量进行对数转换。这不会影响模型的预测,但可以将 odds ratio 解释为:每次蚂蚁的数量增加一倍,蚁丘存活的可能性就增加 x 倍。这将提供更大、更可解释的 odds ratio


3.预测

我们已经构建、交叉验证和解释了我们的模型,现在可以很好地使用该模型对新数据进行预测。这个模型的场景有点不同寻常,因为我们是根据一个历史事件建立了一个模型,所以不会用它来预测另一场泰坦尼克号灾难的幸存者。故要说明如何使用逻辑回归模型进行预测,可载入一些未标记的乘客数据并清理后进行预测。

data(titanic_test, package = "titanic")#加载数据测试集
titanicNew <- as_tibble(titanic_test)
titanicNewClean <- titanicNew %>%
  mutate_at(.vars = c("Sex", "Pclass"), .funs = factor) %>%
  mutate(FamSize = SibSp + Parch) %>%
  select(Pclass, Sex, Age, Fare, FamSize)#清理数据
predict(logRegModel, newdata = titanicNewClean)#预测
#Prediction: 418 observations
#predict.type: response
#threshold: 
#time: 0.01
#  response
#1        0
#2        0
#3        0
#4        0
#5        1
#6        0
#... (#rows: 418, #cols: 1)
目录
相关文章
|
24天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
126 30
|
28天前
|
存储 算法
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
227 15
|
1月前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
6天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
124 80
|
2天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。

热门文章

最新文章