别人不讲道理
不是我们跟着不讲道理的理由
1 模型评估
希望fθ(x)对未知数据x输出的预测值尽可能正确。
如何测量预测函数fθ(x)的正确性,也就是精度呢?
观察函数的图形,看它能否很好地拟合训练数据:
我们需要能够定量地表示机器学习模型的精度。
2 交叉验证
怎么评估模型呢?
把获取的全部训练数据分成两份:一份用于测试,一份用于训练,然后用测试数据来评估模型。
一般情况下 训练数据 : 测试数据 = 7 :3 或者 8 :2
回归问题的验证
把测试数据考虑进来:
不考虑测试数据:
可以看出,二次函数能更好地拟合数据,如果只考虑测试数据,那么训练的模型只对训练数据是正确的。
模型评估就是像这样检查训练好的模型对测试数据你拟合情况。
对于回归问题,只要在训练好的模型上计算测试数据的误差的平方,再取平均值就可以了:
这个值被称为均方误差或者MSE,全称 Mean Square Error。这个误差越小,精度就越高,模型也就越好。
分类问题的验证
与回归问题一样,先考虑数据的分配:
假设在逻辑回归的情况下,θTx是简单的一次函数,那么只根据训练数据进行训练后,决策边界应该是这样的:
假如θTx更加复杂,可能就会像这样紧贴着训练数据进行分类:
可以对训练数据完美地进行分类,却完全忽视了测试数据。
所以在分类的时候,还必须检查模型是否能正确。
回到图像的分类问题,我们是根据分类是否成功就会有下面四种情况
1. 图像是横向的,被正确分类了
2. 图像被分类为横向,但实际上不是横向的
3. 图像不是横向的,被正确分类了
4. 图像被分类为非横向,但实际上是横向的
概括起来:
可以使用表里的4个记号来计算分类的精度。精度的英文是Accuracy,它的计算表达式是这样的:
假如100个数据中80个被正确地分类了,那么精度就是:
精确率和召回率
但是只看精度,并不一定能体现这个模型的好坏。
比如下面这种极端情况:
假设有100个数据,其中95个是Negative。那么,哪怕出现模型把数据全部分类为Negative的极端情况,Accuracy值也为0.95,也就是说模型的精度是95%。
遇到这种情况,只看整体的精度看不出来什么问题。
引入别的指标的示例:
可以得到:
首先我们来看第一个指标——精确率。它的英文是Precision。
被分类为Positive的数据中,实际就是Positive的数据所占的比例:
这个值越高,说明分类错误越少。
还有一个指标是召回率,英文是Recall。
在Positive数据中,实际被分类为Positive的数据所占的比例:
这个值越高,说明被正确分类的数据越多。
基于这两个指标来考虑精度是比较好的。
F值
精确率和召回率一个高一个低,需要我们取舍,有些麻烦。
所以就出现了评定综合性能的指标F值。
F值的表达式变形,写成下面这样,二者是相同的:
除F1值之外,还有一个带权重的F值指标:
把全部训练数据分为测试数据和训练数据的做法称为交叉验证。
在交叉验证的方法中,尤为有名的是K折交叉验证:
- 把全部训练数据分为k份
- 将k -1 份数据用做训练数据,剩下的一份用做测试数据
- 每次更换训练数据和测试数据,重复进行k次交叉验证
- 最后计算k个精度的平均值,把它作为最终的精度
但是,在训练数据量比较大的情况下,会比较花时间,所以我们必须要确定一个合适的k值。
3 正则化
过拟合
模型只能拟合训练数据的状态被称为过拟合,英文是overfitting。
有几种方法可以避免过拟合:
1. 增加全部训练数据
2. 使用简单的模型
3. 正则化
正则化的方法
回归时候提到的目标函数:
向这个目标函数增加下面这样的正则化项:
变成:
对这个新的目标函数进行最小化,这种方法就称为正则化。
正则化的效果
首先把函数分成两个部分:
C(θ)
R(θ)
两个函数之和E(θ)=C(θ)+R(θ)
本来是在θ1=4.5处最小,现在是在θ1=0.9处最小。
这就是正则化的效果。它可以防止参数变得过大,有助于参数接近较小的值。
参数的值变小,意味着该参数的影响也会相应地变小。比如,有这样的一个预测函数fθ(x)。
极端一点,假设θ2=0,这个表达式就从二次变为一次了,也就是说没有x2项了。意味着本来是曲线的预测函数变为直线了。
这正是通过减小不需要的参数的影响,将复杂模型替换为简单模型来防止过拟合的方式。
就是为了防止参数的影响过大,在训练时要对参数施加一些……一些惩罚。
一开始就提到的λ,是可以控制正则化惩罚的强度。
比如令λ=0,那就相当于不使用正则化:
反过来λ越大,正则化的惩罚也就越严厉:
分类的正则化
逻辑回归的目标函数:
分类也是在这个目标函数中增加正则化项就行了,道理是相同的。
包含正则化项的表达式的微分
因为是加法,所以对各部分进行偏微分:
最终的微分结果:
把这个微分结果代入到参数更新表达式里去:
一般不对θ0应用正则化。R(θ)对θ0微分的结果为0,所以j=0时表达式4.3.14中的λθj就消失了。因此,实际上我们需要像这样区分两种情况:
逻辑回归的流程也是一样
4 学习曲线
前面我们聊了很多过拟合的话题,而反过来又有一种叫作欠拟合的状态,用英文说是underfitting。在这种情况下模型的性能也会变差。
比如用直线对图中这种拥有复杂边界线的数据进行分类的情况,无论怎样做都不能很好地分类,最终的精度会很差。
区分过拟合与欠拟合
考虑一下使用这样的10个训练数据进行回归的场景
这里我们先假设fθ(x)是一次函数。接着,只随便选择其中的2个数据用作训练数据:
在这个状态下,2个点都完美拟合,误差为0。
把10个数据都用来训练:
如果模型过于简单,那么随着数据量的增加,误差也会一点点变大。换句话说就是精度会一点点下降。
以数据的数量为横轴、以精度为纵轴的图上,形状大体上就是这样的:
一开始精度很高,但随着数据量的增加,精度一点点地变低了。
接下来用测试数据来评估一下。假设在刚才的10个训练数据之外,还有测试数据。我们用这些测试数据来评估各个模型,之后用同样的方法求出精度,并画成图。
训练数据较少时训练好的模型难以预测未知的数据,所以精度很低;反过来说,训练数据变多时,预测精度就会一点点地变高。
将两份数据的精度用图来展示后,如果是这种形状,就说明出现了欠拟合的状态。也有一种说法叫作高偏差,指的是一回事。
图中需要注意的点在这里:
而在过拟合的情况下,图是这样的:
随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。
图中需要注意的点在这里:
像这样展示了数据数量和精度的图称为学习曲线。
通过学习曲线判断出是过拟合还是欠拟合之后,就可以采取相应的对策以便改进模型了。