线性回归解决的问题的特点是输入多个参数,输出一个数值。
通过一些方法找出最佳的一个函数。
函数形式如:
---b:偏移量 w:权重 (1)或:
(2)还可以写成更一般的形式:
(3)
那么我们该如何评价函数的好坏呢,这时候就需要定义一个Loss函数。
通常,我们可以将Loss函数定义为
(4)
即方差,L值越小,那么函数越好。
我们要如何找到最小的L值呢?
我们先考虑一个参数w的情况,及方程为
.
我们的目的是要收敛Loss到最小,那么就可以借助L函数对w的导数来调整w的走向,此处导数可以理解为L曲线在某一点的斜率。
> 随机选取一个初始值
> 计算
,
> 重复步骤二,更新w值,直到w=0.
观察步骤二,可以发现导数为负数时,w会增加,否则减少。且绝对值越大,步长越大,参数
为步长的权重,人为干预收敛的速度。
如果有两个参数的情况怎么办呢?
如L(b,w),我们可以分别对b和w计算偏微分来得到每个参数的偏移量。参考上述步骤。
我们可以发现这种Loss函数不存在local minimal。
现在我们学会了如何在一个model上得到最小Loss。即评价一个函数的好坏。
我们可以构造更复杂的model来train数据,如(2)式。
随着model复杂度变高,training data会得到更好的结果,但是在testing data上可能会得到更差的结果。
这就是overfitting(过拟合)。
解决过拟合可以通过选取合适的model。
还可以给Loss函数增加一个平滑度权值。如
.
此函数弱化了计算出的方差的影响,强调了原本的w值。
这样设计loss函数,我们希望方差小的同时参数也小。这样可以弱化输入数据的变化,使得model对于输入数据的变化变得不敏感。起到正则化的效果。
有时候我们可能会发现无论怎么选取model都无法得到较低的Loss,那么就需要考虑是否有其它的影响因子我们没有考虑进去。
Error来自于什么地方呢?
来自于两个地方,bias和variance.
bias就像你在打靶时,没有瞄准到靶心,从而导致弹痕集中分布在偏离靶心的一个区域内。
variance就是你瞄准到了靶心,但是由于一些机械故障,风速等影响,导致弹痕分布在靶心周围的区域内。
我们要如何找到靶心呢?
问题可以转化为计算mean(
)的值。对于一个有n个点的数据集,我们可以计算出这个数据集的平均值m。注意
.那么k个不同的数据集会有k个不同的m,对这k个m再取平均值,就得到了
。此时的
是unbiased(无偏)的。
如何计算数据集的离散程度呢?
我们记数据集的variance为
.设m为数据集中n个点的平均值,
为方差,即
.
Biased estimator:
(此处不懂)
越简单的model,viarance越小,反之越大。
因为复杂model受data影响较小。
那对于Bias恰恰相反,越简单的model,Bias越大。
因为简单model包含的范围较小,很难将
包含进去。反之,越复杂的model包含范围越大,越容易将
包含进去。
所以就会出现这种情况,当随着model越来越复杂,bias变得越来越小,viarance变得越来越大。
我们就要找到一个平衡点,综合考虑bias和viarance,使得总体error最小。
如果model不能很好的拟合training data,你就会有较大的bias,这就是欠拟合(underfitting)。
如果model可以很好的拟合training data ,但是再testing data上有较高的error,你可能有较大的viarance,这就是过拟合(overfitting)。
For bias: 重新设计你的model
> 增加更多的features。
> 增加model的复杂度。
For viarance:
> 更多data: 很有效,但通常很难收集更多的data。
> Regularization(平滑度):强迫函数曲线变平滑,可能会伤害bias,使得函数不包含
.
model选择技巧
(1)误区
当model在testing data上表现较好时,并不代表在real data上也会有较好的表现。
(2)cross validation(交叉验证)
将training data 分为两部分:training data 和 validation data。用validation data 来选择你的model。放到testing data上测试时不要轻易更改你的model,参考上述误区。
(3)N-fold cross validation
将training data分为3部分,选取其中一个作为验证集,剩下2个部分作为training data。
这样会有3中排列组合。如图
我们可以将所有的model在每一种组合上train并算出error,最后每种model会有3个error,计算average error。
选取最小的average errord 的model,在整个training Set上train,最后拿到testing data 上测试。如图: