二、sklearn 中逻辑回归的参数解释
- 在补充了关于正则化的相关内容之后,接下来,我们来详讨论关于逻辑回归的参数解释。
1. 说明文档中的内容解释
- 首先,先对上述逻辑回归的说明文档中的内容进行解释。
sklearn 中逻辑回归损失函数形态
在了解了正则化的相关内容后,接下来我们观察 sklearn 官网中给出的逻辑回归加入正则化后的损失函数表达式,我们发现该表达式和此前我们推到的交叉熵损失函数的表达式还是略有差异,核心原因是 sklearn 在二分类的时候默认两个类别的标签取值为 -1 和 1,而不是 0 和 1。
我们曾在 Lesson 4.2 中进行了非常详细的关于逻辑回归损失函数的推导,此处的数学推导,我们只需将 Lesson 4.2 中公式当中的 y 的取值改为 -1 和 1 即可。
正则化后损失函数表达式
相比原始损失函数,正则化后的损失函数有两处发生了变化,其一是在原损失函数基础上乘以了系数 C,其二则是加入了正则化项。
其中系数 C 也是超参数,需要人工输入,用于调整经验风险部分和结构风险部分的权重,C 越大,经验风险部分权重越大,反之结构风险部分权重越大。
此外,在 l 2 l2l2 正则化时,采用的wTw表达式,其实相当于是各参数的平方和除以 2,在求最小值时本质上和 w 的 2- 范数起到的作用相同,省去开平方是为了简化运算,而除以 2 则是为了方便后续求导运算,和 2 次方结果相消。
另外,sklearn 中还提供了弹性网正则化方法,其实是通过 ρ ρρ 控制 l 1 l1l1 正则化和 l 2 l2l2 正则化惩罚力度的权重,是一个更加综合的解决方案。
不过代价是增加了一个超参数 ρ ρρ,并且由于损失函数形态发生了变化,导致部分优化方法无法使用。
2. sklearn 中逻辑回归评估器的参数解释
- 在上述的一系列基础内容铺垫之后,接下来我们对逻辑回归评估器中的参数进行详细解释:
LogisticRegression?
dual:是否求解对偶问题
对偶问题是约束条件相反、求解方向也相反的问题,当数据集过小而特征较多时,求解对偶问题能一定程度降低运算复杂度,其他情况建议保留默认参数取值。
class_weight:各类样本权重
class_weight 其实代表各类样本在进行损失函数计算时的数值权重。
例如假设一个二分类问题,0、1 两类的样本比例是 2:1,此时可以输入一个字典类型对象用于说明两类样本在进行损失值计算时的权重。
例如输入 {0:1, 1:3},则代表 1 类样本的每一条数据在进行损失函数值的计算时都会在原始数值上*3。
而当我们将该参数选为 balanced 时,则会自动将这个比例调整为真实样本比例的反比,以达到平衡的效果。
solver:损失函数求解方法
其实除了最小二乘法和梯度下降以外,还有非常多的关于损失函数的求解方法,而选择损失函数的参数,就是solver参数。
而当前损失函数到底采用何种优化方法进行求解,其实最终目的是希望能够更快(计算效率更高)更好(准确性更高)的来进行求解,而硬性的约束条件是损失函数的形态,此外则是用户自行选择的空间。
这里给出何时应该用哪种 solver 的参考列表,也就是官网给出的列表:
逻辑回归可选的优化方法包括:
(1) liblinear,这是一种坐标轴下降法,并且该软件包中大多数算法都有 C++ 编写,运行速度很快,支持 OVR+L1 或 OVR+L2;
(2) lbfgs,全称是 L-BFGS,牛顿法的一种改进算法(一种拟牛顿法),适用于小型数据集,并且支持 MVM+L2、OVR+L2 以及不带惩罚项的情况;
(3) newton-cg,同样也是一种拟牛顿法,和 lbfgs 适用情况相同;
(4) sag,随机平均梯度下降,随机梯度下降的改进版,类似动量法,会在下一轮随机梯度下降开始之前保留一些上一轮的梯度,从而为整个迭代过程增加惯性,除了不支持 L1 正则化的损失函数求解以外(包括弹性网正则化)其他所有损失函数的求解;
(5) saga,sag 的改进版,修改了梯度惯性的计算方法,使得其支持所有情况下逻辑回归的损失函数求解;
对于逻辑回归来说,求解损失函数的硬性约束其实就是多分类问题时采用的策略以及加入的惩罚项,所以大多数情况,我们会优先根据多分类问题的策略及惩项来选取优化算法,其次,如果有多个算法可选,那么我们可以根据其他情况来进行求解器的选取,如:
(1) Penalize the intercept (bad),如果要对截距项也进行惩罚,那只能选取
liblinear;
(2) Faster for large datasets,如果需要对海量数据进行快速处理,则可以选取 sag 和 saga;
(3) Robust to unscaled datasets,如果未对数据集进行标准化,但希望维持数据集的鲁棒性(迭代平稳高效),则可以考虑使用 liblinear、lbfgs 和 newton-cg 三种求解方法。
multi_class:选用何种方法进行多分类问题求解
可选 OVR 和 MVM,当然默认情况是 auto,此时模型会优先根据惩罚项和 solver 选择 OVR 还是 MVM,但一般来说,MVM 效果会好于 OVR。