大数据-210 数据挖掘 机器学习理论 - 逻辑回归 scikit-learn 实现 penalty solver

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(已更完)
  • DataX(已更完)
  • Tez(已更完)
  • 数据挖掘(正在更新…)

章节内容

上节我们完成了如下的内容:

  • 梯度下降
  • 梯度下降算法调优

在这里插入图片描述

逻辑回归的Scikit-Learn实现

参数详解

class sklearn.linear_model.LogisticRegression(penalty='l2',dual=False,tol=0.0001,C=1.0,fit_intercept=True,intercept_scaling=1,class_weight=None,random_state=None,solver='warn',max_iter=100,multi_class='warn',verbose=0,warm_start=False,n_jobs=None
)

penalty

正则化参数,LogisticRegression默认带了正则化项,penalty参数可选择的值有1和2,分别对应L1的正则化和L2的正则化,默认是L2的正则化。
在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了,但是如果选择L2正则化后还是过拟合,即预测效果差的时候,就可以考虑L1正则化。另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型稀疏化的话,也可以使用L1正则化。
penalty参数的选择会影响我们损失函数优化算法的选择,即参数solver的选择,如果是L2正则化,那么4种可选的算法(newton-cg、lbfgs、礼包里near、sag)都可以选择。但是如果penalty是L1正则化的话,就只能liblinear了。
这是因为L1正则化的损失函数不是连续可导的,而(newton-cg、lbfgs、sag)这三种优化算法时都需要损失函数的一阶或者二阶段连续倒数。而libnear并没有这个依赖。
而两种正则化下的C的取值,都可以通过学习曲线来进行调整。
建立两个逻辑回归,L1正则化和L2正则化的差别一目了然:

from sklearn.linear_model import LogisticRegression as LR
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
import numpy as np# 加载数据集
data = load_breast_cancer()
X = data.data
y = data.target# 对数据进行标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)# 使用L1正则化的逻辑回归
lrl1 = LR(penalty="l1", solver="liblinear", C=0.5, max_iter=1000)# 使用L2正则化的逻辑回归
lrl2 = LR(penalty="l2", solver="liblinear", C=0.5, max_iter=1000)# 训练L1正则化的模型
lrl1 = lrl1.fit(X_scaled, y)# 打印L1模型的系数
print(lrl1.coef_)# 统计非零系数的数量
print((lrl1.coef_ != 0).sum(axis=1))# 训练L2正则化的模型
lrl2 = lrl2.fit(X_scaled, y)# 打印L2模型的系数
print(lrl2.coef_)

执行结果如下图所示:
在这里插入图片描述
可以看出,当我们选择L1正则化的时候,许多特征的参数都被设置了0,这些特征在真正建模的时候,就不会出现在我们的模型当中了,而L2正则化是对所有特征都给出了参数。

究竟哪个正则化的效果更好呢?还是都差不多?

l1 = []
l2 = []
l1test = []
l2test = []
Xtrain, Xtest, Ytrain, Ytest =
train_test_split(X,y,test_size=0.3,random_state=420)
for i in np.linspace(0.05,1,19):
lrl1 = LR(penalty="l1",solver="liblinear",C=i,max_iter=1000)
lrl2 = LR(penalty="l2",solver="liblinear",C=i,max_iter=1000)
lrl1 = lrl1.fit(Xtrain,Ytrain)
l1.append(accuracy_score(lrl1.predict(Xtrain),Ytrain))
l1test.append(accuracy_score(lrl1.predict(Xtest),Ytest))
lrl2 = lrl2.fit(Xtrain,Ytrain)
l2.append(accuracy_score(lrl2.predict(Xtrain),Ytrain))
l2test.append(accuracy_score(lrl2.predict(Xtest),Ytest))
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(np.linspace(0.05,1,19),graph[i],color[i],label=label[i])
plt.legend(loc=4) #图例的位置在哪⾥?4表示,右下⻆
plt.show()

执行结果如下图所示:
在这里插入图片描述
对应的图如下所示:
在这里插入图片描述
可见,在我们的乳腺癌数据集下,两种正则化的结果区别不大。但随着C的逐渐变大,正则化的强度越来越小,模型在训练集和测试集上表现呈现了上升趋势,直到C=0.8左右,训练集上的表现依然走高,但模型在未知数据集上的表现就开始下跌,这时候就是出现了过拟合。我们可以认为,C设置0.8会比较好。
在实际使用中,基本就默认使用L2正则化,如果感觉到效果不好,就试试L1。

solver

solver参数决定了我们对逻辑回归损失函数的优化方法,有4种算法可以选择,分别是:

  • liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降来迭代优化损失函数
  • lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数
  • newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数
  • sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅用一部分的样本来计算梯度,适合于样本数据多的时候。

从上面的描述可以看出,newton-cg,lbfgs和sag这三种优化算法时都需要损失函数一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear通吃L1正则化和L2正则化。同时,sag每次仅使用部分样本进行梯度迭代,所以当样本量少的时候不要选择它,而如果样本非常大,比如大于10万,sag是第一选择。
但是sag不能用于L1正则化,所以当你有大量的样本,又需要L1的时候就需要自己做取舍了,要么通过对样本采样来降低样本量,要么回到L2正则化。

此时大家可能觉着,既然newton-cg、lbfgs和sag这么多限制,如果不是大样本,我们选择liblinear不就行了吗?因为liblinear也有自己的弱点,我们知道逻辑回归二元逻辑回归和多元逻辑回归。对于多元逻辑回归常见有one-vs-rest(OvR)和many-vs-many(MvM)两种,而MvM一般比OvR分类相对准确一些。liblinear只支持OvR,不支持MvM,这样如果我们需要相对精准的多元逻辑回归时就不能选择liblinear。这也意味着我们需要相对精确的多元回归逻辑就不能用L1正则化了。

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

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

相关文章

【Linux】【线程操作与同步】汇总整理

线程(Threads)是现代操作系统中用于并发执行的基本单元。一个进程可以包含一个或多个线程,每个线程都可以独立执行一段程序代码,共享进程的资源(如内存),但拥有自己的栈空间和寄存器状态。下面是…

免费送源码:Java+springboott+MySQL+Tomcat 游戏攻略网站设计与实现 计算机毕业设计原创定制

摘 要 随着国民生活水平的逐渐提高,每逢假期或空闲时节走出家门游山玩水已渐渐成为人们生活的一部分。互联网的普及给人们带来的便利不需多说,因此如果把游戏产业与互联网结合起来,利用Java技术建设游戏攻略网站,实现游戏资讯管理…

从0开始的STM32之旅8 串口通信(II)

目录 在开始理解底层原理之前,我们先尝试一下 怎么做 进一步理解 HAL_UART_Transmit HAL_UART_Receive 在开始理解底层原理之前,我们先尝试一下 现在我们综合一下,要求完成如下的事情: 在主程序中存在一个flag变量描述当前有…

springboot的增删改查商城小实践(b to c)

首先准备一张表,根据业务去设计表 订单编号是参与业务的,他那订单编号里面是有特殊意义的,比如说像什么一些年月日什么的,一些用户的ID都在那编号里面呢?不能拿这种东西当主件啊 根据数据量去决定数据类型 价格需要注意…

AndroidStudio-视图基础

一、设置视图的宽高 1.在XML文件中设置视图宽高 视图宽度通过属性android:layout_width表达,视图高度通过属性android:layout_height表达,宽高的取值主要有下列三种: (1)wrap_content:表示与内容自适应。对于文本视图来说&…

电子科大、同济大学与新加坡国立大学联合发布Math-LLaVA:增强多模态大语言模型的数学推理能力

一、结论写在前面 下面介绍的论文来自:电子科技大学、新加坡科技设计大学、同济大学、新加坡国立大学。 论文标题:Math-LLaVA: Bootstrapping Mathematical Reasoning for Multimodal Large Language Models 论文链接:https://arxiv.org/p…

高校体育场管理系统+ssm

摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,高校体育场管理系统被用户普遍使用,为方便用户…

杂谈:业务说的场景金融是什么?

引言:市场格局的转变 在供应短缺的年代,是典型的卖方市场。为了保证稳定供货,买方会提前一段时间下单,也几乎没什么议价能力。卖方只需等着接单就行。 现在很多领域的供应商数量越来越多,而且随着互联网的普及&#…

知从科技受邀出席ARM日产技术日

10月29日,上海知从科技有限公司受 ARM 之邀,参与了由其主办的日产技术日活动。此次活动在日本神奈川县厚木市的日产技术中心盛大举行,这一活动汇聚了行业内的前沿技术与精英人才,成为科技创新技术交流的重要平台。 知从科技积极参…

驱动前的准备

驱动前的准备 目录 驱动前的准备 移植SDK 补充:怎么使用我的虚拟机/怎么把自己的虚拟机拷贝到其他磁盘 移植SDK -- 将压缩包复制到虚拟机里面 -- 删除备份文件 -- 解压这个压缩包(会占用大量的空间->有空间再去做!) 补充:怎么使用我的…

【网页设计】CSS 定位

目标 能够说出为什么要用定位能够说出定位的4种分类能够说出4种定位各自的特点能够说出为什么常用子绝父相布局能够写出淘宝轮播图布局能够说出显示隐藏的2种方式以及区别 1. 定位 1.1 为什么需要定位 提问: 以下情况使用标准流或者浮动能实现吗?1. …

Spring Boot框架:计算机课程管理的工程认证之桥

3系统分析 3.1可行性分析 通过对本基于工程教育认证的计算机课程管理平台实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本基于工程教育认证的计算机课程管理平…

yolov10断点续训

1. 前言 我们在使用yolov10进行训练的时候往往会因为各种各样的原因中断训练,如: 开了太多程序导致崩溃突然断电其他原因 这时候如果下次能继续上次训练的结果继续训练会节省很多时间 2.复现与解决办法 2.1 正常启动训练 我们先正常启动一个训练 …

【笔记】LLC电路工作频点选择 2-1 输出稳定性的限制

LLC工作模式的分析参考了:现代电力电子学,电力出版社,李永东 1.LLC电路可以选择VCS也可以选择ZVS 1.1选择ZCS时,开关管与谐振电感串联后,与谐振电容并联: 1.2选择ZVS时,开关管仅仅安装在谐振电…

手把手教你写Unity3D飞机大战(4)人机飞机的移动

写在最前面的话 上一篇博客,我们控制了玩家的移动,但这还不够,我们需要让敌方也动起来。 一、大致概要 人机的移动,我们采用随机数来控制,分别包括(前进,转弯,爬升,俯冲&…

Spring Boot助力计算机课程管理:符合工程认证

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于工程教育认证的计算机课程管理平台的开发全过程。通过分析基于工程教育认证的计算机课程管理平台管理的不足,创建了一个计算机管理基于工程教育认…

Vue2基础

1.环境准备 安装脚手架:全局安装 作用:在任何一个目录下都能通过vue命令创建项目 注意:低版本的node执行这行命令可能会报错,需要升级版本 npm install -g vue/cli 创建项目 在指定的目录下,执行命令 作用&…

RAG如何提升视觉问答?剑桥大学博士论文《使用检索方法增强多模态问答系统》

开发能够处理复杂任务的人工智能系统的需求推动了深度学习的快速发展,尤其是自 2016 年以来,神经网络模型已成为主流方法。这些模型的应用范围广泛,从推荐系统到语音识别,彻底变革了多个领域。然而,仍然存在一些挑战&a…

C++初阶学习第九弹-----vector的模拟实现

C初阶学习第六弹------标准库中的string类_c# string[]-CSDN博客 C初阶学习第七弹——string的模拟实现-CSDN博客 C初阶学习第八弹--深入解析vector的使用-CSDN博客 一.vector的成员变量 目录 一.vector的成员变量 二.vector的模拟实现 2.1vector的构造与析构 2.2迭代器…

提升网站流量的搜索引擎优化实用指南

内容概要 搜索引擎优化(SEO)是提升网站可见性与流量的重要过程。在当今数字时代,理解这一领域的基本概念至关重要。SEO不仅仅是关于提高关键词排名,更是关于如何创造更好的用户体验和吸引目标受众。以下是一些关键要素&#xff0…