penalty : str, ‘l1’ or ‘l2’, default: ‘l2’
这个是l1 or l2正则化,一般选l2正则化对于逻辑回归分类算法
dual:选择默认的就好,针对的就是l2正则和libliner solver
C : float, default: 1.0
正则强度逆或者叫做惩罚系数就是对误差的容忍度,值越高越不能容忍
fit_intercept : bool, default: True
截距项,默认是存在的,模型的拟合不一定从坐标(0,0)点穿过
intercept_scaling : float, default 1.
solver 选择’liblinear’ self.fit_intercept is True.
class_weight : dict or ‘balanced’, default: None
Weights associated with classes in the form
我建议使用balanced,来处理不均衡正负样本的不均衡性
权重与输入数据中的类频率成反比
as n_samples / (n_classes * np.bincount(y)).

random_state : int, RandomState instance or None, optional, default: None
随机数生成器的种子在洗牌时使用,有时候,随机种子的结果又很大的影响,如果不说明,每次的结果都是随机的。
instance used by np.random. Used when solver == ‘sag’ or ‘liblinear’.

solver : {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’},
这里我们进行的不是二分类问题,所以我建议不再使用liblinear,可以使用saga,或者是其他的来尝试,这样的话上面的参数就需要来调整了,还有一点就是,小数据量用liblinear,但是这里的数据量是比较大的,所以选择其他的比较合适我觉得,我会尝试的
default: ‘liblinear’
Algorithm to use in the optimization problem.

- For small datasets, 'liblinear' is a good choice, whereas 'sag' and'saga' are faster for large ones.
- For multiclass problems, only 'newton-cg', 'sag', 'saga' and 'lbfgs'handle multinomial loss; 'liblinear' is limited to one-versus-restschemes.
- 'newton-cg', 'lbfgs' and 'sag' only handle L2 penalty, whereas

从上面也可以看出,我们选择默认的solver是不好的选择,是我更加坚定了。
‘liblinear’ and ‘saga’ handle L1 penalty.

Note that 'sag' and 'saga' fast convergence is only guaranteed on
features with approximately the same scale. You can
preprocess the data with a scaler from sklearn.preprocessing.

max_iter : int, default: 100
这个的话设置为默认就好,如果选择的是 newton-cg, sag lbfgs的话,可以用的上这个参数。
multi_class : str, {‘ovr’, ‘multinomial’}, default: ‘ovr’
这里我建议选择多项式,因为对于文本类型的数据,一般服从的都是多项式分布,不服从其他的分布。
warm_start : bool, default: False
n_jobs : int, default: 1
这里是设置cpu的使用率,如果选择-1就是尽可能多的内存资源被利用,建议选择-1,我一般都是选择-1

更加详细的参加下面
1. 概述
    在scikit-learn中,与逻辑回归有关的主要是这3个类。LogisticRegression, LogisticRegressionCV 和logistic_regression_path。其中LogisticRegression和LogisticRegressionCV的主要区别是LogisticRegressionCV使用了交叉验证来选择正则化系数C。而LogisticRegression需要自己每次指定一个正则化系数。除了交叉验证,以及选择正则化系数C以外, LogisticRegression和LogisticRegressionCV的使用方法基本相同。

    logistic_regression_path类则比较特殊,它拟合数据后,不能直接来做预测,只能为拟合数据选择合适逻辑回归的系数和正则化系数。主要是用在模型选择的时候。一般情况用不到这个类,所以后面不再讲述logistic_regression_path类。

    此外,scikit-learn里面有个容易让人误解的类RandomizedLogisticRegression,虽然名字里有逻辑回归的词,但是主要是用L1正则化的逻辑回归来做特征选择的,属于维度规约的算法类,不属于我们常说的分类算法的范畴。

    后面的讲解主要围绕LogisticRegression和LogisticRegressionCV中的重要参数的选择来来展开,这些参数的意义在这两个类中都是一样的。

  1. 正则化选择参数:penalty
        LogisticRegression和LogisticRegressionCV默认就带了正则化项。penalty参数可选择的值为”l1”和”l2”.分别对应L1的正则化和L2的正则化,默认是L2的正则化。

        在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑L1正则化。另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。

        penalty参数的选择会影响我们损失函数优化算法的选择。即参数solver的选择,如果是L2正则化,那么4种可选的算法{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’}都可以选择。但是如果penalty是L1正则化的话,就只能选择‘liblinear’了。这是因为L1正则化的损失函数不是连续可导的,而{‘newton-cg’, ‘lbfgs’,‘sag’}这三种优化算法时都需要损失函数的一阶或者二阶连续导数。而‘liblinear’并没有这个依赖。

        具体使用了这4个算法有什么不同以及有什么影响我们下一节讲。

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

        a) liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。

        b) lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。

        c) newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。

        d) 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正则化了。

        具体OvR和MvM有什么不同我们下一节讲。

  3. 分类方式选择参数:multi_class
        multi_class参数决定了我们分类方式的选择,有 ovr和multinomial两个值可以选择,默认是 ovr。

        ovr即前面提到的one-vs-rest(OvR),而multinomial即前面提到的many-vs-many(MvM)。如果是二元逻辑回归,ovr和multinomial并没有任何区别,区别主要在多元逻辑回归上。

        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了。

  4. 类型权重参数: class_weight
        class_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。

        如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。

        那么class_weight有什么作用呢?在分类模型中,我们经常会遇到两类问题:

        第一种是误分类的代价很高。比如对合法用户和非法用户进行分类,将非法用户分类为合法用户的代价很高,我们宁愿将合法用户分类为非法用户,这时可以人工再甄别,但是却不愿将非法用户分类为合法用户。这时,我们可以适当提高非法用户的权重。

        第二种是样本是高度失衡的,比如我们有合法用户和非法用户的二元样本数据10000条,里面合法用户有9995条,非法用户只有5条,如果我们不考虑权重,则我们可以将所有的测试集都预测为合法用户,这样预测准确率理论上有99.95%,但是却没有任何意义。这时,我们可以选择balanced,让类库自动提高非法用户样本的权重。

        提高了某种分类的权重,相比不考虑权重,会有更多的样本分类划分到高权重的类别,从而可以解决上面两类问题。

        当然,对于第二种样本失衡的情况,我们还可以考虑用下一节讲到的样本权重参数: sample_weight,而不使用class_weight。sample_weight在下一节讲。

  5. 样本权重参数: sample_weight
        上一节我们提到了样本不失衡的问题,由于样本不平衡,导致样本不是总体样本的无偏估计,从而可能导致我们的模型预测能力下降。遇到这种情况,我们可以通过调节样本权重来尝试解决这个问题。调节样本权重的方法有两种,第一种是在class_weight使用balanced。第二种是在调用fit函数时,通过sample_weight来自己调节每个样本权重。

        在scikit-learn做逻辑回归时,如果上面两种方法都用到了,那么样本的真正权重是class_weight*sample_weight.

        以上就是scikit-learn中逻辑回归类库调参的一个小结,还有些参数比如正则化参数C(交叉验证就是 Cs),迭代次数max_iter等,由于和其它的算法类库并没有特别不同,这里不多累述了。

sklearn 逻辑回归中的参数的详解'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'相关推荐

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

    转载自:https://blog.csdn.net/Captain_DUDU/article/details/105081643 LogisticRegression,一共有14个参数: 逻辑回归参数 ...

  2. python 函数参数self_Python类中self参数用法详解

    Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了. 首先明确的是s ...

  3. 逻辑回归(Logistic regression)详解-并用scikit-learn训练逻辑回归拟合Iris数据集

    这篇文章主要介绍逻辑回归背后的一些概率概念,给你一些直观感觉关于它的代价函数的由来.并且我也介绍了关于最大似然估计(maximum likelihood)的概念,用这个强大的工具来导出逻辑回归的cos ...

  4. logisticregression参数_通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战...

    前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...

  5. python机器学习库sklearn——逻辑回归

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 逻辑分类的相关的知识内容可以参考 http://blog.csdn.net/luanpeng825485697/article/det ...

  6. Python使用逻辑回归提示FutureWarning: Default solver will be changed to ‘lbfgs‘ in 0.22. Specify a solver to

    在Python中利用Logistic回归算法进行数据建模,本来算是比较常见的事情,但结果"阴沟里翻船",一上来就遇到了报警提示. 在PyCharm中,使用python的sklear ...

  7. Sklearn学习笔记,LogisticRegression的用法详解

    简介 Sklearn (全称 Scikit-Learn) 是基于 Python 语言的机器学习工具.它建立在 NumPy, SciPy, Pandas 和 Matplotlib 之上,里面的 API ...

  8. sklearn逻辑回归参数设置_【机器学习笔记】:逻辑回归实战练习(二)

    作者:xiaoyu 微信公众号:Python数据科学 知乎:python数据分析师 前言 前几篇介绍了逻辑回归在机器学习中的重要性:5个原因告诉你:为什么在成为数据科学家之前,"逻辑回归&q ...

  9. 小姐姐教我的 sklearn 逻辑回归

    sklearn 逻辑回归 Alex一晚上都没睡好觉,被IEEE-CIS Fraud Detection折磨的死去活来,不管怎么调参,用什么样的策略,评分就是上不去,这可不行,什么时候认过输,生死看淡, ...

最新文章

  1. EF-Entity Framework 相关技术点收集贴
  2. python和revit_如何在Python中产生新的RevitAPI对象
  3. Hibernate 中的DetachedCriteria。
  4. 在博客中插入emoji表情
  5. Python基础——try(异常处理)
  6. 系统开机 linux 时间不对,linux下查看系统运行时间和最近一次的开机启动时间
  7. 公式推导 11-21
  8. 基于DES加密的TCP聊天程序
  9. java 判断请求来自手机或电脑
  10. Avanci许可平台新增SK电讯、华硕电脑和大唐移动三家专利权人
  11. 轻量级开发编辑器 sublime text 3 使用心得
  12. 小米fortnite_“ Fortnite”发行商Epic Games希望从内部改变App Store业务 杂色的傻瓜...
  13. oracle 导出身份证号_ORACLE对身份证号码处理相关的SQL汇总
  14. 【C/C++】freopen 函数和 fopen 函数|标准输入输入写入文件|屏幕输出写入文件
  15. 吴恩达机器学习训练秘籍整理三十三到三十五章(五)
  16. 完美安装BatteryHistorian-Note: Could not parse aggregated battery stats.
  17. Win10局域网互传文件-wifi无线共享
  18. Java编程领域技术名词解释
  19. layui表头跟随滚动条滑动_侧边栏实现随滚动条滑动固定的效果
  20. 全国大学生数学竞赛(非数学专业组)微分学及其应用整理(2)

热门文章

  1. Codeforces Round #706 (Div. 2)-B. Max and Mex-题解
  2. Inter RealSense D435i摄像头有驱动但是连接不上
  3. 用户行为序列的特征设计和挖掘思路分享
  4. Fast Detection of Curved Edges at Low SNR
  5. CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes2018—论文笔记
  6. 教你如何将10W真实的微信公众号粉丝快速变现!
  7. 无纸化会议系统的选择理由
  8. webuploader使用
  9. 如何构建数据血缘系统
  10. 聚合支付、刷脸支付终将归零,智慧数字经营时代全面爆发