1. 原理
1.1 参数和x
在逻辑回归的本质函数 里, 是参数,x是自变量。在损逻辑回归的损失函数中,是自变量,x是参数。
逻辑回归的损失函数:
表示求解出来的一组参数,m是样本个数,是样本i真实的标签,是样本i基于参数 计算出的逻辑回归返回值,是样本i各个特征的取值。我们目的是求解出使 最小的 值。
1.2 正则化
上面说到损失函数,我们为了追求损失函数的最小值,让模型在训练集上表现最优,然而模型有可能在测试集上表现糟糕,为了防止此种过拟合现象,使用正则化。
常用L1正则化和L2正则化,分别通过在损失函数后加上参数向量 的L1范式和L2范式的倍数来实现,这个增加的范式,被称为正则项,也被称为惩罚项。损失函数改变,基于损失函数的最优化来求解的参数取值必然改变,以此调节模型拟合的程度。其中L1范式表现为参数向量中的每个参数的绝对值之和,L2范数表现为参数向量中的每个参数的平方和的开方值。
上面两个式子,是之前提及的损失函数,C是用来控制正则化程度的超参数,n是方程中的特征总数,j代表每个参数,是因为参数向量 中,第一个参数 是截距,通常不参与正则化。
| 参数 | 说明 |
|---|---|
| penalty | 可选’l1’ ‘l2’ 默认‘l2’ 注意,若选择"l1"正则化,参数solver仅能够使用求解方式”liblinear"和"saga“,若使用“l2”正则 化,参数solver中所有的求解方式都可以使用。 |
| C | 正则化强度的倒数。C越小,损失函数与越小。模型对损失函数的惩罚越重,正则化效力较强,参数会被压缩得越来越小 |
L1正则化和L2正则化虽然都可以控制过拟合,但它们的效果并不相同。当正则化强度逐渐增大(即C逐渐变小), 参数 的取值会逐渐变小,但L1正则化会将参数压缩为0,L2正则化只会让参数尽量小,不会取到0。
在L1正则化在逐渐加强的过程中,携带信息量小的、对模型贡献不大的特征的参数,会比携带大量信息的、对模型 有巨大贡献的特征的参数更快地变成0,所以L1正则化本质是一个特征选择的过程,掌管了参数的“稀疏性”。L1正 则化越强,参数向量中就越多的参数为0,参数就越稀疏,选出来的特征就越少,以此来防止过拟合。因此,如果 特征量很大,数据维度很高,我们会倾向于使用L1正则化。由于L1正则化的这个性质,逻辑回归的特征选择可以由 Embedded嵌入法来完成。
1.3 梯度下降:重要参数max_iter
现在,我们寻求的是损失函数的最小值,也就是图像的最低点。小球停下的就是我们在现有状况下可以获得的唯一点了。如果我们够幸运,这个点就是图像的最低 点,那我们只要找到这个点的对应坐标( ),就可以获取能够让损失函数最小的参数取值 了。如 此,梯度下降的过程就已经完成。 在这个过程中,小球其实就是一组组的坐标点 ;小球每次滚动的方向就是那一个坐标点的梯度向量的方 向,因为每滚动一步,小球所在的位置都发生变化,坐标点和坐标点对应的梯度向量都发生了变化,所以每次滚动 的方向也都不一样;人为设置的100次滚动限制,就是sklearn中逻辑回归的参数max_iter,代表着能走的最大步 数,即最大迭代次数。
求解梯度,是在损失函数 上对损失函数的自变量 和 求偏导,和 刚好是逻辑回归预测函数 的参数。
那梯度有什么含义呢?梯度是一个向量,因此它有大小也有方向。它的大小,就是偏导数组成的向量的大小,又叫做向量的模,记作 。它的方向,几何上来说,就是损失函数 的值增加最快的方向,就是小球每次滚动的方向的反方向。只要沿着梯度向量的反方向移动坐标,损失函数$ J(\theta)$的取值就会减少得最快,也就最容易找到损失函数的最小值。上文已经给出逻辑回归的损失函数:
现在对损失函数上的自变量 求变量,可得到梯度向量在第 组 上的表示形式:
给定一组 的取值 ,再带入特征矩阵 ,就可以求得这一组 取值下的预测结果 ,结合真实标签 ,就可以获得这一组 取值下的梯度向量 。通过不断在可能的 值上进行遍历,计算得到梯度向量,并在梯度向量的反方向上让损失函数 下降至最小值,遍历 的过程:
是第j次迭代后的参数向量,是第j次迭代时的参数向量,被称为步长,控制每迭代一次后 的变化。
1.4 步长
记 是小球最初位置,是一次滚动后小球移动到的位置,梯度向量的大小是点A在图像上对 求导后的结果,也就是点A切线方向的斜率, ,而 ,即步长*梯度向量的大小。梯度下降每走一步下降的距离是 。
步长不是任何物理距离,不是梯度下降过程中任何距离的直接变化,它是梯度向量的大小 上的一个比例,影响着参数 每次迭代后改变的部分。
在sklearn当中,通过设置参数max_iter最大迭代次数来代替步长,帮助我们控制模型的迭代速度并适时地让模型停 下。max_iter越大,代表步长越小,模型迭代时间越长,反之,则代表步长设置很大,模型迭代时间很短。
2.优化模型
2.1 嵌入法
调整嵌入法的参数,由于L1正则化会使得部分特征对应的参数为0,因此L1正则化可以用来做特征选择,结合嵌入法的模块SelectFromModel,我们可以很容易就筛选出 让模型十分高效的特征。注意,此时我们的目的是,尽量保留原数据上的信息,让模型在降维后的数据上的拟合效 果保持优秀,因此我们不考虑训练集测试集的问题,把所有的数据都放入模型进行降维。
1)调节SelectFromModel这个类中的参数threshold,这是嵌入法的阈值,表示删除所有参数的绝对值低于这个阈 值的特征。现在threshold默认为None,所以SelectFromModel只根据L1正则化的结果来选择了特征,即选择了所 有L1正则化后参数不为0的特征。我们此时,只要调整threshold的值(画出threshold的学习曲线),就可以观察 不同的threshold下模型的效果如何变化。一旦调整threshold,就不是在使用L1正则化选择特征,而是使用模型的 属性.coef_中生成的各个特征的系数来选择。coef_虽然返回的是特征的系数,但是系数的大小和决策树中的 feature_ importances_以及降维算法中的可解释性方差explained_vairance_概念相似,其实都是衡量特征的重要 程度和贡献度的,因此SelectFromModel中的参数threshold可以设置为coef_的阈值,即可以剔除系数小于 threshold中输入的数字的所有特征。
2.2 调逻辑回归的类LR_
通过画C的学习曲线来实现。