文章目录
如何测量预测函数fθ(x)的正确性,也就是精度。
一、 交叉验证
1. 回归问题的验证
把获取的全部训练数据分成两份:一份用于测试,一份用于训练。然后用前者来评估模型。
关于点击量预测的回归问题,我们现在有10个数据,其中测试数据和训练数据可以这样分配:
对于回归的情况,只要在训练好的模型上计算测试数据的误差的平方,再取其平均值就可以了。假设测试数据有n个,那么可以 这样计算:
这个值被称为均方误差或者MSE,全称Mean Square Error。这个误差越小,精度就越高,模型也就越好。
2. 分类问题的验证
由于回归是连续值,所以可以从误差入手, 但是在分类中我们必须要考虑分类的类别是否正确。
回忆一下逻辑回归的内容,关于分类是否成功就会有下面4种情况:
设横向的情况为正、非横向的情况为负,那么一般来说,二分类的结果可以用这张表来表示:
分类结果为正的情况是Positive、为负的情况是Negative。分类成功为True、分类失败为False。
精度的英文是Accuracy,它的计算表达式是这样的:
用测试数据来计算这个值,值越高精度越高,也就意味着 模型越好。
3. 精确率和召回率
一般来说,只要计算出这个Accuracy值,基本上就可以掌握分类结果整体的精度了。但是有时候只看这个结果会有问题,所以还有别的指标。
假设图中的圆点是Positive数据、叉号是 Negative 数据,考虑一下数据量极其不平衡的情况:
假设有100个数据,其中95个是Negative。那么,哪怕出现模型 把数据全部分类为Negative的极端情况,Accuracy值也为0.95, 也就是说模型的精度是95%。但是不管精度多高,一个把所有数据都分类为Negative的模型, 不能说它是好模型。
所以要引入别的指标。这些指标稍微有点复杂,结合具体的数据来看更好理解,用下面的例子说明
首先我们来看第一个指标——精确率。它的英文是Precision
这个指标只关注TP和FP。根据表达式来看,它的含义是在被分 类为Positive 的数据中,实际就是Positive的数据所占的比例
实际地代入数值来计算看下:
这个值越高,说明分类错误越少。拿这个例子来说,虽然被分类为Positive 的数据有3个,但其中只有1个是分类正确的。所以计算得出的精确率很低。
另一个指标是召回率,英文是Recall:
嗯,这个指标只关注TP和FN。根据表达式来看,它的含义是在Positive 数据中,实际被分类为Positive的数据所占的比例。
这个值越高,说明被正确分类的数据越多。拿这个例子来说,虽然Positive 数据共有5个,但只有1个被分类为Positive。所以计算得出的召回率也很低。
总结:基于这两个指标来考虑精度是比较好的。不过一般来说,精确率和召回率会一个高一个低,需要我们取舍。
4. F值
假设现在有两个模型, 它们的精确率和召回率是这样的:
看一下两个模型的平均值,会发现模型B的更高。但它是把所有数据都分类为Positive的模型,精确率极低,仅为0.02,并不能说它是好模型。所以就出现了评定综合性能的指标F值(Fmeasure)
Precision是前面说的精确率,Recall是召回率。精确率和召回率只要有一个低,就会拉低F值。
5. K折交叉验证
把全部训练数据分为测试数据和训练数据的做法称为交叉验证,交叉验证的方法中,尤为有名的是K折交叉验证
把全部训练数据分为K份
将K−1份数据用作训练数据,剩下的1份用作测试数据
每次更换训练数据和测试数据,重复进行K次交叉验证
最后计算K个精度的平均值,把它作为最终的精度
k=4时:
二、正则化
1. 回归时的正则化
模型只能拟合训练数据的状态被称为过拟合, 英文是overfitting
有几种方法可以避免过拟合。
1)增加全部训练数据的数量
2)使用简单的模型
3)正则化
首先,重要的是增加全部训练数据的数量。另外,使用更简单的模型也有助于防止过拟合。
将回归时用到的目标函数改写为:
添加的R(θ)就是正则项,也叫惩罚项,对这个新的目标函数进行最小化,这种方法就称为正则化。
原理:
C(θ)和R(θ)相加之后就是新的目标函数,所以实际地把这两个函数的图形画出来,加起来看看。不过参数太多就画不出图来了,所以这里只关注θ1。而且为了更加易懂,先不考虑λ,假设它的形状是这样的:最小值在θ1=4.5左右
接下来画出R(θ),它就相当于,所以是过原点的简单二次函数
把两个图形相加后得到:(最小值变成是θ1 =0.9)
与加正则化项之前相比,θ1更接近0了,这就是正则化的效果。它可以防止参数变得过大,有助于参数接近较小的值。虽然我们只考虑了θ1,但其他θj参数的情况也是类似的。参数的值变小,意味着该参数的影响也会相应地变小,比如,有 这样的一个预测函数fθ(x):
假设θ2=0,这个表达式就从二次变为一次了,这正是通过减小不需要的参数的影响,将复杂模型替换为简单模型来防止过拟合的方式。
一开始就提到的λ,是可以控制正则化惩罚的强度,λ越大,正则化的惩罚也就越严厉。
2. 分类时的正则化
分类也是在目标函数中增加正则化项:
对数似然函数本来以最大化为目标。但是,这次想让它变成和回归的目标函数一样的最小化问题,所以加了负号。这样就可以像处理回归一样处理它。反转了符号之后,在更新参数时就要像回归一样,与微分的函数的符号反方向移动才行。
包含正则化项的表达式的微分:
结果是这样:
更新参数表达式是这样:
一般不对θ0应用正则化。R(θ)对θ0微分的结果为0,所以需要像这样区分两种情况。
这样的方法叫L2正则化。L1正则化方法,它的正则化项R是这样的:
L1 正则化的特征是被判定为不需要的参数会变为0,从而减少变量个数。而L2正则化不会把参数变为0。前面提到的二次式变为一次式的例子,用L1正则化就可以实现。L2 正则化会抑制参数,使变量的影响不会过大,而L1会直接去除不要的变量。使用哪个正则化取决于要解决什么问题,不能一概而论。
三、学习曲线
1. 欠拟合
欠拟合,用英文说是underfitting,与过拟合相反的状态,是没有拟合训练数据的状态。
比如用直线对图中这种拥有复杂边界线的数据进行分类的情况(下图所示),无论怎样做都不能很好地分类,最终的精度会很差,出现这种情况的主要原因就是模型相对于要解决的问题来说太简单
2. 区分过拟合与欠拟合
怎么样才能判断到底是过拟合还是欠拟合,我们以数据的数量为横轴、以精度为纵轴,然后把用于训练的数据和用于测试的数据画成图来看一看,具体来看一个例子,考虑一下使用10个训练数据进 行回归的场景:
随便选2个数据,然后看一看只用这2个数据进行训练,fθ(x)的形状:
在这个状态下,2个点都完美拟合,误差为0,这次把10个数据都用来训练,fθ(x)的形状:
随着数据量的增加,误差也会一点点变大。换句话说就是精度会一点点下降。把这种情况画在刚才所说的以数据的数量为横轴、以精度为纵轴的图上,形状大体上就是这样的:
接下来用测试数据来评估一下。假设在刚才的10个训练数据之外,还有测试数据。我们用这些测试数据来评估各个模型,之后用同样的方法求出精度,并画成图。
训练数据较少时训练好的模型难以预测未知的数据,所以精度很低;反过来说,训练数据变多时,预测精度就会一点点地变高。将两份数据的精度用图来展示后,如果是这种形状,就说明出现了欠拟合的状态。也叫作高偏差。
而在过拟合的情况下,图是如下所示。这也叫作高方差。随着数据量的增加,使用训练数据时的精度一直很高,而使用测试数据时的精度一直没有上升到它的水准。
像这样展示了数据数量和精度的图称为学习曲线。通过学习曲线判断出是过拟合还是欠拟合之后,就可以采取相应的对策以便改进模型。