Google机器学习速成课-03
九、逻辑回归
许多问题需要将概率估算值作为输出。然后通过下两种方式之一使用返回的概率:
(1)按原样使用概率
假设我们创建一个逻辑回归模型来预测狗在半夜发出叫声的概率,即输出为概率p(bark | night)。
若模型预测 p(bark | night) 的值为 0.05,那么一年内,狗的主人应该被惊醒约 18 次。
(2)转换成二元类别
将逻辑回归输出映射到二元分类问题的解决方案,二元分类问题的目标是正确预测两个可能的标签(例如,“垃圾邮件”或“非垃圾邮件”)中的一个。
计算概率
逻辑回归模型如何确保输出值始终落在 0 和 1 之间?
巧合的是,S 型函数生成的输出值正好具有这些特性,其定义为:
图9.1 S型函数曲线如果 图中z 表示使用逻辑回归训练的模型的线性层的输出,则该S型函数会生成一个介于 0 和 1 之间的y值(概率)。
根据该S型函数的反函数:
z 可定义为标签“1”(例如“狗叫”)的概率除以标签“0”(例如“狗不叫”)的概率得出的值的对数,因此z 也称为对数几率。
逻辑回归的损失函数
逻辑回归的损失函数是对数损失函数,定义为
-y是有标签样本中的标签。由于这是逻辑回归,因此y的每个值必须是 0 或 1。
-y'是对于特征集x的预测值(介于 0 和 1 之间)。
实际上,最大限度地降低损失函数的值会生成最大的似然估计值。
逻辑回归中的正则化
如果没有正则化,逻辑回归的渐近性会不断促使损失在高维度空间内达到 0。大多数逻辑回归模型会使用以下两个策略之一来降低模型复杂性:
-L2正则化。
-早停法,即限制训练步数或学习速率。
十、分类
(1)指定阈值
逻辑回归返回的是概率。可以“原样”使用返回的概率(例如,用户点击此广告的概率为 0.00023),也可以将返回的概率转换成二元值(例如,这封电子邮件是垃圾邮件)。
为了将逻辑回归值映射到二元类别,您必须指定分类阈值(也称为判定阈值)。如果值高于该阈值,则表示“垃圾邮件”;如果值低于该阈值,则表示“非垃圾邮件”。人们往往会认为分类阈值应始终为 0.5,但阈值取决于具体问题,因此您必须对其进行调整。
注意:“调整”逻辑回归的阈值不同于调整学习速率等超参数。在选择阈值时,需要评估您将因犯错而承担多大的后果。例如,将非垃圾邮件误标记为垃圾邮件会非常糟糕。不过,虽然将垃圾邮件误标记为非垃圾邮件会令人不快,但应该不会让您丢掉工作。
(2)准确率
准确率是指我们的模型预测正确的结果所占的比例。
对于二元分类,可以根据正类别和负类别按如下方式计算准确率:
其中,TP = 真正例,TN = 真负例,FP = 假正例,FN = 假负例。(T:判断正确,P:判断为正例)
但是,当使用分类不平衡的数据集(比如正类别标签和负类别标签的数量之间存在明显差异)时,单单准确率一项并不能反映全面情况。
(3)精确率和召回率
精确率定义如下:,即在被识别为正类别的样本中,确实为正类别的比例是多少?
如果模型的预测结果中没有假正例,则模型的精确率为 1.0。
召回率定义如下:,即在所有正类别样本中,被正确识别为正类别的比例是多少?
如果模型的预测结果中没有假负例,则模型的召回率为 1.0。
精确率和召回率往往是此消彼长的情况。也就是说,提高精确率通常会降低召回率值,反之亦然。
(4)ROC 曲线
ROC 曲线(接收者操作特征曲线)是一种显示分类模型在所有分类阈值下的效果的图表。该曲线绘制了以下两个参数:真正例率、假正例率。
真正例率
假正例率
ROC 曲线用于绘制采用不同分类阈值时的 TPR 与 FPR。降低分类阈值会导致将更多样本归为正类别,从而增加假正例和真正例的个数。
为了计算 ROC 曲线上的点,我们可以使用不同的分类阈值多次评估逻辑回归模型,但这样做效率非常低。有一种基于排序的高效算法可以为我们提供此类信息,这种算法称为曲线下面积。
曲线下面积AUC表示“ROC 曲线下面积”。
根据每个测试样本属于正样本的概率值从小到大排序,依次将样本的概率值作为阈值。每次选取一个不同的阈值,就可以得到一组FPR和TPR,即ROC曲线上的一点。
曲线下面积因以下两个原因而比较实用:
-曲线下面积的尺度不变。它测量预测的排名情况,而不是测量其绝对值。
-曲线下面积的分类阈值不变。它测量模型预测的质量,而不考虑所选的分类阈值。
不过,这两个原因都有各自的局限性,这可能会导致曲线下面积在某些用例中不太实用:
-并非总是希望尺度不变。例如,有时我们非常需要被良好校准的概率输出,而曲线下面积无法告诉我们这一结果。
-并非总是希望分类阈值不变。在假负例与假正例的代价存在较大差异的情况下,尽量减少一种类型的分类错误可能至关重要。例如,在进行垃圾邮件检测时,您可能希望优先考虑尽量减少假正例(即使这会导致假负例大幅增加)。对于此类优化,曲线下面积并非一个实用的指标。
(5)预测偏差
逻辑回归预测应当无偏差。即“预测平均值”应当约等于“观察平均值”。
预测偏差指的是这两个平均值之间的差值。
如果出现非常高的非零预测偏差,则说明模型某处存在错误,因为这表明模型对正类别标签的出现频率预测有误。
造成预测偏差的可能原因包括:
-特征集不完整
-数据集混乱
-模型实现流水线中有错误
-训练样本有偏差
-正则化过强
通过对学习模型进行后期处理来纠正预测偏差,即通过添加校准层来调整模型的输出,从而减小预测偏差。但是,添加校准层并非良策。
分桶偏差和预测偏差
在检查预测偏差时,无法仅根据一个样本准确地确定预测偏差;必须在“一大桶”样本中检查预测偏差。也就是说,只有将足够的样本组合在一起以便能够比较预测值(例如 0.392)与观察值(例如 0.394),逻辑回归的预测偏差才有意义。
可以通过以下方式构建桶:以线性方式分解目标预测、构建分位数。
下图表示某个特定模型的校准曲线。每个点表示包含 1000 个值的分桶。
图10.1 校准散点图x 轴表示模型针对该桶预测的平均值。
y 轴表示该桶的数据集中的实际平均值。
两个轴均采用对数尺度。
为什么只有模型的某些部分所做的预测如此糟糕?以下是几种可能性:
-训练集不能充分表示数据空间的某些子集。
-数据集的某些子集比其他子集更混乱。
-该模型过于正则化。(不妨减小lamda的值。)
十一、稀疏性正则化
稀疏矢量通常包含许多维度。创建特征组合会导致包含更多维度。由于使用此类高维度特征矢量,因此模型可能会非常庞大,并且需要大量的 RAM。
在高维度稀疏矢量中,最好尽可能使权重正好降至 0。正好为 0 的权重基本上会使相应特征从模型中移除。将特征设为 0 可节省 RAM 空间,且可以减少模型中的噪点。
以一个涵盖全球地区(不仅仅只是涵盖加利福尼亚州)的住房数据集为例。如果按分(每度为 60 分)对全球纬度进行分桶,则在一次稀疏编码过程中会产生大约 1 万个维度;如果按分对全球经度进行分桶,则在一次稀疏编码过程中会产生大约 2 万个维度。这两种特征的特征组合会产生大约 2 亿个维度。这 2 亿个维度中的很多维度代表非常有限的居住区域(例如海洋里),很难使用这些数据进行有效泛化。
若为这些不需要的维度支付 RAM 存储费用就太不明智了。
因此,最好是使无意义维度的权重正好降至 0,这样我们就可以避免在推理时支付这些模型系数的存储费用。
L2 正则化可以使权重变小,但是并不能使它们正好为 0.0。
L0正则化可以减少模型中的非零系数值的计数。只有在模型能够与数据拟合时增加此计数才有意义。但它会将我们的凸优化问题变为非凸优化问题,即 NP困难。
L1 正则化这种正则化项的作用类似 L0,但它具有凸优化的优势,可有效进行计算。因此,可以使用 L1 正则化使模型中很多信息缺乏的系数正好为 0,从而在推理时节省 RAM。
L1和 L2正则化
L2和 L1采用不同的方式降低权重:
-L2会降低”权重的平方“。
-L1会降低 “权重的绝对值”。
因此,L2和 L1具有不同的导数:
L2的导数为 “2 * 权重”。
L1的导数为“ k”(一个常数,其值与权重无关)。
图11.1 L1和L2正则化对权重网络的影响从 L2正则化转换到 L1正则化之后,测试损失与训练损失之间的差值明显减少。
从 L2正则化转换到 L1正则化之后,所有已知权重都有所减少。
增加 L1正则化率一般会减小已知权重;不过,如果正则化率过高,该模型便不能收敛,损失也会很高。
注意,L1 正则化可能会使以下类型的特征的权重正好为 0:
-信息缺乏的特征。
-不同程度的信息丰富的特征。
-与其他类似的信息丰富特征密切相关的信息丰富特征。