机器学习笔记--线性回归

我们学习一样本领之前得知道它是用来做什么,先假设一个问题待解决,自己花点时间仔细想一想如何解决这个问题,也许你的思路更加先进优秀!

先思考,再看答案!

1、先假设一个要解决的问题

有一组数据集,包含房子大小、房价,要求根据这组数据集,输入房子大小,输出房价。

image.png
分析

将数据集可视化如上图,房价基本上和房子大小成正比,希望画一条直线来拟合正比关系。

2、使用一条直线拟合样本数据集

房子大小为横坐标,房价为纵坐标,房价与大小的关系为:
image.png
上述函数称为:假设函数(hypothesis)
image.png
那么此问题就变成了寻找参数θ0和θ1的最优解。

如何寻找这两个参数呢,如何确认找到的参数是最优解呢?

3、如何衡量拟合程度

我们希望寻找一个方法来衡量假设函数是否符合样本,将假设函数在样本上画出:


image.png

y=房价,x=房子大小
那么在某一确定的房子大小x,样本房价y和假设函数的距离为:


image.png

我们希望距离越大则受到的惩罚越大,加入平方:
image.png

所有样本数据,给定房子大小x,y与假设函数的距离为:


image.png

实际上数学上称为均方误差MSE(Mean Square Error),是回归损失函数中最常用的误差,它是预测值f(x)与目标值y之间差值平方和的均值,其公式如下所示:


image.png

我们直接将MSE作为衡量拟合程度的函数
image.png
在机器学习中被成为: 损失函数(cost function 或 loss function)

有了损失函数来衡量假设函数的拟合程度,那么问题来了,如何找到参数θ0和θ1的最优解呢?
有一种方法:把实数范围内的θ0和θ1都试一遍,然后比较哪一组θ0和θ1的损失函数最小。额。。。那么,还有什么好方法吗?
为啥损失函数中求和后要除以2m,不是m吗?其实求最小值加入任何常数运算都不影响结果,2m方便后面梯度下降计算

4、如何找到θ0和θ1

实际上,如果我们遍历取值范围内所有的θ0和θ1,将θ0和θ1作为x、y,将损失函数J(θ0, θ1)作为竖直轴z,作图得:


image.png

那么聪明的你一定可以想到,损失函数关于θ0和θ1求偏导,就可以从任意一点找到通往最小极值点的方向。再定义一个步长α,这样就可以从任意一点一步一步走到最小极值点。


image.png

其中θ0和θ1需要同时求偏导,然后乘以步长α再同时更新θ0和θ1,这是因为如果先更新了θ0那么θ1的偏导会计算错误,反之亦然。
image.png

现在已经找到了求关于损失函数中参数θ0和θ1的最优解方法,这就是:

梯度下降算法(Gradient descent algorithm)

5、总结

为了根据房子大小预测房价,我们根据已有数据集样本信息,给出假设函数:


image.png

为了确定假设函数中的参数:


image.png

我们引用均方误差MSE作为损失函数:
image.png

为了求解最小损失函数:


image.png

我们采用梯度下降算法:
image.png

image.png

至此所有问题解决,我们可以写程序来实现所有功能。

6、思考

Q:假设函数为什么是直线,而不是曲线?
A:假设函数有很多种,上面举例是线性回归问题。假设函数的选取取决于要解决的问题,另外一个重要参考标准是梯度下降求偏导的计算量要小。

Q:还有其他的损失函数吗?
A:损失函数的选取取决于假设函数,如果假设函数是环装这时损失函数求点对点的距离显然就不合适。实际考虑到性能生产中的lost function一般都很简单,能简化则简化,能近似则近似。

Q:如果假设函数比较复杂,导致损失函数非碗状而是有多个极值点,那么梯度下降失效了吗?

image.png

A:没有失效,多找一些点多求几次极值点,比较后找到最小极值点。选择的点越多则找到最小极值点的概率越大,不过这将显著提升计算量。我们希望损失函数是凸函数(只有一个极值点),以便减少计算量。线性回归的损失函数是凸函数,只有一个极值点。

Q:4)如果梯度下降的步长过大,下降过程中错过极值点如何处理?
A:这个步长成为学习率,学习率较大则计算量小,但是有在极值点左右摇摆无法收敛的问题。方案一:动态学习率,约收敛学习率越小;方案二:使用不同尺度的学习率由大到小多次计算,直至收敛。

Q:5)上面描述了两个参数的解题方法,此方法是否对多个参数通用?
A:通用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容