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

news2024/10/1 19:24:39

目录

前言

一、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参数的选择提供了一个系统而可靠的框架,使得模型在面对不同数据时能够保持良好的性能。这种方法不仅提高了模型的泛化能力,还能有效避免过拟合问题。        

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TCP vs UDP:揭秘可靠性与效率之争

概述 今天我们开始主要讲解TCP的相关知识点。在之前讲解分层章节的时候,我们提到过一个重要观点。在网络层及以下几层,更多的是让主机与主机建立连接,也就是说你的电脑需要知道另一台电脑在哪里才能连接上它。然而,在网络中的通信…

世界各国-经济距离数据汇总(2005-2022年)

世界各国-经济距离数据汇总(2005-2022年) 经济距离是衡量国家之间经济制度差异的一个重要概念,它不仅包括地理距离,还涵盖了费用、时间、劳动力等因素,并且受到消费者行为的影响。随着全球化的深入发展,国家…

微信H5下载文件、微信浏览器无法下载文件解决方案

手机端的微信访问网页的时候,是禁止直接下载文件的 但是IOS端可以预览.txt/.doc/.docx/.xls/xlsx/.pdf等格式的文件,Android端在下载这些格式的文件时,可以唤起 ‘即将离开微信,在浏览器打开’ 提示 所以,根据手机微…

【计算机组成原理】三、存储系统:3.磁盘存储器(磁盘阵列RAID)

7.磁盘存储器(机械) 考点:磁盘存取时间的计算 与操作系统有重合,操作系侧重算法管理,计组侧重硬件 计算机的外存储器又称为辅助存储器,目前主要使用磁表面存储器。 所谓“磁表面存储”,是指把某…

等保测评基础:了解等级保护的基本概念

在数字化时代,信息安全已成为企业乃至国家层面不可忽视的议题。等级保护制度,作为我国信息安全保障体系的重要组成部分,旨在通过标准化、等级化的安全管理措施,确保信息系统安全可控。本文旨在为初学者提供等保测评的基础知识&…

Aixos食用指南,超全面详细讲解!

前言:axios是目前最流行的ajax封装库之一,用于很方便地实现ajax请求的发送。特意花费了两个小时为大家准备了一份全面详细的Aixos食用指南,需要的小伙伴点个关注 哦~💕 🌈🌈文章目录 Axios 简介 Axios 特…

Java重修笔记 第三十七天 日期类

第一代日期类:Date 1. 通过 new 一个 Date 对象来获取当前时间 2. 通过 SimpleDateFormat 对象来格式化时间的输出 public class Date01 {public static void main(String[] args) {// 获取系统当前时间Date date01 new Date();System.out.println("当前日…

周边乡村游小程序的设计

管理员账户功能包括:系统首页,个人中心,游客,景点信息管理,景点美食管理,美食类型管理,景点攻略管理,特产信息管理,特产类型管理,系统管理 微信端账号功能包…

猫头虎分享:如何选择GPT-4、GPT-4 Turbo、GPT-4o 和 GPT-4o mini?

猫头虎分享:如何选择GPT-4、GPT-4 Turbo、GPT-4o 和 GPT-4o mini? 大家好,我是猫头虎 👋,今天我们要讨论的是在各种场景下如何选择合适的智能助手模型。随着人工智能技术的发展,OpenAI推出了多种型号的GPT…

【C++ Primer Plus习题】2.3

问题: 解答: #include <iostream> using namespace std;void print01() {cout << "三只眼瞎的老鼠" << endl; }void print02() {cout << "看他们怎么跑" << endl; }int main() {print01();print01();print02();print02();r…

EmguCV学习笔记 VB.Net 6.3 轮廓外接多边形

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

聚类分析|距离与相似系数|层次聚类|K均值聚类|SPSS及Matlab

聚类分析问题描述 聚类分析问题描述 人类认识世界的方法之一就是将事物按照各种属性或特征分成若干类别。 物以类聚、人以群分。分类方法多种多样&#xff0c;简单直接的如高、矮、胖瘦。使用的信息量小&#xff0c;但对类别界限附近的案例&#xff0c;分类结果不一定合适。 …

Linux 命令管道介绍

今天给伙伴们分享一下Linux 命令管道&#xff0c;希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者&#xff0c;对云原生运维感兴趣&#xff0c;也保持时刻学习&#xff0c;后续会分享工作中用到的运维技术&#xff0c;在运维的路上得到支持和共同进步&am…

软考:软件设计师 — 15.数据结构及算法应用

十五. 数据结构及算法应用 数据结构及算法应用类题目是下午场考试中的第四道题目&#xff0c;分值 15 分&#xff0c;主要以 C 语言填空、算法策略判断和时间复杂度判断为考察形式&#xff0c;建议拿到 6 分以上。 1. 解题技巧 算法策略与时间复杂度部分详细内容可以参考文章…

测试干货 | 如何选择合适的半导体检测方法?看完这篇就明白了!

撰文排版&#xff1a;刘佳 审核指导&#xff1a;肖俊灵 本文较长&#xff0c;建议先收藏后随时查看&#xff01;以后我们将更新更多此类硬核科普&#xff0c;欢迎关注&#xff01; 半导体材料作为半导体产业链中的重要支撑&#xff0c;包括以硅、锗等为代表的元素半导体材料和以…

图与树的基本概念

目录 引言 图与树结构的重要性 图的基本概念 图的表示方式 图的遍历算法 树的基本概念 树的定义与性质 树的遍历 二叉树与多叉树的概念 图与树的高级应用 最短路径算法 最小生成树算法 总结与应用 综合实例分析 引言 在计算机科学的世界中&#xff0c;图和树是两…

商圈停车泊位实时查询与推荐系统 项目编号:17259(案例分享)

摘 要 在当今城市化进程加快的背景下&#xff0c;城市停车问题日益突出&#xff0c;给市民出行带来诸多不便。为解决停车难题&#xff0c;提高停车效率&#xff0c;基于Java开发语言和Spring Boot框架&#xff0c;结合MySQL数据库技术&#xff0c;开发了商圈停车泊位实时查询…

计算机Java项目|基于SpringBoot的网络海鲜市场系统的设计与实现

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参…

牛客小白月赛96

牛客小白月赛96 A 最少胜利题数 链接&#xff1a;https://ac.nowcoder.com/acm/contest/84528/A 来源&#xff1a;牛客网 题目描述 本场小白月赛共 6 题&#xff0c;&#x1d435;&#x1d456;&#x1d45b;&#x1d454;&#x1d44f;&#x1d45c;&#x1d45b;&#x1d4…

【hot100篇-python刷题记录】【找到字符串中所有字母异位词】

R6-滑动窗口篇 印象题 核心&#xff1a; 使用collections方法的Counter计数&#xff0c;统计了某个子串中每个字母出现的次数。 判断子串相等&#xff1a;counter1counter2 &#xff08;注意&#xff1a;此时&#xff0c;counter1或者counter2都不能含有多余的项&#xff0…