基于 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)
目录
相关文章
|
15天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
数据结构与算法系列学习之串的定义和基本操作、串的储存结构、基本操作的实现、朴素模式匹配算法、KMP算法等代码举例及图解说明;【含常见的报错问题及其对应的解决方法】你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
2024重生之回溯数据结构与算法系列学习之串(12)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丟脸好嘛?】
|
15天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习(8)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
15天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
16天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
15天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
16天前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
|
15天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之王道第2.3章节之线性表精题汇总二(5)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
IKU达人之数据结构与算法系列学习×单双链表精题详解、数据结构、C++、排序算法、java 、动态规划 你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
22天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
7天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。
|
8天前
|
算法 调度
基于遗传模拟退火混合优化算法的车间作业最优调度matlab仿真,输出甘特图
车间作业调度问题(JSSP)通过遗传算法(GA)和模拟退火算法(SA)优化多个作业在并行工作中心上的加工顺序和时间,以最小化总完成时间和机器闲置时间。MATLAB2022a版本运行测试,展示了有效性和可行性。核心程序采用作业列表表示法,结合遗传操作和模拟退火过程,提高算法性能。