一、什么是回归算法
回归算法是一种有监督算法
回归算法是一种比较常用的机器学习算法,用来建立“解释”变量(自变量X)和观测值(因变量Y)之间的关系;从机器学习的角度来讲,用于构建一个算法模型(函数)来做属性(X)与标签(Y)之间的映射关系,在算法的学习过程中,试图寻找一个函数使得参数之间的关系拟合性最好
回归算法中算法(函数)的最终结果是一个连续的数据值,输入值(属性值)是一个d维度的属性/数值向量
1.1 初识回归
有一个问题:现在拥有一组房屋面积及其对应房价的数据如下,如果有一个房屋面积为55平,请问最终的租赁价格是多少比较合适?
房屋面积 | 租赁价格 |
---|---|
10 | 0.8 |
20 | 1.8 |
30 | 2.2 |
30 | 2.5 |
70 | 5.5 |
70 | 5.2 |
… | … |
我们可以构建一个函数 ,其中h(x) 为房价,x为房屋面积,根据大量的数据求出和的值,于是能够构建出一条直线。
如果此时将测试集中的数据投入到模型中,如果模型构建的比较好,可以看到测试集中所有(面积,价格)的点会均匀分布在直线的上下两侧,而且离的直线距离不会太远 (说明方差较小) 。如果测试集中的数据大量分布在直线的上方,或离直线的距离普遍较远,那么说明模型质量不高,需要重新训练。
如果在面积的基础上,增加房间数量这一变量呢
房屋面积 | 房间数量 | 租赁价格 |
---|---|---|
10 | 1 | 0.8 |
20 | 1 | 1.8 |
30 | 1 | 2.2 |
30 | 2 | 2.5 |
70 | 3 | 5.5 |
70 | 2 | 5.2 |
… | … | … |
构造函数 ,其中h(x) 为房价,根据大量的数据求出 、 、 的值,于是能够构建出一个平面。我们要预测面积、房间个数和房价的映射关系,构建如下模型
从Y轴向下俯视该平面,可以获得该平面在x1、 x2两坐标轴上的投影。同样,由(x1、 x2)点衍生到平面上后,对应的Y轴值即是对应的房价值y或记作h(x)
如果有1个特征,我们得到了一条直线模型。如果有2个特征,我们得到了一个平面。如果有2个以上的特征呢?
2个特征形成的平面,结合目标值构成了一个三维的图像,对于更高维度的思维结构人类是无法想象出来的。对于两个以上特征形成的n维模型,我们称之为超平面(Hyperplane)
模型:
h(x) = θ0 + θ1x1 + θ2x2 + … + θnxn
h(x) = Σ θixi( i=0~n )
h(x) = θTX = [θ1,θ2,θ3,…,θn] * [x1,x2,x3,…,xn]T 即θ矩阵的转置,乘以X的矩阵。
注:所有特征默认都是列向量
1.2 导数
导数 就是曲线的斜率,是曲线变化快慢的一个反应。
二阶导数 是斜率变化的反应,表现曲线的 凹凸性
1.3 偏导数
导数是针对单一变量的,当函数是多变量的,偏导数 就是关于其中一个变量的导数而保持其他变量恒定不变(固定一个变量求导数)。
1.4 梯度
梯度是一个向量,表示某一函数在该点处的 方向导数 ,沿着该方向取最大值,即函数在该点处沿着该方向变化最快,变化率最大(即该梯度向量的模);当函数为一维函数的时候,梯度就是导数。
二、求解
2.1 求解方法
1.解析解:最小二乘法(又称最小平方法)是一种数学优化技术,它由两部分组成:
- 计算所有样本误差的平均(代价函数)
- 使用最优化方法寻找数据的最佳函数匹配(抽象的)
2.数值解:梯度下降法、牛顿法、拟牛顿法等
2.2 线性回归算法的步骤
Step1:画出散点图确定回归方程
Step2:写出回归方程的基本形式(以线性为例)。最终目的是要计算出θ的值,并选择最优的θ构成算法公式
Step3:写出目标函数,object:样本预测值与实际值的差值最小化
Step4:计算待估计参数的值,求出回归方程
三、方法一:极大似然估计解释最小二乘法
3.1 似然函数
前提假设:对于,误差 是独立同分布的,服从均值为0,方差为某定值的高斯分布
解释:实际问题中,很多随机现象可以看做众多因素的独立影响的综合反应,如房价往往由距离地铁位置,周围是否由学校等因素影响(误差 同样如此),往往服从正态分布(原因:中心极限定理)
所以,对于第i个样本,误差满足如下公式:
根据中心极限定理得到似然函数:
取对数,得到对数似然函数:
化简,得到目标函数:
3.2 最小二乘法
对于,其中
目标函数:
对目标函数进行求导:
3.3 最小二乘法的参数最优解
参数解析式
最小二乘法的使用要求矩阵是可逆的;为了防止不可逆或者过拟合的问题存在,可以增加额外数据影响,导致最终的矩阵是可逆的:
最小二乘法直接求解的难点:矩阵逆的求解是一个难处
3.4 损失函数,代价函数,目标函数
损失函数(Loss Function)定义在单个样本上,算的是一个样本的误差。比如
损失函数形式如下:
3.5 线性回归过拟合
一般来说,模型的训练误差很小,而预测误差很大的情况下,模型存在过拟合的情况
目标函数
为了防止数据过拟合,也就是的θ值在样本空间中不能过大/过小,可以在目标函数之上增加一个平方和损失:
正则项(norm):这里这个正则项叫做L2-norm
3.5.1 Ridge回归(岭回归)
使用L2正则的线性回归模型就称为Ridge回归(岭回归)
3.5.2 LASSO回归
使用L1正则的线性回归模型就称为LASSO回归(Least Absolute Shrinkage and Selection Operator)
3.5.3 Elasitc Net算法
同时使用L1正则和L2正则的线性回归模型就称为Elasitc Net算法(弹性网络算法)
3.5.4 Ridge(L2-norm)和LASSO(L1-norm)比较
L2-norm中,由于对于各个维度的参数缩放是在一个圆内缩放的,不可能导致有维度参数变为0的情况,那么也就不会产生稀疏解;实际应用中,数据的维度中是存在噪音和冗余的,稀疏的解可以找到有用的维度并且减少冗余,提高回归预测的准确性和鲁棒性(减少了overfitting)(L1-norm可以达到最终解的稀疏性的要求)
Ridge模型具有较高的准确性、鲁棒性以及稳定性;LASSO模型具有较高的求解速度。
如果既要考虑稳定性也考虑求解的速度,就使用Elasitc Net
由上图可知,对于二元线性回归来说,L1正则的限制性区域为蓝色正方形固定区域,L2正则限制性区域为蓝色圆形固定区域,当目标函数前半部分与后半部分(限制性条件)相交时,集等势线与固定区域相交,交点即为最优解,L1正则交点存在参数为0的情况,而L2则不存在,由此可推出L1正则容易产生稀疏解(元素为零)
3.6模型效果评判标准
- MSE:误差平方和,越趋近于0表示模型越拟合训练数据。
- RMSE:MSE的平方根,作用同MSE
- :取值范围(负无穷,1],值越大表示模型越拟合训练数据;最优解是1;当模型预测为随机值的时候,有可能为负;若预测值恒为样本期望, 为0
- TSS:总平方和TSS(Total Sum of Squares),表示样本之间的差异情况,是伪方差的m倍
- RSS:残差平方和RSS(Residual Sum of Squares),表示预测值和样本值之间的差异情况,是MSE的m倍
3.7机器学习调参
在实际应用中,对于各种算法模型(线性回归)来讲,我们需要获取θ、λ、p \theta、\lambda、pθ、λ、p的值,由于λ、p \lambda、pλ、p为超参数,无法求解,需要人为设定,从而求解最优的θ \thetaθ值,该过程为调参(超参数)
交叉验证:将训练数据分为多份,其中一份进行数据验证并获取最优的超参数λ \lambdaλ和p pp;比如:十折交叉验证、五折交叉验证(scikit-learn中默认)等。
四、方法二:梯度下降法
梯度下降法(Gradient Descent, GD)常用于求解无约束情况下凸函数(Convex Function)的极小值,是一种迭代类型的算法,因为凸函数只有一个极值点,故求解出来的极小值点就是函数的最小值点
目标函数θ求解
4.1 梯度下降法(数值解)过程
Step1:初始化θ(随机初始化)
Step2:沿着负梯度方向迭代,新的θ 能够使得J(θ) 更小α:学习率、步长
Step3:如果J(θ) 能够继续减小,返回Step2,直到迭代完成。
注:仅考虑单个样本的单个θ 参数的梯度值
4.2批量梯度下降法(BGD)
使用所有样本的梯度值作为当前模型参数θ 的更新
4.3随机梯度下降法(SGD)
使用单个样本的梯度值作为当前模型参数θ的更新
4.4 BGD和SDB的区别
- SGD速度比BGD快(整个数据集从头到尾执行的迭代次数少)
- SGD在某些情况下(全局存在多个相对最优解,J(θ)不是一个二次函数),SGD有可能会跳出某些小的局部最优解,所以一般情况下不会比BGD差;SGD在收敛的位置会存在J(θ)函数波动的情况,抗噪声很差。
- BGD一定能够得到一个局部最优解(在线性回归模型中一定是得到一个全局最优解),SGD由于随机性的存在可能导致最终结果比BGD差
- 注意:优先选择SGD
4.5小批量梯度下降法(MBGD)
- 如果要满足算法训练过程较快,又需要保证最终参数训练的准确率较高,提出小批量梯度下降法(Mini-batch Gradient Descent,简称MBGD)。
- MBGD中是把样本划分为b个样本(b一般为10),然后以这b个样本的平均梯度为更新方向:
4.6 学习率选择和参数初始化
由于梯度下降法中负梯度方向作为变量的变化方向,所以有可能导致最终求解的值是局部最优解,所以在使用梯度下降的时候,一般需要进行一些调优策略
学习率的选择:学习率过大,表示每次迭代更新的时候变化比较大,有可能会跳过最优解;学习率过小,表示每次迭代更新的时候变化比较小,就会导致迭代速度过慢,很长时间都不能结束;
算法初始参数数值的选择:初始值不同,最终获得的最小值也有可能不同,因为梯度下降法求解的是局部最优解,所以一般情况下,选择多次不同初始值运行算法,并最终返回损失函数最小情况下的结果值;
标准化:由于样本不同特征值的取值范围不同,可能会导致在各个不同参数上迭代速度不同,为了减少特征取值的影响,可以将特征进行标准化操作。
4.7 BGD、SGD、MBGD的区别
当样本量为m的时候,每次迭代BGD算法中对于参数值更新一次,SGD算法中对于参数值更新m次,MBGD算法中对参数值更新m/n次,相对来讲SGD的更新速度最快;
SGD算法中对于每个样本都需要更新参数值,当样本值不太正常的时候,就有可能会导致本次的参数更新会产生相反的影响,也就是说SGD算法的结果并不完全收敛,而是在收敛结果处波动;
SGD算法是每个样本都更新一次参数值,所以SGD算法特别适合样本数据量特别大的情况以及在线机器学习(Online ML)
五、局部加权回归
局部加权回归-损失函数
普通线性回归损失函数:
局部加权回归损失函数:
局部加权回归权重值 是权重,主要是根据预测点与训练集点的距离作为数据集中的点赋权值。当某点离要预测的点越远,其权重越小,否则越大。常用的公式为:
该函数称为指数衰减函数,其中k 为波长参数,它控制了权值随距离下降的速率
注意:使用该方式主要应用到样本之间的相似性考虑
NOTE:局部加权回归是一种非参数学习算法,也就是说参数不固定,在每一次预测的时候,均需要使用训练数据重新训练模型参数。