入门机器学习(一)--单变量线性回归
写在前面
本系列依据吴恩达机器学习课程,对每一节课进行提炼和总结,并结合课后作业进行相应的讲解。由于原课程的课后作业是用MATLAB完成的,本系列为了方便,将用python实现课后作业。
1.模型描述
以预测房价为例,训练集为:
用以下指标来对模型进行描述:
m:训练集的数目
x's:输入变量/输入特征
y‘s: 输出变量/目标变量
(x,y):一个训练样本
(x(i),y(i)):第i个训练样本
监督学习的过程:将训练数据集作为输入,进行算法的学习,然后输出一个假设函数,命名为h.即hypothesis
单变量的假设函数为:
其中的参数有两个,分别是:
2. 代价函数
单变量线性回归的代价函数为:
该代价函数也称为平方误差函数,前面的1/2m项是为了求解J函数最小值的时候方便计算。
我们目标是求得使代价函数取最小值时的参数值,即:
补充一个知识点:
代价函数,损失函数,目标函数三个函数之间的区别
损失函数(Loss Function )是定义在单个样本上的,算的是一个样本的误差。
代价函数(Cost Function )是定义在整个训练集上的,是所有样本误差的平均,也就是损失函数的平均。
目标函数(Object Function)定义为:最终需要优化的函数。等于经验风险+结构风险(也就是Cost Function + 正则化项)。
关于目标函数和代价函数的区别还有一种通俗的区别:目标函数是最大化或者最小化,而代价函数是最小化。
关于代价函数J的三维图像为:
该函数是凸函数,大多数代价函数都是凸函数,凸函数有个特点:凸函数没有局部最优解,只有全局最优解。
3. 梯度下降法
梯度下降法是求解代价函数最优化很普遍的方法,其基本思路为:
初始化参数θ,慢慢的改变参数,使代价函数J越来越小。
从图像上可以很形象地看出来梯度下降法的思路:
初始化参数θ0和θ1(如图左峰最上方一点),朝着下降最快的方向进行移动,每移动一步,就重复之前的步骤,直到到达局部最低点。如果换个起始点,可能到达的就是另一个局部最低点,如下图所示。
梯度下降法的迭代公式为:
其中j的值域为:
在该迭代公式中,
“:=”符号的意思是赋值,类似于C/C++中的“=”
赋值号左边的为下一步要达到的点,赋值号右边的为本次迭代的起始点
α为步长,也称为学习率,步长过长可能导致不收敛从而得不到结果,步长过短会延长找到最低点的时间,所以选一个合适的步长很重要。
最后一项对代价函数J求偏导带表着前进方向,如果偏导数大于0,那θ就沿着负方向移动,如果偏导数小于0,那θ就沿着正方向移动。
在此注意:
计算偏导数的时候要同步,也就是按照以下步骤计算:
并不是:
这样在计算temp1的时候,θ0已经被更新了,这样计算θ1的时候是错误的。
4. 线性回归的梯度下降
这部分主要是将梯度下降法应用到线性回归当中
其中最重要的就是关于迭代公式中偏导数的求解,下面对其求偏导的过程进行演算:
对j分情况进行求偏导:
所以梯度下降算法可以表示为:
该梯度下降法会在之后的作业练习中用来,届时它的用法会做详细的说明。