一、线性回归算法公式简介
回归算法是一种监督性学习算法,一般用来解决连续性变量预测问题,试图建立自变量(x)和应变量(y)之间的映射关系。线性回归数学表达式如下:
y' = θx+θ1x1+θ2x2+…+θnxn(1)
上述公式可以看到是我们需要计算出最优的θ值来拟合数据,但是y'并不会拟合所有的数据,会存在一定的误差,我们这里使用ε(i)代表预测的误差,根据中心极限定律误差ε(i)是独立同分布且服从均值为0方差为δ²的高斯分布,上述公式(1)亦可写成向量表达的形式:
y(i)= θTx(i)+ε(i)(2)
在公式(2)中y(i)代表y的真实值,θT代表θ的向量(θ0,θ1,θ2,....,θn)然后转置,x(i)代表自变量x的特征向量(x0,x1,x2,....,xn),两个向量的相乘相当于每个对应元素相乘然后求和,再根据最大似然估计可推导得到关于θ的对数似然函数,这里就不细写详细的推导过程,最后使用最小二乘法推导得到θ如下:
θ =(3)
θ的推导还可以使用迭代法,例如使用梯度下降算法求解θ,梯度下降算法是一种贪心算法,所以梯度下降算法不一定能够得到全局的最优解,这里不详细描述下次会专门写一个关于梯度下降算法求解线性回归问题的文章。
二、通过数据校验算法
使用Python语言来验证一下公式的正确性,这里我们需要先安装好Python的科学计算库Anaconda,安装包可以从清华大学开源镜像库(https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/)下载。
(1).首先导入Python的科学计算库
(2).初始化x和y的数据,从下图中肉眼可以看到自变量(x1,x2)与应变量(y)的关系为y= x1+x2
(3).使用推导得到的公式(3)计算θ的值及损失,从下图打印出来的参数可以看到x1及x2的系数刚好全部都为1,而loss(损失)函数计算得到的数据非常小,几乎可以忽略,可以看出推导出来的公式是具有很高的可信度,毕竟是科研工作者多年研究出来的成果。
三、使用ML框架sklearn进行线性回归模型训练
sklearn是一个简单高效的Python机器学习框架,里面集成了很多机器学习算法,如果安装好了Anaconda则可以使用conda install scikit-learn命令安装好sklearn,使用sklearn训练线性回归模型流程如下:
(1).导入sklearn框架线性回归库及绘图库matplotlib
(2).初始化x和y的数据,这里的数据还是使用上面例子的数据
(3).训练集及测试集数据划分,这里使用训练集:测试集=8:2的数据划分,训练集是专门用于模型训练,而测试集用于检验训练的出来模型效果
(4).模型训练及预测,下图可以看到预测的结果分别是10和4,分别对应于第7行(7+3=10,与真实值9略有相差)和第2行(2+2=4,与真实值4一样)的预测值
(5).计算模型预测的效果,由下图可以看到x1及x2的特征系数正好都为1,跟使用推导出来计算θ的公式(3)结果一样,可以看到训练出来的模型得分为1,说明效果非常不错
(6).视图查看模型预测效果,下图红色的线条代表每个点的真实值,绿色的线条代表预测值,测试集只有两条数据,即图中只有两个点的数据,由于数据量少的原因所以图像展现的结果看起来差距有点大
sklearn使用模型训练的时候一般还会对数据进行归一化处理,这里由于数据的量级差别不大,所以就没有进行数据归一化处理,一般在进行模型训练的时候都需要对数据进行清洗,将其它类型的数据转换为数字,因为在numpy、pandas、sklearn等科学计算框架中只支持数字运算,不支持字符串等其它类型的变量计算,模型训练过程中还有一个重要的就是参数调优,这也是需要丰富的经验才可以快速的调参得到最优的模型。
领取专属 10元无门槛券
私享最新 技术干货