python机器学习手写算法系列——线性回归

本系列另一篇文章《决策树》
https://blog.youkuaiyun.com/juwikuang/article/details/89333344

本文源代码:
https://github.com/juwikuang/machine_learning_step_by_step

最近我发现我之前写的一篇文章《一个公式告诉你为什么程序员要转算法工程师》
http://blog.youkuaiyun.com/juwikuang/article/details/73057194
有很多人访问。我想,很多程序员和我当初一样,想从程序员转算法工程师。

说说我当初为什么会想到升级成算法工程师。记得三年前,我还在印孚瑟斯(Infosys),我们的CFO非常自豪的宣布公司已经成功的让专科生的比例提高了,让本科生的比例降低了。我作为一个本科程序员,听了十分难受。当然,公司这样做是为了利润,也合理合法。换了我是CFO,我也会这样做,不过,我应该不会像他一样大声说。有些事,可以做,不能说。

后来,机缘巧合,我学习了机器学习,走上了算法工程师这条路。当时我学机器学习,是从吴恩达(Andrew Ng)的Coursera课程开始的。很多人和我一样,也是开了这门课,开始机器学习的。这门课挺好,可惜开发语言用了Octave,以至于我每次写作业,都很痛苦,因为我还要学Octave语言,而且这东西学了也没啥用。另外,这门课是英语的,只有少数人能看懂。

本文的目的,就是从最基本,最简单的机器学习算法讲起,手把手的教你实现这个算法。一边编程,一边就明白这个算法的原理了。我本人也是程序员转的算法工程师,我们的强项就是编程,弱项就是数学。我针对这个特点,专门做了以下教程。

言归正传。首先我们看看线性回归在整个机器学习里的位置。

从机器学习到线性回归

线性回归在整个机器学习

今天,我们只关注机器学习到线性回归这条线上的概念。别的以后再说。为了让大家听懂,我这次也不查维基百科了,直接按照自己的理解用大白话说,可能不是很严谨。

机器学习就是机器可以自己学习,而机器学习的方法就是利用现有的数据和算法,解出算法的参数。从而得到可以用的模型。

监督学习就是利用已有的数据(我们叫X,或者特征),和数据的标注(我们叫Y),找到x和y之间的对应关系,或者说是函数f。

回归分析是一种因变量为连续值得监督学习。

线性回归是一种x和y之间的关系为线性关系的回归分析。 y = a 1 x 1 + a 2 x 2 + b y=a_1x_1+a_2x_2+b y=a1x1+a2x2+b,这个叫线性关系。如果这里出现了 x 2 x^2 x2, l o g ( x ) log(x) log(x), s i n ( x ) sin(x) sin(x)之类的,那就不是线性关系了。

一元线性回归说的是,自变量x是一个纯量(scalar)。scalar类型的变量,是不可再分的。

我希望你能说明白这些概念的关系。不过,我自己也是花了很久才了解清楚的。如果你没听明白,也没关系。毕竟都是概念,没什么实际的例子,也很难理解。等你看完了本文,了解了一元线性回归。回过头来再看这些概念,就能更好的理解了。

问题

这里,我们的问题是,找出算法工程师和程序员之间的工资关系。这里直接给出北京,上海,杭州,深圳,广州的工资。

城市 x-程序员工资 y-算法工程师工资
北京 1.3854 2.1332
上海 1.2213 2.0162
杭州 1.1009 1.9138
深圳 1.0655 1.8621
广州 0.09503 1.8016

把他们用图打出来看看他们之间的关系。

程序员和算法工程师工资

由图可见,他们之间大致是一个线性关系,这时候,我们就可以试着用一元线性回归去拟合(fit)他们之间的关系。

数学模型

一元线性回归公式

以下是公式
y = a x + b + ε y=ax+b+ε y=ax+b+ε

y 为应变量 dependent variable
x 为自变量 independent variable
a 为斜率 coeffient
b 为截距 intercept
ε (读作epsilon)为误差,正态分布
线性回归的目标是,找到一组a和b,使得ε最小
y ^ = a x + b \hat{y}=ax+b y^=ax+b
ε = y − y ^ ε=y-\hat{y} ε=yy^

y ^ \hat{y} y^ 读作y hat,也有人读作y帽子。这里的帽子一般表示估计值,用来区别真实值y。

下图可以更好的帮助你理解。

一元线性回归
(图片来自互联网)

黑色的点为观测样本,即 y = a x + b + ε y=ax+b+ε y=ax+b+ε

x红色的线为回归线,即 y ^ = a x + b \hat{y}=ax+b y^=ax+b

x蓝色的线段为误差,即 ε = y − y ^ ε=y-\hat{y} ε=yy^

方差 - 损失函数 Cost Function

在机器学习中,很多时候,我们需要找到一个损失函数。有了损失函数,我们就可以经过不断地迭代,找到损失函数的全局或者局部最小值(或者最大值)。损失函数使得我们的问题转化成数学问题,从而可以用计算机求解。在线性回归中,我们用方差作为损失函数。我们的目标是使得方差最小。

下面的表格解释了什么是方差。

方差

其中SSE(Sum of Square Error)是总的方差,MSE(Mean Square Error)是方差的平均值。

而这里的损失函数,用的是0.5 * MSE。即:

J ( a , b ) = 1 2 n ∑ i = 0 n ( y i − y ^ i ) 2 J(a,b)=\frac{1}{2n}\sum_{i=0}^{n}(y_i−\hat{y}_i )^2 J(a,b)=2n1i=0n(yiy^i)2

记住,这里的损失函数是针对参数a和b的函数,y和 y ^ \hat{y} y^

评论 36
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

织网者Eric

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值