1.1     scikit-learn参数介绍

1.1.1  导入

from sklearn.linear_model import LogisticRegression

1.1.2  版本

scikit-learn==0.21.3

1.1.3  参数

1.1.3.1 penalty

l1、l2、elasticnet、none,默认l2

l1: l1正则,邻回归

l2: l2正则,套索回归

elasticnet: 弹性网络,是邻回归和套索回归的正则项的混合

none: 什么都不加

在调参时如果我们主要的目的只是为了解决过拟合,一般penalty选择L2正则化就够了。但是如果选择L2正则化发现还是过拟合,即预测效果差的时候,就可以考虑弹性网络和L1正则化,弹性网络优于L1正则,因为当特征数量超过训练实例数量,又或者是几个特征强相关时,L1正则的表现可能非常不稳定。另外,如果模型的特征非常多,我们希望一些不重要的特征系数归零,从而让模型系数稀疏化的话,也可以使用L1正则化。

penalty参数的选择会影响损失函数优化算法的选择,即参数solver的选择。

若是L2正则,有4种可选的算法:“newton-cg”,“lbfgs”,“liblinear”,“sag”,

若是L1正则,有1种可选的算法:“liblinear”,L1正则化的损失函数不是连续可导的。

若是elasticnet,有1种可选的算法:“saga”

若是none,不支持的算法:“liblinear”

1.1.3.2 dual

布尔类型,True/False,默认False

dual只适用于正则化项为l2 liblinear的情况,通常样本数>特征数的情况下,dual=False。

1.1.3.3 tol

浮点型,默认为1e-4

停止判则的容忍度(误差)。

1.1.3.4 C

正浮点型,默认1.0

C为正则化系数  的逆,即为  。像在SVM中,较小的值指定更强的正则化。

1.1.3.5 fit_intercept

布尔类型,True/False,默认为True

是否存在截距。

1.1.3.6 intercept_scaling

浮点型,默认为1

仅仅在solve=liblinear,并且fit_intercept=True时有用

截距intercept= intercept_scaling * synthetic_feature_weight

当存在截距时,相当于一个合成特性的常量值等于截距,被附加到实例向量。synthetic_feature_weight相当于是原先的截距,是合成特征的常量值,设置intercept_scaling相当于更新截距,一般默认为1。

注意:综合特征权重与其他特征一样,服从L1/L2正则化。为了减少正则化对合成特征权重(截距)的影响,必须增加截距尺度。

1.1.3.7 class_weight

字典类型或者“balanced”,默认None

字典类型格式:{class_label: weight}

class_weight='balanced'时,class_weight = n_samples / (n_classes * np.bincount(y)),即权重=总样本数/(分类类别个数*每个类别的样本数),使得各类别的权重是一样的。

比如说二分类,0:40,1:60,那么0类型每个样本所占的权重就是100/(2*40)=5/4, 1类型每个样本所占的权重就是100/(2*60)=5/6,  5/4*40:5/6*60=1:1

在0.17版本中默认为balanced

Note:

在分类模型中,我们经常会遇到两类问题:

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

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

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

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

1.1.3.8 random_state

整数类型,默认None

随机种子,伪随机数生成器的种子,在重新排序数据的时候使用,如果随机种子不变,数据排序位置不变。如果random_state=None,那么random_state是一个随机数。在solver == ‘sag’ or ‘liblinear’的时候被使用。

1.1.3.9 solver

字符串,‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’,默认是’ liblinear’

算法,用于最优化问题。具体原理如下详细讲述。

a) liblinear:liblinear是一个针对线性分类场景而设计的工具包,支持线性的SVM和Logistic回归等,但是无法通过定义核函数的方式实现非线性分类。使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。

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

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

d) sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。

e) saga: 快速梯度下降

在小数据集上,‘liblinear’是一个好的选择,‘sag’ 和 ‘saga’用于大数据集上。

对于多分类问题,仅仅是‘newton-cg’, ‘sag’, ‘saga’ ,‘lbfgs’可以处理多分类损失。

‘newton-cg’, ‘lbfgs’, ‘sag’, ‘saga’能处理L2正则或none

‘liblinear’, ‘saga’能处理L1正则

‘saga’也支持elasticnet(弹性网络)

‘liblinear’不支持penalty=’none’,只能处理一对多的多元逻辑回归。

注:‘sag’, ‘saga’仅在特征比例大致相同时可以快速收敛。可以从sklearn.preprocessing中处理数据。

在0.17版本中有随机平均梯度下降算法。

在0.19版本中有SAGA算法。

在0.20版本中设置了警告,在0.22版本中默认值会从’liblinear’转变为’ lbfgs’。

1.1.3.10         max_iter

整数类型,默认100

算法收敛的最大迭代次数。用于迭代最优的参数。

Note:

如果设置太低,算法可能在离最优解还很远时就停了;如果设置得太高,模型达到最优解后,继续迭代参数不再变化,又会浪费时间。一个简单的办法是,在开始时设置一个非常大的迭代次数,但是当梯度向量的值变得很微小时中断算法-也就是它的范数变得低于ε(称为容差)时,这时梯度下降几乎达到了最小值。

1.1.3.11         multi_class

字符串类型,’ovr’, ‘multinomial’, ‘auto’,默认为’ovr’

ovr: one-vs-rest(OvR)一对多(用于多元逻辑回归),一类设为1,其他类设为0

multinomial: many-vs-many(MvM),多对多,多项式

auto: 自动

如果选择’ovr’,二分类问题适用于每个标签。对于多项式,损失最小化是多项式损失符合整个概率分布,即使数据是二分类。

‘multinomial’在solver=’liblinear’时是不可用的。

当数据是二分类,或者solver=’liblinear’时,若multi_class=’auto’,则设置为’ovr’,否则的话设置为’multinomial’。

在0.18版本中,随机平均梯度下降用于’multinomial’。

在0.20版本中设置了警告,在0.22版本中默认值会从’ovr’改成’auto’。

Note:

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

1.1.3.12         verbose

整数,默认为0

日志冗长度。

verbose=0,不输出训练过程

verbose=1,偶尔输出

verbose>1,对每个子模型都输出

对’liblinear’和’lbfgs’算法设置任何正整数的日志冗长度。

1.1.3.13         warm_start

布尔类型,True/False,默认为False

当在相同的数据集上反复拟合一个估计值,但是对于多个参数值(例如在网格搜索中查找性能最大化的值),可以重用从以前的参数值中学到的模型,来节省时间。当warm_start=True,重用上一个调用的解决方案来适应初始化。当warm_start=False,将上一次的解决方案擦除。对’liblinear’算法不起作用。

在0.17版本中支持lbfgs, newton-cg, sag, saga算法。

1.1.3.14         n_jobs

整数 或者 None,默认为None

n_jobs为cpu核数,当多类并行操作时且multi_class=’ovr’。

当solver=’liblinear’,不管’ multi_class’ 是否有规定,n_jobs这个参数会被忽略。

n_jobs=None,代表1,除非在joblib.parallel_backend环境中(为-1),n_jobs=-1,意味着使用所有的处理器。

1.1.3.15         l1_ratio

浮点型类型 或者 None,默认为None

Elastic-Net(弹性网络)主要参数,l1_ratio的取值范围为:0 <= l1_ratio <= 1,当penalty='elasticnet'才有用。l1_ratio=0等价于penalty='l2';l1_ratio=1等价于penalty='l1';当0 < l1_ratio <1时,介于L1和L2之间。l1_ratio即为弹性网络的混合比例。

1.1.4  属性

1.1.4.1 classes_

输出array类型

y标签(分类器)的类别列表

1.1.4.2 coef_

输出array类型

目标函数的特征系数。

当为二分类问题时,coef_的形状为shape(1, n_features);当multi_class='multinomial'时,coef_对应的结果为1(True),-coef_对应的结果为0(False)

1.1.4.3 intercept_

截距。

如果fit_intercept=False,截距为0。当为二分类问题时,intercept_的形状为shape(1, n_features);当multi_class='multinomial',intercept_对应的结果为1,-intercept_对应的结果为0。

1.1.4.4 n_iter_

所有类的实际迭代次数。二分类或多分类仅返回一个元素。对于二分类结果,仅返回分类中迭代次数最大的一个。

在0.20版本中,在SciPy <= 1.0.0中,lbfgs迭代次数的个数可能会超过最大迭代次数max_iter。n_iter会报告为最大的迭代次数max_iter。

1.1.5  方法

1.1.5.1 decision_function

return:

shape=(n_samples,) if n_classes == 2 else (n_samples, n_classes)

decision_function(self, X)

预测样本的置信度

X:训练集X

1.1.5.2 densify

densify(self)

将系数矩阵转换为密集阵列格式。

1.1.5.3 fit

fit(self, X, y, sample_weight=None)

根据给定的训练数据拟合模型。返回一个对象。

X:训练集X

y:训练集y

sample_weight:每个样本的权重

sample_weight是用来调节每个样本的权重。在scikit-learn做逻辑回归时,class_weight和sample_weight均使用,则样本真正权重为class_weight*sample_weight

1.1.5.4 get_params

get_params(self, deep=True)

获取这个估计器的参数。返回 {}参数名称:值} 的字典格式。

deep:布尔类型,默认True

如果为真,那么返回此估计器和包含的子对象的参数。

1.1.5.5 predict

predict(self, X)

预测样本在X中的分类标签。

X:测试集或验证集

1.1.5.6 predict_log_proba

predict_log_proba(self, X)

概率估计的对数。所有类的返回估计值由类的标签排序。

X:测试集或验证集

1.1.5.7 predict_proba

predict_proba(self, X)

概率估计。所有类的返回估计值由类的标签排序。

X::测试集或验证集

对于多分类问题,如果multi_class= “multinomial”,那么通过softmax函数每一个分类都有一个预测概率;否则的话,使用one_vs_rest(一对其他)的方法,使用逻辑回归函数计算每个分类假设为正的概率,并且在所有分类中规范化这些值。

1.1.5.8 score

score(self, X, y, sample_weight=None)

返回给定训练数据和标签的平均准确率。

X:训练集X

y:训练集y

sample_weight:每个样本的权重

在多标签分类中,这是子集精度,这是一个苛刻的度量标准,因为您需要对每个样本的每个标签集进行正确的预测。

1.1.5.9 set_params

set_params(self, **params)

设置该估计器的参数。

1.1.5.10         sparsify

sparsify(self)

将系数矩阵转换为稀疏格式(稀疏矩阵),返回该估计器。

逻辑回归2-scikit-learn参数介绍的更多相关文章

  1. scikit_learn逻辑回归类库

    来自:刘建平 1.概述 在scikit-learn中,与逻辑回归有关的主要有3个类.LogisticRegression, LogisticRegressionCV 和 logistic_regres ...

  2. 逻辑回归原理_挑战者飞船事故和乳腺癌案例_Python和R_信用评分卡(AAA推荐)

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  3. python机器学习——逻辑回归

    我们知道感知器算法对于不能完全线性分割的数据是无能为力的,在这一篇将会介绍另一种非常有效的二分类模型--逻辑回归.在分类任务中,它被广泛使用 逻辑回归是一个分类模型,在实现之前我们先介绍几个概念: 几 ...

  4. 【机器学习基础】逻辑回归——LogisticRegression

    LR算法作为一种比较经典的分类算法,在实际应用和面试中经常受到青睐,虽然在理论方面不是特别复杂,但LR所牵涉的知识点还是比较多的,同时与概率生成模型.神经网络都有着一定的联系,本节就针对这一算法及其所 ...

  5. scikit-learn 逻辑回归类库使用小结

    之前在逻辑回归原理小结这篇文章中,对逻辑回归的原理做了小结.这里接着对scikit-learn中逻辑回归类库的我的使用经验做一个总结.重点讲述调参中要注意的事项. 1. 概述 在scikit-lear ...

  6. 机器学习之逻辑回归(Logistic Regression)

    1. Classification 这篇文章我们来讨论分类问题(classification problems),也就是说你想预测的变量 y 是一个离散的值.我们会使用逻辑回归算法来解决分类问题. 之 ...

  7. 逻辑回归 logit

    [方法转]http://www.powerxing.com/logistic-regression-in-python/ http://blog.csdn.net/lipengcn/article/d ...

  8. Sklearn实现逻辑回归

    方法与参数 LogisticRegression类的各项参数的含义 class sklearn.linear_model.LogisticRegression(penalty='l2', dual=F ...

  9. 逻辑回归(Logistic Regression)算法小结

    一.逻辑回归简述: 回顾线性回归算法,对于给定的一些n维特征(x1,x2,x3,......xn),我们想通过对这些特征进行加权求和汇总的方法来描绘出事物的最终运算结果.从而衍生出我们线性回归的计算公 ...

随机推荐

  1. 我说CMMI之三:CMMI的构件--转载

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/dylanren/article/deta ...

  2. MyEclipse使用教程:导航代码(一)

    [MyEclipse CI 2019.4.0安装包下载] 无论是在文件之间导航还是在文件中导航,都可以使用大量导航工具来加快工作流程.目前这些导航工具可在MyEclipse,CodeMix中使用. 快 ...

  3. K8S概念

    1.master master是集群的网关和中枢,负责诸如为用户和客户端暴露api.跟踪其他服务器的健康状态.以最优方式调度工作负载,以及编排其他组件之间的通信等服务,它是用户或客户端与集群之间的核心 ...

  4. 解决 Maven项目进行编译( mvn compile )时出现的错误

    错误信息: 在 pom.xml 文件 设置一下Maven的属性 <!--Maven 属性--> <properties> <!--项目的编码格式--> <pr ...

  5. Python 正则表达式Ⅳ

    repl 参数是一个函数 以下实例中将字符串中的匹配的数字乘以 2: 执行输出结果为: re.compile 函数 compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象 ...

  6. laravel发送邮件模板中点击的链接url动态生成

    邮件模板里有url链接,生成链接有三种方式(目前总结出这三种方式)这个链接可以是: http://www.xxx.com/active?id=xxx&token=xxx   这种形式是把url ...

  7. Selenium 文件下载

    点击文件下载时,弹出的那个框,webdriver是定位不到的,只有通过第三方工具或方法来操作 一.通过PyUserInput模拟键盘按键下载 PyUserInput是模拟鼠标和键盘的一个模块,替代了p ...

  8. [JZO6401]:Time(贪心+树状数组)

    题目描述 小$A$现在有一个长度为$n$的序列$\{x_i\}$,但是小$A$认为这个序列不够优美. 小$A$认为一个序列是优美的,当且仅当存在$k\in [1,n]$,满足:$$x_1\leqsla ...

  9. 利用jquery动态添加和删除表格的一行,并且保存单行数据

    开发时遇到一个需求:要求要在页面的表格可以添加和删除一行,并能填写对应的数据后保存这一行数据. HTML代码 界面使用了freemarker框架,teams是后台传过来的list类型数据 <fo ...

  10. MySQL格式化小数点为百分号并保留2为小数

    #colname为字段名字,CONCAT的作用是把小数点转成百分号,TRUNCATE的作用是保留百分号的小数点成几位 SELECT CONCAT(TRUNCATE(colname*100,2),'%' ...