逻辑回归:逻辑回归中的参数

2023-11-05

转载自:https://blog.csdn.net/Captain_DUDU/article/details/105081643

LogisticRegression,一共有14个参数:
逻辑回归参数详细说明

参数说明如下:

penalty:惩罚项,str类型,可选参数为l1和l2,默认为l2。用于指定惩罚项中使用的规范。newton-cg、sag和lbfgs求解算法只支持L2规范。L1G规范假设的是模型的参数满足拉普拉斯分布,L2假设的模型参数满足高斯分布,所谓的范式就是加上对参数的约束,使得模型更不会过拟合(overfit),但是如果要说是不是加了约束就会好,这个没有人能回答,只能说,加约束的情况下,理论上应该可以获得泛化能力更强的结果。
dual:对偶或原始方法,bool类型,默认为False。对偶方法只用在求解线性多核(liblinear)的L2惩罚项上。当样本数量>样本特征的时候,dual通常设置为False。
tol:停止求解的标准,float类型,默认为1e-4。就是求解到多少的时候,停止,认为已经求出最优解。
c:正则化系数λ的倒数,float类型,默认为1.0。必须是正浮点型数。像SVM一样,越小的数值表示越强的正则化。
fit_intercept:是否存在截距或偏差,bool类型,默认为True。
intercept_scaling:仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。float类型,默认为1。
class_weight:用于标示分类模型中各种类型的权重,可以是一个字典或者’balanced’字符串,默认为不输入,也就是不考虑权重,即为None。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者自己输入各个类型的权重。举个例子,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9,1:0.1},这样类型0的权重为90%,而类型1的权重为10%。如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))。n_samples为样本数,n_classes为类别数量,np.bincount(y)会输出每个类的样本数,例如y=[1,0,0,1,1],则np.bincount(y)=[2,3]。
那么class_weight有什么作用呢?
在分类模型中,我们经常会遇到两类问题:
第一种是误分类的代价很高。比如对合法用户和非法用户进行分类,将非法用户分类为合法用户的代价很高,我们宁愿将合法用户分类为非法用户,这时可以人工再甄别,但是却不愿将非法用户分类为合法用户。这时,我们可以适当提高非法用户的权重。
第二种是样本是高度失衡的,比如我们有合法用户和非法用户的二元样本数据10000条,里面合法用户有9995条,非法用户只有5条,如果我们不考虑权重,则我们可以将所有的测试集都预测为合法用户,这样预测准确率理论上有99.95%,但是却没有任何意义。这时,我们可以选择balanced,让类库自动提高非法用户样本的权重。提高了某种分类的权重,相比不考虑权重,会有更多的样本分类划分到高权重的类别,从而可以解决上面两类问题。
random_state:随机数种子,int类型,可选参数,默认为无,仅在正则化优化算法为sag,liblinear时有用。
solver:优化算法选择参数,只有五个可选参数,即newton-cg,lbfgs,liblinear,sag,saga。默认为liblinear。solver参数决定了我们对逻辑回归损失函数的优化方法,有四种算法可以选择,分别是:
liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
saga:线性收敛的随机优化算法的的变重。
总结:
liblinear适用于小数据集,而sag和saga适用于大数据集因为速度更快。
对于多分类问题,只有newton-cg,sag,saga和lbfgs能够处理多项损失,而liblinear受限于一对剩余(OvR)。啥意思,就是用liblinear的时候,如果是多分类问题,得先把一种类别作为一个类别,剩余的所有类别作为另外一个类别。一次类推,遍历所有类别,进行分类。
newton-cg,sag和lbfgs这三种优化算法时都需要损失函数的一阶或者二阶连续导数,因此不能用于没有连续导数的L1正则化,只能用于L2正则化。而liblinear和saga通吃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正则化了。
max_iter:算法收敛最大迭代次数,int类型,默认为10。仅在正则化优化算法为newton-cg, sag和lbfgs才有用,算法收敛的最大迭代次数。
multi_class:分类方式选择参数,str类型,可选参数为ovr和multinomial,默认为ovr。ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。
OvR和MvM有什么不同*?*
OvR的思想很简单,无论你是多少元逻辑回归,我们都可以看做二元逻辑回归。具体做法是,对于第K类的分类决策,我们把所有第K类的样本作为正例,除了第K类样本以外的所有样本都作为负例,然后在上面做二元逻辑回归,得到第K类的分类模型。其他类的分类模型获得以此类推。
而MvM则相对复杂,这里举MvM的特例one-vs-one(OvO)作讲解。如果模型有T类,我们每次在所有的T类样本里面选择两类样本出来,不妨记为T1类和T2类,把所有的输出为T1和T2的样本放在一起,把T1作为正例,T2作为负例,进行二元逻辑回归,得到模型参数。我们一共需要T(T-1)/2次分类。
可以看出OvR相对简单,但分类效果相对略差(这里指大多数样本分布情况,某些样本分布下OvR可能更好)。而MvM分类相对精确,但是分类速度没有OvR快。如果选择了ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。但是如果选择了multinomial,则只能选择newton-cg, lbfgs和sag了。
verbose:日志冗长度,int类型。默认为0。就是不输出训练过程,1的时候偶尔输出结果,大于1,对于每个子模型都输出。
warm_start:热启动参数,bool类型。默认为False。如果为True,则下一次训练是以追加树的形式进行(重新使用上一次的调用作为初始化)。
n_jobs:并行数。int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。
总结:
优点:实现简单,易于理解和实现;计算代价不高,速度很快,存储资源低。
缺点:容易欠拟合,分类精度可能不高。
其他:
Logistic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法完成。
改进的一些最优化算法,比如sag。它可以在新数据到来时就完成参数更新,而不需要重新读取整个数据集来进行批量处理。
机器学习的一个重要问题就是如何处理缺失数据。这个问题没有标准答案,取决于实际应用中的需求。现有一些解决方案,每种方案都各有优缺点。
我们需要根据数据的情况,这是Sklearn的参数,以期达到更好的分类效果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

逻辑回归:逻辑回归中的参数 的相关文章

  • 图解RAM结构与原理,系统内存的Channel、Chip与Bank

    文章目录 转载正文 标题挥发性内存分2种 SRAM和DRAM 主内存子系统 channel 和 DIMM rank 和 chip bank row column 内存的读写方式 越多越好 加速读写能力 本文转载来自 图解RAM结构与原理 系
  • 利用mybatis框架的解析器实现文本动态参数

    问题 脚本模板完成后 有些不同的主机执行同一个脚本模板时需要的参数不一样 那么在不同的主机上执行同个脚本时怎么动态将参数赋值给待执行的脚本 而不用直接修改脚本内容 解决方案 Mybatis框架本身的解析器GenericTokenParser

随机推荐

  • Springboot整合Zipkin+kafka+ELK,实现链路追踪和日志收集

    背景 随着项目的深入 久不久可能出现些问题 但是查询起来又极其麻烦 线上有三台服务器 不知道报错日志在那台上 很麻烦 所以领导要求把项目的链路追踪和日志给统一输出到elk中 可以实现在elk查询 Zipkin Sleuth链路追踪 先来实现
  • 宠物行业如何进行软文营销

    如今 宠物已经成为了人们生活中不可或缺的一部分 大众对于萌宠的喜爱与日俱增 随着 萌宠经济 升温 越来越多的商机开始出现 伴随着宠物市场竞争的日益激烈 宠物行业的营销光靠硬广告很难吸引受众 现在的大趋势应该是软文营销为主 那么宠物行业应该如
  • Neural Network Intelligence (NNI)

    环境 conda install pytorch 1 7 0 torchvision 0 8 0 torchaudio 0 7 0 cudatoolkit 10 1 c pytorch 每次看起来都很简单 自己写起来才知道哪里不会 impo
  • 【整合】【故障排查】LINUX系统资源使用情况排查(top、htop、ps、pstree)

    LINUX系统资源使用情况排查 工作中我们常见的资源使用情况的排查包括 CPU使用情况 内存使用情况 网络带宽使用情况等等 而我们常用的工具有top htop ps pstree等等 htop top加强版 pstree ps加强版 ps与
  • spark sql 创建rdd以及DataFrame和DataSet互转

    spark sql 创建rdd以及DataFrame和DataSet互转 使用SparkSession读取本地文件创建rdd DateSet的介绍 DataFrame的介绍 Rdd转DateFrame 读取本地文件得到DataFrame D
  • 剑指offer面试题62(java版):圆圈中最后剩下的数字

    welcome to my blog 剑指offer面试题62 java版 圆圈中最后剩下的数字 题目描述 每年六一儿童节 牛客都会准备一些小礼物去看望孤儿院的小朋友 今年亦是如此 HF作为牛客的资深元老 自然也准备了一些小游戏 其中 有个
  • latex加空行,加分割线,注释,设置表格字体大小等操作

    1 在文字末尾加空行可以用 2 直接加空行可以用 3 分割线 hrule 4 Latex编辑器Texstudio的注释快捷键 注释 Ctrl T 取消注释 Ctrl U 5 设置表格字体大小 Latex字体大小设置代码 begin tabl
  • MobaXterm连接服务器(虚拟机)

    下载链接 MobaXterm 终端工具 下载 安装 使用教程 蜗牛也不慢 的博客 CSDN博客 这个讲的很详细了 注意虚拟机的IP获取
  • 关于UNITY中System.Drawing引用失败的处理方法

    关于UNITY中System Drawing引用失败的处理方法 今天在使用EPPlus中 遇到一个处于This type has been forwarded to assembly System Drawing Version 4 0 0
  • 解决pip下载pytorch因网速慢而失败的问题

    一 一般下载pytorch方法 1 首先打开浏览器 输入 pytorch 然后进行搜索 点击pytorch的官网就进入了 2 进入到pytorch的官网后 划叶到下面 找到下面的选择框 根据自己的配置 选择正确的版本号 选择完后 把红色框内
  • 完美立方(C语言)

    题目 形如 a 3 b 3 c 3 d 3a 3 b 3 c 3 d 3 的等式被称为完美立方等式 例如 12 3 6 3 8 3 10 312 3 6 3 8 3 10 3 编写一个程序 对任给的正整数 N N le 100 N N 10
  • C# AES加密算法

    using System using System Collections Generic using System IO using System Linq using System Security Cryptography using
  • Gradle 团队发布了Gradle 7.2

    Gradle 团队近日发布 Gradle 7 2 Gradle 是一个类似于 Maven 项目的自动化构建工具 支持依赖管理和多项目 Gradle 抛弃了 Maven 基于 XML 的繁琐配置 取而代之的是Gradle 采用了特定语言 Gr
  • python实现堆栈和队列

    1 python实现堆栈 可先将Stack类写入文件stack py 在其它程序文件中使用from stack import Stack 然后就可以使用堆栈了 stack py的程序如下 class Stack def init self
  • linux下通过mount挂载iscsi、ntfs、nfs详解

    通常服务器本机自带磁盘空间有限 都需要额外加载磁盘 可以采用mount方式把远程的共享存储磁盘加载进来 目前用过的有iscsi ntfs nfs三种类型 一 mount挂载iscsi类型1 查找下准备挂载的磁盘或者存储器 root loca
  • SSL P2415 连通块

    2008 南海初中竞赛 连通块 Time Limit 10000MS Memory Limit 65536K Total Submit 41 Accepted 19 Case Time Limit 1000MS
  • Ubuntu使用vim报错 “/user/lib/python3.10/site.py“ E212: Can‘t open file for writing

    这个错误是由于没有足够的权限导致的 尝试使用sudo命令来重启编辑器或者直接打开终端并使用sudo命令编辑文件 需要重新打开命令行 但是现在是ssh 可能是用root权限进入vim后权限过期 折磨我十分钟 在网上搜了很多方法也没有解决 最后
  • 第13节-PhotoShop基础课程-裁剪工具

    文章目录 前言 1 裁剪工具 1 基本操作 Alt Shift 2 拉直 3 内容识别 自动填充 2 透视裁剪工具 3 切片工具 长图分成多个 4 切片选择工具 5 存储为一张一张 前言 1 裁剪工具 1 基本操作 Alt Shift 2
  • openwrt 查看运行程序_Go 语言交叉编译在 openwrt 上运行的程序

    go 语言一个很好的地方是可以方便的进行交叉编译 也就是编译出在不同于当前硬件平台 操作系统 上运行的程序 今天尝试编译一段代码到小米路由器 3G 上运行 具体过程记录在下面 供大家参考 环境 编译环境 mac go 1 11 运行环境 路
  • 逻辑回归:逻辑回归中的参数

    转载自 https blog csdn net Captain DUDU article details 105081643 LogisticRegression 一共有14个参数 逻辑回归参数详细说明 参数说明如下 penalty 惩罚项