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. CodeForces - 1209F Koala and Notebook(拆边+BFS)

    题意:给定一个n个点m条边的无向图,边权分别为1-m,从起点1出发,每经过一条边就把边权以字符串的形式加入末尾,求到达其他每个点的最小字符串(长度不同的短的更小,否则字典序小的更小). 思路很巧妙,将 ...

  2. 问题-CHM文件不显示

    原问题:http://bbs.csdn.net/topics/370230310 问题描述: http://download.csdn.net/download/wybneu/3582721 我从这个 ...

  3. Acwing-121-赶牛入圈(二分, 二维前缀和,离散化)

    链接: https://www.acwing.com/problem/content/123/ 题意: 农夫约翰希望为他的奶牛们建立一个畜栏. 这些挑剔的畜生要求畜栏必须是正方形的,而且至少要包含C单 ...

  4. python的基础语法-部分Ⅱ

    Python 保留字符 下面的列表显示了在Python中的保留字.这些保留字不能用作常数或变数,或任何其他标识符名称. 所有 Python 的关键字只包含小写字母. 行和缩进 学习 Python 与其 ...

  5. 通用DES加密解密方法

    /// <summary> /// DES加密方法 /// </summary> /// <param name="strPlain">明文&l ...

  6. py脚本修改后自动重启

    在用socket.io, pika之类启动一个脚本死循环做server或者client的时候: 1脚本被编辑之后,是不会自动重启 2当代码报错的时候,会立即退出, 只能手动重新运行 python ap ...

  7. 手动升级 Confluence - 规划你的升级

    1. 确定你的升级路径 使用下面的表格来确定最佳的升级路径来让你的Confluence 从当前版本升级到最新的 Confluence 版本. 你的版本 推荐升级到 Confluence 的升级路径 2 ...

  8. codevs 1405 牛的旅行x

    牛的旅行 [问题描述] 农民John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧场不连通.现在,John想在农场里添加一条路径 ...

  9. ubuntu16.04配置记录

    新开一篇随笔记录ubuntu16.04配置中遇到的坑 1.安装Bumblebee(大黄蜂) Bumblebee是一款双显卡驱动,可以关闭独显,有效控制笔记本发热 第一步:安装我们的主角Bumblebe ...

  10. RMQ的ST算法

    ·RMQ的ST算法    状态设计:        F[i, j]表示从第i个数起连续2^j个数中的最大值    状态转移方程(二进制思想):        F[i, j]=max(F[i,j-1], ...