如何在【逻辑回归】中优化控制正则化程度的超参数C

一.逻辑回归基本介绍

逻辑回归也称作logistic回归,是一种广义的线性回归分析模型,主要是用来解决二分类问题(也可以解决多分类问题)。通过训练集来训练模型,并在训练结束后对测试集进行分类。
         通过激活函数,也就是sigmoid函数可以将线性回归模型的值缩放到(0,1)之间,公式和图像如下所示:

通过这种方式我们就可以将结果靠近1的判定为一类,靠近0的判定为另外一类了。

二.正则化基本介绍

正则化的意义:避免过拟合。模型如果很复杂,变量稍微变动就会引起模型的剧烈变动,这会导致模型在训练集上表现非常好,但是在测试集上会出现过拟合,不具备泛化能力,这不是我们想要的。因此我们选用正则化来避免过拟合,这是因为正则项是非负的,要使得损失最小必须让正则项趋近于0,它降低了特征参数的权重,使得模型更简单。

1、L1正则化
公式如下:

标题

L1正则化可以让一部分权重变为零(降维),因此产生稀疏模型,能够去除某些特征(权重为0则等效于去除)

2、L2正则化
公式如下:

L2正则化使各个维度权重普遍变小,减少了权重的固定比例,使权重平滑。

三.超参数C的介绍

C:浮点型(为正的浮点数),默认为1.0;表示正则化强度的倒数。数值越小表示正则化越强。

接下来我们通过绘制图像来可视化超参数C的大小对模型准确率的影响,从而选出最优的C:

四.python实战

先导入必要的模块:

from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import numpy as np

导入乳腺癌数据集,查看特征矩阵和标签值,并将其划分为训练集和测试集:

data = load_breast_cancer()
x = data.data
y = data.target
x.shape # (569, 30)
y.shape # (569,)
np.unique(y) # array([0, 1]) 二分类问题
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=420)

为了同时对比L1正则化和L2正则化的效果,因此创建四个空列表:

l1 = [] # 创建l1正则化的训练集准确率的空列表
l2 = [] # 创建l2正则化的训练集准确率的空列表
l1test = [] # 创建l1正则化的测试集准确率的空列表
l2test = [] # 创建l2正则化的测试集准确率的空列表
x_ = np.linspace(0.05, 1, 19) # 从0.05到1之间取19个数
for i in x_:lrl1 = LR(penalty="l1", solver="liblinear", C=i, max_iter=1000).fit(x_train, y_train)lrl2 = LR(penalty="l2", solver="liblinear", C=i, max_iter=1000).fit(x_train, y_train)l1.append(accuracy_score(lrl1.predict(x_train), y_train)) # l1正则化的训练集准确率l1test.append(accuracy_score(lrl1.predict(x_test), y_test)) # l1正则化的测试集准确率l2.append(accuracy_score(lrl2.predict(x_train), y_train)) # l2正则化的训练集准确率l2test.append(accuracy_score(lrl2.predict(x_test), y_test)) # l2正则化的测试集准确率
graph = [l1, l2, l1test, l2test]
color = ["green", "black", "lightgreen", "gray"]
label = ["L1", "L2", "L1test", "L2test"]
plt.figure(figsize=(6, 6))
for i in range(len(graph)):plt.plot(x_, graph[i], color[i], label=label[i])
plt.legend(loc=4) # 图例位置.4表示右下角 
plt.show()

结果如下所示:

由图可知,用训练集的测试结果显著优于用测试集的测试结果,这说明模型在训练集上表现很好,在测试集上表现欠佳,这说明有轻微的过拟合。还可以发现,当C逐渐增大时,对模型的惩罚越来越小,训练集上的表现越来越高;但是测试集的表现,L1正则化在C在0.5左右时,就不再提升,但是L2正则化在0.5之后还有提升,且在0.62左右达到最高,在0.9左右开始下降。虽然训练集表现在一路走高,但是测试集上模型已经表现出了过拟合的倾向。因此我们会倾向选择0.62作为我们最优的C。

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

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

相关文章

杂货铺 | 报错记录(持续更新)

文章目录 ⚠️python SyntaxError: Non-UTF-8 code starting with ‘\xb3‘ in file⚠️partially initialized module ‘‘ has no attribute ‘‘(most likely due to a circular import)⚠️AttributeError: ‘DataFrame‘ object has no attribute ‘append‘ ⚠️python S…

Flink CDC 2.0 主要是借鉴 DBLog 算法

DBLog 算法原理 DBLog 这个算法的原理分成两个部分,第一部分是分 chunk,第二部分是读 chunk。分 chunk 就是把一张表分为多个 chunk(桶/片)。我可以把这些 chunk 分发给不同的并发的 task 去做。例如:有 reader1 和 re…

springboot是如何工作的

一、前言 现在java后端开发框架比较多的使用springboot框架,springboot是在以前的springMVC进行封装和优化,最大的特点是简化了配置和内置Tomcat。本节通过阅读源码理解springboot是如何工作的。 二、springboot是如何工作的 1、从启动类开始 /***服务…

JAVA毕业设计107—基于Java+Springboot+Vue的民宿酒店预订管理系统(源码+数据库)

基于JavaSpringbootVue的民宿酒店预订管理系统(源码数据库)107 一、系统介绍 本系统前后端分离 本系统分为用户、前台、管理员三种角色(角色菜单可以自行分配) 前台: 登录、注册、民宿浏览、民宿评价、民宿酒店下单预订、密码修改、个人信息修改。 管理后台&…

机泵设备如何通过设备健康管理平台实施预测性维护

机泵设备在工业生产中起着至关重要的作用,但长时间运行和频繁使用容易引发各种故障。为了提高机泵设备的可靠性和效率,预测性维护成为一种重要的管理策略。设备健康管理平台作为一种先进的工具,为机泵设备的预测性维护提供了有力支持。本文将…

NlogPrismWPF

文章目录 Nlog&Prism&WPF日志模块实现原理添加配置注入服务应用测试其他模块怎么调用? Nlog&Prism&WPF 日志模块 介绍了为WPF框架Prism注册Nlog日志服务的方法 实现原理 无论是在WPF或者ASP.NET Core当中, 都可以使用ServiceCollection来做到着…

【HarmonyOS】鸿蒙操作系统架构

HarmonyOS架构 一. 鸿蒙系统定位二. 架构整体遵从分层设计三. HarmonyOS具有的技术特性四. HarmonyOS有三大特征 其它相关推荐: 软考系统架构之案例篇(架构设计相关概念) 系统架构之微服务架构 系统架构设计之微内核架构 所属专栏:系统架构设计师 一. 鸿…

在excel中如何打出上标、下标

例如,想把A2的2变为下标。 在单元中输入内容: 选中2: 右键单击,然后点击“设置单元格格式”: 在特殊效果的下面勾选“下标”,然后点击下面的“确定”按钮: 就将2变为下标了:…

竞赛选题 深度学习图像风格迁移 - opencv python

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题…

Go Map底层实现简述

Go的map是一种高效的数据结构,用于存储键值对。其底层实现是一个哈希表(hash table),下面是有关map底层实现的详细介绍: 哈希表: map的底层实现是一个哈希表,也称为散列表。哈希表是一个数组&a…

13.7性能测试工具(LoadRunner)(简单扫盲)

下载LoadRunner和360极速浏览器 一.为什么选择LoadRunner而不是Jmeter 1.Jmeter没有录制功能. 2.LoadRunner可以设计非常丰富的测试场景. 3.LoadRunner能够产出非常丰富的测试报告. 二.LoadRunner三大组件 1.VUG: 功能: 录制脚本(编写脚本). 2.Controller: 功能: 设计场…

2021年06月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 执行下列代码后,运行结果是? seq=[hello,good,morning] s=*.join(seq

【设计模式】第8节:结构型模式之“适配器模式”

一、简介 适配器模式是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。 适配器模式角色: 请求者client:调用服务的角色目标Target:定义了Client要使用的功…

企业金蝶KIS软件服务器中了locked勒索病毒怎么办,勒索病毒解密

最近一段时间,网络上的locked勒索病毒又开始了新一波的攻击,给企业的正常生产生活带来了严重影响。经过最近一段时间云天数据恢复中心对locked勒索病毒的解密,为大家整理了以下有关locked勒索病毒的相关信息。近期locked勒索病毒主要攻击金蝶…

Flask-SQLAlchemy事件钩子介绍

一、前言 前几天在搜资料的时候无意中看到有介绍SQLAlchemy触发器,当时感觉挺奇怪的,触发器不是数据库层面的概念吗,怎么flask-SQLAlchemy这个ORM框架会有这玩意。 二、SQLAlchemy触发器一个简单例子 考虑到效率博客表中有两个字段&#xf…

食品行业小程序开发攻略

想要设计一个食品小程序商城,却担心自己没有任何设计经验?别担心,现在有了一些简单易用的小程序制作工具,零基础也能成为一个小程序商城设计师!接下来,我们将一步步教你如何使用这些工具快速上手。 首先&am…

关于线性模型的底层逻辑解读 (机器学习 细读01)

一 多元线性回归 线性回归是机器学习中 有监督机器学习 下的一种算法。 回归问题主要关注的是因变量(需要预测的值,可以是一个也可以是多个)和一个或多个数值型的自变量(预测变量)之间的关系。 需要预测的值:即目标变量,target,y&#xff0c…

【NI-DAQmx入门】计数器

1.计数器的作用 NI产品的计数器一般来说兼容TTL信号,定义如下:0-0.8V为逻辑低电平,2~5V为高电平,0.8-2V为高阻态,最大上升下降时间为50ns。 计数器可以感测上升沿(从逻辑低到逻辑高的转变)和下降…

无公网IP,如何使用公网SSH远程访问家中的树莓派?

文章目录 前言如何通过 SSH 连接到树莓派步骤1. 在 Raspberry Pi 上启用 SSH步骤2. 查找树莓派的 IP 地址步骤3. SSH 到你的树莓派步骤 4. 在任何地点访问家中的树莓派4.1 安装 Cpolar内网穿透4.2 cpolar进行token认证4.3 配置cpolar服务开机自启动4.4 查看映射到公网的隧道地址…