一.回归算法是啥子?
回归算法是一种有监督算法(有监督是指有确定标签(Y))
用来建立“解释”变量(自变量X)和观测值(因变量Y)之间的关系;从机器学习的角度来讲,用于构建一个算法模型(函数)来做属性(X)与标签(Y)之间的映射关系,在算法的学习过程中,试图寻找一个函数使得参数之间的关系拟合性最好。回归算法中算法(函数)的最终结果是一个连续的数据值,输入值(属性值)是一个d维度的属性(数值向量)
二.算法原理
1.最简单的单变量线性回归算法
针对数据集x跟y,预测函数会根据输入的特征输出一个预测值h(x),其输入和输出的函数关系假设如下:
从函数角度来说这是一条直线,表达一个线性关系,事实上我们的任务是构造一个函数,用来拟合数据集中输入特征x与输出值y,同时使得通过预测函数计算出来的值与真实值y的整体误差最小,构造函数的关键是找到合适的跟,跟称为模型参数.
假设我们有如下数据集:
特征x:1,2,3,4 输出y:4,6,10,15
假设模型参数=1, =3,则模型函数为,针对数据集中的第一个样本,输入为1,模型预测值为4,与数据真实值吻合,对于第二个样本,输入为二,模型预测值为7,实际数据值为6,可以看出误差为1,模型参数求解过程就是找出一组最合适的模型参数跟,以便能最好的拟合数据集.
1.1成本函数
单变量线性回归算法的成本函数是:
(m个样本求和)
其中,是预测值与实际值的差,故成本就是预测值和实际值的差的平方的平均值,之所以乘以1/2是为了计算方便,这个函数称为均方差方程,成本函数是为了精确的测量模型对训练样本拟合的好坏程度
1.2梯度下降算法
有了预测函数跟成本函数,我们怎么求解模型参数跟?那么我们的梯度下降算法就派上用场了,我们的任务是找到最合适的跟,使得成本函数最小.设在一个三维空间里,为x轴,为y轴,成本函数为z轴,,我们就是要找出当z轴的值最小的时候所对应的x轴上的值跟y轴上的值.
梯度下降法的原理:先随机选择一组跟,同时选择一个参数作为移动的步长,然后让x轴上的跟y轴上的分别向特定的方向移动一小步,这个步长的大小由参数指定,经过多次迭代,X轴跟y轴上的值决定的点就慢慢靠近z轴上的最小值处.那么我们怎么知道往哪个方向移动,才能靠近z轴上最小值附近?答案是往成本函数变小的方向移动?那么又怎么保证成本函数逐渐变小的方向呢?那就是偏导数!!!
可以先简单的把偏导数理解为斜率,我们让不停地迭代,由当前的值,根据的偏导数函数,算出在上的斜率,然后再乘以学习率,就可以让往变小的方向迈一小步.
梯度下降过程的公式描述为:
公式中,下标j就是参数的序号,针对单变量线性回归,即0和1,称为学习率,它决定每次要移动的幅度大小,它乘以成本函数对参数的偏导数,以这个结果作为参数移动的幅度,如果幅度过小,意味着要计算很多次才能到达目的地,如果幅度太大,可能会直接跨过目的地,从而无法收敛
把成本函数的定义式代入上面的公式中,推导出梯度下降算法公式:
2.多变量线性回归算法
工程应用中往往不止一个输入特征,那么我们由单变量推广到多变量线性回归算法
2.1预测函数
多个输入特征,此时输出y的值由n个输入特征x1,x2,x3,...,xn决定,那么预测函数的模型可以改写如下:
若x0为常数1,用累加运算符重写上面的预测函数:
统称为,是预测函数的参数,即一组值就决定了一个预测函数,记做,在不引起误解的轻况下我们也把它简写为,理论上讲,预测函数有无穷多个,我们求解的目标就是找出一个最优的值
(1)向量形式的预测函数
根据向量的乘法运算法则,成本函数可重新写为:
此处,依然假设,称为模型偏置.为什么要写成向量形式的预测函数?一是因为简洁,二是因为在实现算法时,要用到数值计算里面的矩阵运算来提高效率.
2.2成本函数
多变量线性回归算法的成本函数:
其中,模型参数为n+1维的向量,是预测值和实际值的差,这个形式和单变量线性回归算法类似
成本函数有其对应的矩阵样式版本:
其中,X为m(n+1)维的训练样本矩阵,上标T表示转置矩阵;表示由所有的训练的样本输出构成的向量,这个公式的优势是:由矩阵乘法化掉了累加,不需要循环,直接使用矩阵运算,可以一次性计算出对特定的参数下模型的拟合成本.
2.3梯度下降法
根据单变量线性回归算法的介绍,梯度下降公式为:
公式中,下标j是参数的序号,其值从0到n;为学习率.把成本函数代入上式,利用偏导数的计算法则,易得梯度下降法的参数迭代公式:
这个公式有些符合直觉的地方,比如( ) 表示的是预测值与真实值的误差,当误差比较大时,经过一轮的迭代, 的步幅就迈得比较大。即当我们的参数离我们的目标值很远的时候,迭代一次的值变化比较大,可以快速地收敛,而当离目标值比较近的时候,迭代一次的值变化比较小,即慢慢地收敛到目标值.
这个公式怎么样用编程语言来实现呢?在编写机器学习算法的时候,一般步骤如下:
- 确定学习率
太大可能会使成本函数无法收敛,太小计算太多,机器学习算法效率就比较低。 - 确定参数起始点
比如让所有的参数都为1作为起点,即,这样就得到了我们的预测函数:.根据预测值和我们的成本函数,就可以算出我们在参数起始位置的成本. 需要注意的是,参数起始点可以根据实际情况灵活选择,以便让机器学习算法的性能更高,比如选择比较靠近极点的位置. - 计算参数的下一组值
根据 LSM 算法,分别同时算出新的的值.然后用新的 θ 值得到新的预测函数,再根据新的预测函数,代入成本函数就可以算出新的成本. - 确认成本函数是否收敛
拿新的成本和旧的成本进行比较,看成本是不是变得越来越小. 如果两次成本之间的差异小于误差范围,即说明我们已经非常靠近最小成本附近了. 就可以近似地认为我们找到了最小成本了. 如果两次成本之间的差异在误差范围之外,重复步骤 3 继续计算下一组参数 θ. 直到找到我们的最优解.