首页 > 其他分享 >逻辑回归C参数选择,利用交叉验证实现

逻辑回归C参数选择,利用交叉验证实现

时间:2024-08-19 22:54:27浏览次数:8  
标签:逻辑 交叉 模型 验证 score 参数 scores

目录

前言

一、C参数

二、交叉验证

1.交叉验证是什么

2.交叉验证的基本原理

3.交叉验证的作用

4.常见的交叉验证方法

三、k折交叉验证

四、C参数和k折交叉验证的关系

五、代码实现

1.导入库

2.k折交叉验证选择C参数

3.建立最优模型

总结


前言

        逻辑回归(Logistic Regression)是一种用于二分类问题的统计模型和机器学习算法,旨在预测事件的概率。它基于一个线性模型,并通过一个逻辑函数(通常是Sigmoid函数)将线性组合的结果转换为概率值。

 

一、C参数

  •  在逻辑回归中,特别是在使用正则化时
    • C参数是控制正则化强度的超参数(超参数是指在训练模型之前需要手动设置的参数)
    • 在正则化过程中起到调整模型复杂度的作用
      • 较小的 C 值增加正则化强度,较大的 C 值减少正则化强度。

 

二、交叉验证

1.交叉验证是什么

  1. 交叉验证是一种用于评估机器学习模型性能的技术。
  2. 它通过将数据集划分为多个子集,训练和测试模型,以获得更稳健和可靠的性能估计。交叉验证的主要作用是帮助我们判断模型在未知数据上的表现,并有效防止过拟合。

 

2.交叉验证的基本原理

  1. 数据划分:交叉验证的核心思想是将原始数据集划分为多个部分(通常称为“折”或“fold”)。最常见的方式是k折交叉验证

  2. 训练与验证:在每一轮中,使用训练集来训练模型,然后用测试集来评估模型的性能。这可以得到不同的数据划分下模型的性能指标(如准确率accuracy、精确率 precision、召回率 recall、F1-score等)。

  3. 性能评估:通过对所有k次测试结果进行求平均值,可以更准确地反映模型在真实数据上的表现。

 

3.交叉验证的作用

  1. 更可靠的性能评估:通过多次训练和验证,可以减少由于数据划分带来的偏差,从而提供更稳定的性能估计。

  2. 避免过拟合:交叉验证能够检测到模型是否对训练数据过拟合,因为它利用了不同的子集进行训练和验证。

  3. 超参数调优:在模型选择和超参数调优过程中,交叉验证可以帮助选择最佳的超参数组合,使得模型在未见数据上表现更好。

  4. 充分利用数据:特别是在数据量较少的情况下,交叉验证可以确保每个样本都能参与训练和测试,提高数据的利用效率。

 

4.常见的交叉验证方法

  • k折交叉验证:将数据集划分为k个折,逐一进行训练和验证。

  • 留一交叉验证:特殊的k折交叉验证,其中k等于数据集的大小,即每次只留一个样本作为测试集,其他作为训练集。

  • 分层k折交叉验证:在k折交叉验证的基础上,保持各类别样本比例的一致性,适用于类别不平衡的数据集。

 

 

三、k折交叉验证

  1. K折交叉验证是一种评估模型性能的技术

  2. 训练集划分成K个部分(或折),k的值可以自己选择

  3. 每次用其中一个部分作为测试集,其余K-1个部分作为训练集

  4. 这个过程重复K次,每次选择不同的部分作为测试集

  5. 每个部分都会参与训练,也会用来测试

  6. 最终,模型的性能指标是K次测试结果的平均值

  7. 测试结果可以是准确率 accuracy、精确率 precision、召回率 recall、F1-score等

  8. 这种方法帮助减少模型对特定数据分割的依赖,提高评估的可靠性,有效防止过拟合

 

 

四、C参数和k折交叉验证的关系

  • C参数的选择一般通过交叉验证的结果来进行选择和调整

 

 

五、代码实现

# 交叉验证选择较优惩罚因子 λ
from sklearn.model_selection import cross_val_score  # 交叉验证的函数
from sklearn.linear_model import LogisticRegression

scores = []
c_param_range = [0.01, 0.1, 1, 10, 100]  # 待选C参数
for i in c_param_range:
    lr = LogisticRegression(C=i, penalty='l2', solver='lbfgs', max_iter=1000)  # 创建逻辑回归模型  lbfgs 拟牛顿法
    score = cross_val_score(lr, x_train, y_train, cv=8, scoring='recall')  # k折交叉验证 比较召回率
    score_mean = sum(score) / len(score)
    scores.append(score_mean)
    # print(score_mean)

# 寻找到scores中最大值的对应的C参数
best_c = c_param_range[np.argmax(scores)]

# 建立最优模型
lr = LogisticRegression(C=best_c, penalty='l2', max_iter=1000)

1.导入库

from sklearn.model_selection import cross_val_score  # 交叉验证的函数
from sklearn.linear_model import LogisticRegression  # 逻辑回归类

 

2.k折交叉验证选择C参数

  1. 利用随机种子和随机函数取出训练集和训练集的结果数据
  2. 建立一个空列表用来储存k折交叉验证的结果
  3. c_param_range里是待选的C参数
  4. 利用for循环,使用每个C参数建立逻辑回归模型
  5. 在每个C参数建立的模型下使用k折交叉验证,获取召回率的平均值
  6. 根据scores里最大值的索引来定位最佳的C参数

代码:

# 利用随机种子取数据
from sklearn.model_selection import train_test_split
x = data.drop('Class', axis=1)
y = data.Class
x_train, x_test, y_train, y_test = \
    train_test_split(x, y, test_size=0.3, random_state=0)  # 随机取数据

# k折交叉验证选择C参数
scores = []
c_param_range = [0.01, 0.1, 1, 10, 100]  # 待选C参数
for i in c_param_range:
    lr = LogisticRegression(C=i, penalty='l2', solver='lbfgs', max_iter=1000)  # 创建逻辑回归模型  lbfgs 拟牛顿法
    score = cross_val_score(lr, x_train, y_train, cv=8, scoring='recall')  # k折交叉验证 比较召回率
    score_mean = sum(score) / len(score)
    scores.append(score_mean)
    # print(score_mean)

# 寻找到scores中最大值的对应的C参数
best_c = c_param_range[np.argmax(scores)]

输出:

0.5825845665961945
0.608615221987315
0.6173361522198731
0.6173361522198731
0.6173361522198731
最优惩罚因子为:1

 

3.建立最优模型

  • 利用k折交叉验证的得到的最佳C参数值建立最优模型
# 建立最优模型
lr = LogisticRegression(C=best_c, penalty='l2', max_iter=1000)

 

 

总结

        C参数与K折交叉验证密切相关,K折交叉验证为C参数的选择提供了一个系统而可靠的框架,使得模型在面对不同数据时能够保持良好的性能。这种方法不仅提高了模型的泛化能力,还能有效避免过拟合问题。        

标签:逻辑,交叉,模型,验证,score,参数,scores
From: https://blog.csdn.net/weixin_65047977/article/details/141335944

相关文章

  • 网易增强滑块验证码识别
     先来看看实际的滑动效果这款验证码和传统的相比,确实难度增加了不少。不仅要识别滑块位置,还要识别滑块的旋转角度。难度确实是上了一个台阶,而且只增加了机器的识别难度,真人去滑动还是很容易拼接成功的。网站在获取验证码的时候,会给我们一个attrs参数,我们就可以通过这个参数......
  • 网易增强滑块验证码识别
    先来看看实际的滑动效果这款验证码和传统的相比,确实难度增加了不少。不仅要识别滑块位置,还要识别滑块的旋转角度。难度确实是上了一个台阶,而且只增加了机器的识别难度,真人去滑动还是很容易拼接成功的。网站在获取验证码的时候,会给我们一个attrs参数,我们就可以通过这个参数计......
  • "DSE 驱动签名强制"(Driver Signature Enforcement)是一项 Windows 操作系统的安全功能,
    "DSE驱动签名强制"(DriverSignatureEnforcement)最早起源于WindowsXP和WindowsServer2003的安全增强功能。随着时间推移,它在后续的Windows版本中得到进一步加强和改进,旨在提升系统的安全性和稳定性,通过确保驱动程序必须经过签名认证,防止潜在恶意软件和不兼容的驱动程序......
  • 深入理解Kerberos:现代网络身份验证的基石
    在当今的分布式计算环境中,网络安全已成为企业和组织最为关注的问题之一。为了确保用户在网络上的身份真实性并保护敏感数据,采用安全且有效的身份验证机制至关重要。而Kerberos,作为一种经典且广泛应用的网络身份验证协议,正是解决这一问题的核心工具之一。一、什么是Kerberos......
  • 前端实现验证码功能
    文章目录需求分析1.输入验证2.滑动验证3.拼图验证需求前端实现验证码功能分析1.输入验证dentify.vue<template><divclass="s-canvas"><canvasid="s-canvas":width="contentWidth":height="contentHeight"......
  • 红外遥控设计验证
    前言        红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机和手机系统中。本文首先介绍了红外遥控模块的基本原理,其次详解阐述了红外遥控模块工作原理,......
  • 240815-PostgreSQL自带逻辑复制简单使用
    PostgreSQL自带逻辑复制简单使用一、逻辑复制说明角色IP端口数据库名用户名版本发布端192.168.198.1658432pubdbrepuserPostgreSQL13.13订阅端192.168.198.1628432subdbrepuserPostgreSQL13.13二、搭建逻辑复制环境2.1发布端配置发布端post......
  • IC验证面试经验分享——UVM篇
    验证最需要会的技能树是什么?!那肯定是非UVM莫属了,趁着校招之际,准备IC面试的ICer赶快码住!IC验证面试经验分享UVM篇一、UVM验证平台组件二、UVM_component和uvm_object三、sequence启动方式四、seqence是怎么给到dut的?五、p_sequencer和m_sequencer的区别1)含义2)区别六、......
  • IC验证面试经验分享——Verilog篇
    面试官(高冷脸):说说离职原因?(内心os:看看你小子是不是也被裁了还是初生牛犊不知道当今环境的恶劣在这玩裸辞)我(已读乱回):如果可以,我想和它回到那天相遇,让时间停止那场面试,红线划过拒绝offer的按钮,我用尽全力。–改自歌曲《如果可以》(内心os:挥手错的才能和对的相拥)IC验证......
  • 基于YOLOv8的通用的滑动验证码滑块缺口检测模型
    文章目录前言滑块缺口验证码验证码示例训练步骤总结前言首先放张图片表达此时的心情,同志们节日快乐!!!滑块缺口验证码滑动验证码滑块缺口的位置识别是破解滑块验证码的关键,这里我们尝试使用YOLOV8训练目标检测模型,识别出滑块图片的缺口验证码示例模型通过大批量......