分类和回归的区别:
分类,我们预测一个状态,
回归,我们预测一个值。
线性回归是:通过已有的数据,拟合出一条符合它的直线,用来预测其他可能出现的值。
如何拟合一条好的直线呢?
就是是如何使一条直线更加的靠近一个点呢?
技巧方法
- 绝对值技巧:
先随机生成一条直线 y = w 1 x + w 2 y=w1x+w2 y=w1x+w2,w1是斜率,w2是截距,我们通过调整这两个参数来使这条直线逐渐靠近一个原始的点(p,q)。
如何慢慢调整这两个参数呢?
我们把 w 1 + p w1+p w1+p, w 2 + 1 w2+1 w2+1(特定的一种调整手段),直线调整方程为: y = ( w 1 + ) x + ( w 2 + 1 ) y=(w1+)x+(w2+1) y=(w1+)x+(w2+1)后来发现这样改变直线移动的幅度还是很大,我们想到设置一个 α \alpha α变量控制w1和w2的变化,就是:
把原来的w1变为: w 1 + p α w1+p\alpha w1+pα,
把原来的w2变为: w 2 + 1 α w2+1\alpha w2+1α。
直线调整方程为: y = ( w 1 + p α ) x + ( w 2 + 1 α ) y=(w1+p\alpha)x+(w2+1\alpha) y=(w1+pα)x+(w2+1α),这样直线的变化幅度就会变小很多。
这里的p就是坐标值的p,我们改变直线斜率的时候可以不用考虑正负问题,因为p的正负决定了斜率的正负。 α \alpha α我们给他起了个名字,叫学习率。
- 平方技巧:
上面讲的绝对值技巧只涉及到p也就是一个点的横坐标,如果把纵坐标的变化也加进去会移动的更加精确.
点到直线的纵坐标距离为: q − y q-y q−y
把原来的w1变为: w 1 + p α ( q − y ) w1+p\alpha(q-y) w1+pα(q−y),
把原来的w2变为: w 2 + 1 α ( q − y ) w2+1\alpha(q-y) w2+1α(q−y)。
直线调整方程为: y = ( w 1 + p α ( q − y ) ) x + ( w 2 + 1 α ( q − y ) ) y=(w1+p\alpha(q-y))x+(w2+1\alpha(q-y)) y=(w1+pα(q−y))x+(w2+1α(q−y)),这样直线的变化就会更加精确。
最小化函数值方法
- 梯度下降
我们想继续寻找一条最合适的直线来拟合很多个点,这里会有另一个问题,衡量直线好坏的标准(误差越小。拟合的越好)。我们用所有点到直线的误差和(第4和第5个知识点)表示(误差函数)。
那梯度下降又是干啥用的?
我们可以把它理解为一种方法,这个方法可以帮助我们找到一个函数的最值。
我们找谁的最值呢?
找误差函数的最值,而且是最小值。我们使用梯度下降的方法不断的求误差函数值,直到误差函数达到最小值。
误差值函数如下图所示:
我们选择下降最快的方向调整绿色线的曲率,也就是 w i − > w i − ∂ ∂ w i e r r o r wi->wi-\frac{\partial}{\partial w_i}error wi−>wi−∂wi∂error。进行此操作直到error取值到达最小值附近。
逐个地在每个数据点应用平方(或绝对)误差,并重复这一流程很多次。叫做随机梯度下降法。
同时在每个数据点应用平方(或绝对)误差,并重复这一流程很多次。叫做批量梯度下降法。
-
平均绝对误差
所有点到直线垂直距离和是: ∑ i = 1 m ∣ y − y ^ ∣ \sum_{i=1}^{m}|y-\hat y| ∑i=1m∣y−y^∣,
除以点的个数m,就是平均绝对误差了: e r r o r = 1 m ∑ i = 1 m ∣ y − y ^ ∣ error=\frac 1m\sum_{i=1}^{m}|y-\hat y| error=m1∑i=1m∣y−y^∣
这个公式就是我们上图的误差函数的一个具体表示,我们可以使用梯度下降的方法求得这个公式的最小值。 -
平方误差
为了不计算绝对值,我们采取对距离求平方的方法,使得误差函数依然能够衡量误差大小且不用求绝对值。
那么所有点到直线垂直距离和误差就被改成了: ( y − y ^ ) 2 {(y-\hat y)}^2 (y−y^)2,
这时除以的个数就被改为2m了(这里为什么是2m?求导所得,至于为什么求导看第6点),均方误差就为: e r r o r = 1 2 m ∑ i = 1 m ( y − y ^ ) 2 error=\frac 1{2m}\sum_{i=1}^{m}{(y-\hat y)}^2 error=2m1∑i=1m(y−y^)2
我们依然可以使用梯度下降的方法求得这个公式的最小值。 -
最小化误差函数
如果看具体的例子,我们就能发现,上面讲的两个技巧方法就是平均绝对误差和均方误差的一个特例。他们讲的是同一个东西。具体推到过程可以自己尝试。 -
绝对值误差 VS 平方误差
有时候只用一种误差计算方法是判断不出来误差好坏的,如下图所示
这幅图的平均绝对误差ABC三条直线都一样,但是计算其平方误差时,发现B的平方误差较小。因为均方误差是个2次函数。
-
高纬度
当输入的数据有两个,输出结果为一个时,我们在进行预测的时候就不是直线的关系了,绘出图来就是三维的,两个输入一个输出,预测的方程也由直线方程变为了平面方程。有三个可变参数。
同理,更高维的输入输出我们或许用图形表示不了,但依然可以用公式表示。 -
解方程
知道方程之后,我们就可以用对方程求偏导的方式求得最值了。
此时使用方程求解依旧会出现相关问题,当方程个数很多时,求解就会变慢。
我们甚至需要用矩阵来求解。 -
线性回归注意事项
- 有些训练的数据不是线性关系,不适合线性回归
- 如果数据集中存在异常值,最终的结果会有偏差
-
对于明显不是直线的数据集,我们可以用多项式来拟合。
-
正则化
现在我们看另外一种状况,下图是两种拟合线,一种是线性拟合线,一种是多项式拟合。
第一种有错误,第二种没错误,也就是第二种的误差更小。
但是,如果按照划分来看,第二种明显是过拟合,不可取。
如何在误差函数中体现过拟合呢?
我们可以看到,第一种的参数很小,第二种的参数很多很大,所有把参数的的复杂度也算作是误差,这样简单的模型就会比复杂的模型更好了。
又如果,我们需要手动调节模型的复杂程度,这该怎么办呢?
设置一个 λ \lambda λ乘以参数的值, λ \lambda λ越小惩罚力度越小,越又可能是复杂的模型。
这叫正则化。 -
神经网络回归
假设我们使用分段函数来拟合数据集
就可以类比于神经网络的例子了。
此神经网络最后的Sigmoid是把原来的值转换到0到1之间使之达到分类的效果,如果不使用Sigmoid函数,就是预测值的作用了。