Sklearn之sklearn.linear_model.LogisiticRegression参数详解
在pycharm中键入
from sklearn.linear_model import LogisticRegression
而后安装command点击LogisticRegression可以查看它的参数如下:
各参数的含义如下:
1.正则化选择参数:penalty也称作惩罚项。
LogisticRegression默认的正则化项是l2正则化。如果在调参时主要目的是解决overfitting,一般会选择l2正则化。但是当预测结果不好时,可选用l1正则化。
2.dual:对偶或者原始方法,默认为false(样本数量>样本特征)。对偶方法仅用于求解线性多核liblinear的l2惩罚项上。要注意的是它仅在penalty='l2' 且solver='liblinear' 有对偶形式,仅此时有效。
3.tol:停止求解的标准,默认为1e-4,float类型,也即将设置的参数精度作为最优解。
4.c:正则化系数lambda的倒数,float类型,默认为1.0,必须是正浮点数类型,数值越小则反应正则化越强。
5.fit_intercept:是否存在截距或者偏差,默认为true,布尔类型。
6.intercept_scaling:当且仅当正则化项为liblinear且fit_intercept为true时有效。默认值为1,float类型。
7.class_weight:各种类型的权重,可以是字典或者字符串,默认值为None也就是不考虑权重。如果选择‘balanced’,那么类库会根据训练样本计算权重,某种类型的样本量越多,则权重越低;样本量越少,则权重越高。
8.random_state:随机种子,默认为none,仅在正则化项为sag或liblinear时有效。
9.solver:决定了对逻辑回归损失函数的优化方法。
- liblinear:使用开源的liblinear库实现,使用坐标轴下降法来迭代优化损失函数。
- lbfgs:拟牛顿法的一种,利用损失函数二阶导数也即海森矩阵来迭代优化损失函数。
- newton-cg:利用损失函数二阶导数也即海森矩阵来迭代优化损失函数。
- sag:随机平均梯度下降,与普通梯度下降法的区别时每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
要注意的是:newton-cg、lbfgs以及sag三种方式均要求损失函数具有一阶或者二阶连续导数,因此不能用于没有连续导数的l1正则化,只能用于l2正则化。而liblinear则对正则化项l1和l2均适用。当样本总数非常大,超过10w时,sag是第一选择。
对于多元逻辑回归,当我们拿逻辑回归算法时,称之为多分类。对于多元逻辑回归常见的有one-vs-rest(OvR)和many-vs-many(MvM)
而liblinear仅支持OvR,所以当需要相对准确的分类时,一般不选择liblinear,也就是说多元逻辑回归时不选择l1正则化。
10.max_iter:算法收敛的最大迭代次数,默认为10。仅在正则优化算法为newton-cg、sag和lbfgs时有效。
11.multi_class:分类方式,分为上面提到的OvR和MvM。两者的区别主要在于多元逻辑回归。OvR相对简单,但是分类效果略差。而MvM则相对精确但分类速度不如OvR.
12.日志冗长度。默认为0,即不输出训练过程。为1时偶尔输出结果,大于1则对每一个子模型都输出。要注意的是它是int类型。
13.warm_start:热启动参数,布尔类型,默认false。如果为true,则下一次训练时,重新使用上一次的调用作为初始化。
14.n_jobs:并行数,默认为1,用1时使用cpu的一个内核运行程序;为2时使用cpu的2各内核运行程序;为-1时,适用所有的cpu内核运行程序。值得注意的是:当solver为liblinear时无效。
'n_jobs' > 1 does not have any effect when 'solver' is set to 'liblinear'.
Tips:对于多分类学习问题常常会用到拆解法:常见的有如下三种方式:
1.one-vs-one,OvO,一对一:从所有样本抽取2个样本训练一个分类器,第二次从所有样本中取出不完全一致的两个样本训练另外一个分类器,以此类推,最后对所有的分类器训练出的结果进行投票。
2.one-vs-rest,OvR,一对其余:将一个类的样例作为正例、所有其余的样例作为范例来训练N个分类器,如果由多个分类器预测为正类,则通常考虑各个分类器的置信度,选择置信度最大的类别标记作为分类结果。
3.many-vs-many,MvM:每次将若干个正类作为正类,若干个其他类作为反类,上述两种方式均可视作MvM的特例。MvM的正、反类构造必须有特殊的设计,不能随意选取。常用到的方式是Error Correcting Output Codes,ECOC纠错输出码。其思路如下:
1)编码:对N个类别做M次划分,每次划分将一部分类别划为正类,一部分划为反类,从而形成一个二分类训练集,这样一共产生M个训练集,可训练出M个训练器。
2)解码:M个分类器分别对测试样本进行预测,这些预测标记组成一个编码。将这个与此编码与每个类别各自的编码进行比较,返回其中距离最小的类别最为最终预测结果。
要注意的是:OvR只需要训练n个分类器,而OvO需要训练n*(n-1)/2个分类器,因此,OvO的存储开销和测试开销会比OvR更大。但是OvR的每个分类器均适用全部的训练样例,这导致OvR的训练开销会比OvO大的多。
对ECOC而言,其编码越长,纠错能力越强,需训练的分类器越多,计算存储开销均会增大。而编码并不是越长越好的另一点是,过长的编码是完全没有必要的,比如我仅仅只需做一个2分类。
上一篇: 骁龙765g和麒麟820哪个更好?骁龙765g对比麒麟820详细评测
下一篇: 推荐CSS框架
推荐阅读
-
linux命令之find命令的12个常用参数详解(含具体用法和注意事项)
-
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
-
linux命令详解之rpm命令参数使用方法
-
Linux系统IO分析工具之iotop参数详解(查看IO占用)
-
spring学习之参数传递与检验详解
-
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
-
PCA降维原理及其代码实现(附加 sklearn PCA用法参数详解)
-
linux命令之find命令的12个常用参数详解(含具体用法和注意事项)
-
JS库之Particles.js中文开发手册及参数详解
-
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】