机器学习逻辑回归模型训练与超参数调优 ##3

文章目录

  • @[TOC]
  • 基于Kaggle电信用户流失案例数据(可在官网进行下载)
    • 逻辑回归模型训练
    • 逻辑回归的超参数调优

基于Kaggle电信用户流失案例数据(可在官网进行下载)

数据预处理部分可见:
机器学习数据预处理方法(数据重编码)

逻辑回归模型训练

from sklearn.metrics import accuracy_score, recall_score, precision_score, f1_score, roc_auc_score
from sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline# 其中train就是训练数据集,同时包含训练集的特征和标签
train, test = train_test_split(tcc, test_size=0.3, random_state=21)# 划分特征和标签
X_train = train.drop(columns=[ID_col, target]).copy()
y_train = train['Churn'].copy()
X_test = test.drop(columns=[ID_col, target]).copy()
y_test = test['Churn'].copy()# 检验列是否划分完全
assert len(category_cols) + len(numeric_cols) == X_train.shape[1]# 设置转化器流
logistic_pre = ColumnTransformer([('cat', preprocessing.OneHotEncoder(drop='if_binary'), category_cols), ('num', 'passthrough', numeric_cols)
])# 实例化逻辑回归评估器
logistic_model = LogisticRegression(max_iter=int(1e8))# 设置机器学习流
logistic_pipe = make_pipeline(logistic_pre, logistic_model)logistic_pipe.fit(X_train, y_train)

运行得到模型整体结构
在这里插入图片描述

  • 查看模型结果(最初结果)
# 定义模型评估指标函数
def result_df(model, X_train, y_train, X_test, y_test, metrics=[accuracy_score, recall_score, precision_score, f1_score, roc_auc_score]):res_train = []res_test = []col_name = []for fun in metrics:res_train.append(fun(model.predict(X_train), y_train))res_test.append(fun(model.predict(X_test), y_test))col_name.append(fun.__name__)idx_name = ['train_eval', 'test_eval', ]res = pd.DataFrame([res_train, res_test],columns=col_name,index=idx_name)return resresult_df(logistic_pipe,X_train,y_train,X_test,y_test)

在这里插入图片描述

逻辑回归的超参数调优

逻辑回归评估器损失函数方程如下:
在这里插入图片描述
而逻辑回归评估器的所有参数解释如下:

参数解释
penalty正则化项
dual是否求解对偶问题*
tol迭代停止条件:两轮迭代损失值差值小于tol时,停止迭代
C经验风险和结构风险在损失函数中的权重
fit_intercept线性方程中是否包含截距项
intercept_scaling相当于此前讨论的特征最后一列全为1的列,当使用liblinear求解参数时用于捕获截距
class_weight各类样本权重*
random_state随机数种子
solver损失函数求解方法*
max_iter求解参数时最大迭代次数,迭代过程满足max_iter或tol其一即停止迭代
multi_class多分类问题时求解方法*
verbose是否输出任务进程
warm_start是否使用上次训练结果作为本次运行初始参数
l1_ratio当采用弹性网正则化时, l 1 l1 l1正则项权重,就是损失函数中的 ρ \rho ρ

  而在这些所有超参数中,对模型结果影响较大的参数主要有两类,其一是正则化项的选择,同时也包括经验风险项的系数与损失求解方法选择,第二类则是迭代限制条件,主要是max_iter和tol两个参数,当然,在数据量较小、算力允许的情况下,我们也可以直接设置较大max_iter、同时设置较小tol数值。由于我们并未考虑带入数据本身的膨胀系数(共线性),因此此处我们优先考虑围绕经验风险系数与正则化选择类参数进行搜索与优化。
  而整个网格搜索过程其实就是一个将所有参数可能的取值一一组合,然后计算每一种组合下模型在给定评估指标下的交叉验证的结果(验证集上的平均值),作为该参数组合的得分,然后通过横向比较(比较不同参数组合的得分),来选定最优参数组合。要使用网格搜索,首先我们需要设置参数空间,也就是带入哪些参数的哪些取值进行搜索。需要注意的是,由于我们现在是直接选用机器学习流进行训练,此时逻辑回归的超参数的名称会发生变化,我们可以通过机器学习流的.get_param来获取集成在机器学习流中的逻辑回归参数名称:
然后,我们选取正则化项、经验风险权重项C、弹性网正则化中l1正则化的比例项l1_ratio、以及求解器solver作为搜索超参数,来构建超参数空间:

from sklearn.model_selection import GridSearchCVlogistic_param = [{'logisticregression__penalty': ['l1'], 'logisticregression__C': np.arange(0.1, 2.1, 0.1).tolist(), 'logisticregression__solver': ['saga']}, {'logisticregression__penalty': ['l2'], 'logisticregression__C': np.arange(0.1, 2.1, 0.1).tolist(), 'logisticregression__solver': ['lbfgs', 'newton-cg', 'sag', 'saga']}, {'logisticregression__penalty': ['elasticnet'], 'logisticregression__C': np.arange(0.1, 2.1, 0.1).tolist(), 'logisticregression__l1_ratio': np.arange(0.1, 1.1, 0.1).tolist(), 'logisticregression__solver': ['saga']}
]

接下来执行网格搜索,在网格搜索评估器的使用过程中,只需要输入搜索的评估器(也就是机器学习流)和评估器的参数空间即可,当然若想提高运行速度,可以在n_jobs中输入调用进程数,一般保守情况数值可以设置为当前电脑核数。此外,由于我们目前是以准确率作为评估指标,因此在实例化评估器时无需设置评估指标参数。

# 实例化网格搜索评估器
logistic_search = GridSearchCV(estimator = logistic_pipe,param_grid = logistic_param,n_jobs = 4)import time
# 在训练集上进行训练
s = time.time()
logistic_search.fit(X_train, y_train)
print(time.time()-s, "s")

运行时间:
在这里插入图片描述

# 调用最佳参数的机器学习流评估器
logistic_search.best_estimator_

在这里插入图片描述

# 计算预测结果
result_df(logistic_search.best_estimator_, X_train, y_train, X_test, y_test)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456964.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux系统化学习】自定义简易shell

目录 环境变量在进程替换中的继承 在当前进程中添加环境变量 putenv函数 环境变量被继承的原因 使用ecexle传递环境变量 传递自己的环境变量表 自定义简易的shell 获取主机、使用者、工作目录 获取命令 切割分解命令 创建子进程执行命令 内建命令的特殊处理 完整代…

AI改编游戏大电影《使命召唤:幽灵重生》(下)

AI改编游戏大电影《使命召唤:幽灵重生》(下) 幽灵重生携生化武器毁灭人类,普莱斯上尉点上雪茄拿起武器,英雄再次迎来使命的召唤! 《使命召唤:幽灵重生》(下)&#xff1a…

6.s081 学习实验记录(五)traps

文章目录 一、RISC-V assembly简介问题 二、Backtrace简介注意实验代码实验结果 三、Alarm简介注意实验代码实验结果 一、RISC-V assembly 简介 git checkout traps,切换到traps分支user/call.c 文件在我们输入 make fs.img 之后会被汇编为 call.asm 文件&#xf…

【VTKExamples::PolyData】第二十一期 ImplicitPolyDataDistance

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例ImplicitPolyDataDistance,并解析接口vtkImplicitPolyDataDistance,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)…

docker自定义镜像并使用

写在前面 本文看下如何自定义镜像。 ik包从这里 下载。 1:自定义带有ik的es镜像 先看下目录结构: /opt/program/mychinese [rootlocalhost mychinese]# ll total 16 -rw-r--r-- 1 root root 1153 Feb 5 04:18 docker-compose.yaml -rw-rw-r-- 1 el…

Docker进阶篇-compose容器编排

一、描述 Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Compose是Docker公司推出的一个工具软件,可以管理多个Docker容器组成一个应用。需要定义 一个YAML格式的配置文件docker-compose.yml,配置好多个容器…

【iOS ARKit】人形遮挡

人形遮挡简介 在 AR系统中,计算机通过对设备摄像头采集的图像进行视觉处理和组织,建立起实景空间,然后将生成的虚拟对象依据几何一致性原理嵌入到实景空间中,形成虚实融合的增强现实环境,再输出到显示系统中呈现给使用…

微信支付服务商,商户快速进件,减少工作量

大家好,我是小悟 服务商拓展特约商户,人工录入大量商户资料,耗时耗力。商户对标准费率不满意,无法说服商户先签约再帮其调整费率。 为了减少服务商工作量,服务商快速进件工具来了,分为移动端和管理端。用好…

Matplotlib热力图的创意绘制指南【第54篇—python:Matplotlib热力图】

文章目录 Matplotlib热力图的创意绘制指南1. 简介2. 基本热力图3. 自定义颜色映射4. 添加注释5. 不同形状的热力图6. 分块热力图7. 多子图热力图8. 3D热力图9. 高级颜色映射与颜色栏设置10. 热力图的动态展示11. 热力图的交互性12. 标准化数据范围13. 导出热力图 总结&#xff…

确定问卷调查样本量

目录 1. 问卷数据类型1.1 定性数据&定性分析1.2 定量数据&定量分析 2. 确定初始样本容量:2.1 公式:2.2 Z值2.3 p2.4 e2.5 举例 3.调整初始样本容量:3.1 公式:3.2 结论就是 小结: 1. 问卷数据类型…

收藏:相当大赞的来自 Agilean产品团队的2篇关于重塑敏捷组织的绩效管理的文章

Agilean产品团队,是吴穹博士领导下最近在国内敏捷界很厉害的产品,今天看到两篇相当不错的说敏捷组织的上下篇文章,分享下,地址是:6个原则15项举措,重塑敏捷组织的绩效管理(上) 6个原…

【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现

盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现 前提回顾消息服务逻辑架构运作流程消息路由系统数据存储系统BitCask结构异地存储容灾 推送系统数据消费模式推、拉模式的切换 实现低延时推送快速确认消息三层存储结构HeapMemoryDirectMemory 总结和展望 前提回顾…