电脑基础 · 2023年4月19日

逻辑回归(LogisticRegression)中的参数(详解)

LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)

参数详解:

1.penalty:str类型,正则化项的选择。正则化主要有两种:l1和l2,默认为l2正则化。

‘liblinear’ 支持l1和l2,但‘newton-cg’, ‘sag’ 和‘lbfgs’ 只支持l2正则化。

2.dual:bool(True、False), default:False

如果为True,则求解对偶形式,只有在penalty='l2' 且solver='liblinear' 时有对偶形式;通常样本数大于特征数的情况下,默认为False,求解原始形式。

3.tol : float, default:1e-4

停止求解的标准,默认误差不超过1e-4时,停止进一步的计算。

4.C :float,default:1.0

正则化系数λ的倒数; 必须是大于0的浮点数。 与SVM一样,值越小正则化越强,通常默认为1。

5.fit_intercept:bool(True、False),default:True

是否存在截距,默认为True。

6.intercept_scaling :float,default :1.0

仅在使用solver为“liblinear”且fit_intercept=True时有用。 在这种情况下,x变为[x,intercept_scaling],即具有等于intercept_scaling的常数值的“合成”特征被附加到实例矢量。 截距变成了intercept_scaling * synthetic_feature_weight. 注意: 合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。相当于人造一个特征出来,该特征恒为 1,其权重为b。

7.class_weight :dict or ‘balanced’,default:None

class_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择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)会输出每个类的样本数)。

8.random_state:int,default:None

随机数种子,int类型,可选参数,默认为无,仅在正则化优化算法为sag,liblinear时有用。

9.solver :‘newton-cg’,‘lbfgs’,‘liblinear’,‘sag’,'saga',default:liblinear

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

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

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

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

saga:线性收敛的随机优化算法。

对于小型数据集,可以选择‘liblinear’,而’sag’和’saga’对于大型数据集更快。

对于多类问题,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失;'liblinear’仅限于一项损失(就是用liblinear的时候,如果是多分类问题,得先把一种类别作为一个类别,剩余的所有类别作为另外一个类别。依次类推,遍历所有类别,进行分类。)。

‘newton-cg’、'lbfgs’和’sag’这三种优化算法只处理L2惩罚(这三算法都需要损失函数的一阶或者二阶连续导数),而’liblinear’和’saga’可以处理L1和L2惩罚。

10.max_iter:int ,default:100

仅适用于newton-cg,sag和lbfgs求解器。 求解器收敛的最大迭代次数。

11.multi_class:str,{‘ovr’, ‘multinomial’},default:‘ovr’

'ovr' :采用 one-vs-rest 策略,'multinomial':直接采用多分类逻辑回归策略。

如果选择ovr,则4种损失函数的优化方法liblinear,newton-cg,lbfgs和sag都可以选择。但是如果选择multinomial,则只能选择newton-cg, lbfgs和sag。

12.verbose:int,default:0

日志冗长度,用于开启/关闭迭代中间输出的日志。

13.warm_start:bool(True、False),default:False

热启动参数,如果为True,那么使用前一次训练结果继续训练,否则从头开始训练。对于liblinear解算器没用。

14.n_jobs:int,default:1

并行数,int类型,默认为1。1的时候,用CPU的一个内核运行程序,2的时候,用CPU的2个内核运行程序。为-1的时候,用所有CPU的内核运行程序。

总结:

Logistic回归的目的是寻找一个非线性函数Sigmoid的最佳拟合参数,求解过程可以由最优化算法完成。