开发者学堂课程【机器学习入门-概念原理及常用算法:监督学习 - 线性回归】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/355/detail/4183
监督学习 - 线性回归
内容介绍
一、预测线性模型
二、线性回归的定义
三、例题
四、尝试线性回归@参数服务器
一、预测线性模型
线性回归:预测电量的使用,收集一段时间使用温度和电量使用数据做预测线性模型,数据如下:
High Temperature(F) Peak Demand(GW)
76.7 1.89
72.7 1.92
71.5 1.96
86.0 2.43
90.0 2.69
87.7 2.50
… ..
二维坐标轴打印结果为:
如图趋向一条直线,分析可得温度和需求间存在线性关系,假设温度和需求间存在线性关系,关系的衡量 Peak demand 由 θ1+θ2 决定,然后可以根据对明天高温的预测,通过插入模型来预测明天的电量的峰值需求。二维关系等价于在图上画一条直线来穿过一些数据,尽可能穿过多的数据减小误差,蓝色打叉数据称为观察数据,红色的一条称为 Linear regression 模型。如果不是二维数据,如多维数组做预测的话,Linear regression 会变成一个超平面,此时就是希望所有的点尽可能多的贴近平面。
二、线性回归的定义
首先会有输入特征一个n维的x:x(i)∈ Rn,i=1,.., m
输出y值:y(i)∈ Rn(regression task),xy组成的队则称为样本example,整个x和y联合起来称为data,模型参数称为θ向量,θ∈ Rn,希望x和θ通过线性组合的关系组合起来,数学上就是x和θ的累积,其实就是把他们对应的向量相乘后再相加。
Hypothesis function:hθ(x): Rn→R,e.g. linear
regression: hθ=xTθ=∑ni=1xiθi
Ÿ 如何衡量一个假设在训练数据上的“好”程度?
通常通过引入损失函数来实现:loss:R*R→R +
得到h是否足够接近y,如果h非常接近y那么,希望loos输出一个非常小的值,如果h离y比较远则希望loss输出一个非常大的值,对线性回归而言,平方误差squared loss l(hθ(x),y)=(hθ(x)-y)²
Ÿ 典型的机器学习问题:给定一组输入特征和输出
(x(i),y(i)),i=1,..
求一个假设函数hθ(x)求参数θ使损失总和最小化:
minimizeθ ∑ni=1l(hθ(x(i)), y(i))2
对于具体的机器学习算法都可以通过上面的算法描述,只是要指明具体的假设loss function是什么,怎么去解决loss function最小化的问题,一般是通过迭代梯图下降去解决问题。回归电力需求预测。
假设级就是hθ=xTθ=∑ni=1xiθi,求解优化问题就是平方损失函数l(hθ(x),y)=(hθ(x)-y)²,通过Gradescent descent解决最优化问题,这个迭代公式也不是很复杂,因为要最小化θ,那么就对θ求导,得到
θ<—θ—α∑ni=1 x(i)( x(i) Tθ- y(i))。
随着θ的迭代,loss function会呈现逐渐下降的趋势。最后在某种程度上,我们判定这个迭代已经收敛,此时的θ值就是我们所求的值。
假定y和x有假设级,y=hθ(x)+ ε,符合高斯噪声ε分布
X 和 θ 一旦给定,y 的概率得出就比较简单,只要带入,就可以得到以上的公式。
从最大斯然里面所有的样本都是独立分布的,将m个样本联合起来得到下图中的公式一,最大化出现概率带入得到:
minimizeθ ∑ni=1l(hθ(x(i)), y(i))2。
会发现,和之前的squared loss天然相等,所以从另一个维度上 squared loss 的概率上的定义来看符合人整体上的认知。
三、例题
考虑使用假设 H(x)=Wx,是符合线性回归的特性。预测客户X的信用额度。下面的特征在该任务的一个好假设中应该具有的正权重?
A.birth month B.monthly income C.current debt D.number of credit cards owned
正确答案:B
具体通过代码计算:
根据如下的梯度公式:
核心代码,
def gradient_ descent(X, y,theta, alpha, num_ iters) :
m=y.size
J_ history = zeros (shape=(num_iters, 1))
for
I
in range (num iters) :
predictions = X.dot (theta . flatten()
errors_ x1 = (predictions - y)★x[:,0]
errors_x2 =(predictions - y)★x[:,1]
theta[0][0] = theta[0][0] -alpha★(1.0 / m)★errors_ x1. sum ()
theta[1][0] = theta[1][0] - alpha * (1.0 / m)★errors_ x2. sum ()
J
_history[I,0]=compute_cost(X,y,theta)
return theta, J_ history
结果第五轮开始收敛,完全收敛时如图:
可以从图中看到,图中红线体现出数据整体的温度和电量下降趋势。
通过梯度下降求出的解从理论和实践上都符合需要和需求。
四、尝试线性回归@参数服务器
http//gitlab.alibaba-inc.comjunzhouun/ml-base/wikis/linear-regression-data下载数据,样本如下:
+---------+------+
| features | label |
15.9946,-1.0828,0.0762203,0.227703,0.419829,0.803954,-0.537721,-2.04108,-2.19316,1.85648,-2.97,0.129854,-3.73528,1.46632,0.754683,2.59952,-2.57427,3.48927,1.50397 ,0.40474,3.09598,-1. 80781, 0.25079,-1.67974,-0.735975,-7.01959,-3.31852 , 4.31049,-3.01916,2.27159,0.943873 ,0.7022580.1596,-2.39966,-2.56309,1.27655,-3.7098,-1.34109,-1.70737,2.11588,2.17938,2.96074,-0.704996,-1.57381,807,0.594809,-2.97382 ,2.77556,-3.57479,3.11177,3.93067110
http//gitlab.alibaba-inc.comjunzhouun/ml-base/wikis/linear-regression的说明,在d2.alibaba-inc.com、ODPS console等进行调用
使用命令类似∶param_server-iqing_testso_float-o cq_lr_out -a OptiOwlqn.…,快速收敛,得到模型