线性回归

  • (一)介绍
  • (二) 数学模型
    • 2.1 一元线性回归公式
    • 2.2 方差 - 损失函数 Cost Function
    • 2.3 优化方法 Optimization Function
    • 2.4 算法步骤
  • (三)Python 实现

(一)介绍

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

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

回归分析是一种因变量为连续值的监督学习。而线性回归指一种x和y之间的关系为线性关系的回归分析。
y=a1x1+a2x2+by=a1x1+a2x2+by=a1x1+a2x2+b
,这个叫线性关系。如果这里出现了x2,log(x),sin(x)x2,log(x), sin(x)x2,log(x),sin(x)之类的,那就不是线性关系了。

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

**举例:**找出算法工程师和程序员之间的工资关系。这里直接给出北京,上海,杭州,深圳,广州的工资。


画图分析他们之间的关系大致是线性:

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

(二) 数学模型

2.1 一元线性回归公式

公式:
y=ax+b+εy=ax+b+εy=ax+b+ε

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

ε=y−y^ε=y−\widehat{y}ε=y−y​

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

下图帮助理解:
黑色的点为观测样本,即y=ax+b+εy=ax+b+εy=ax+b+ε

x红色的线为回归线,即y^=ax+b\widehat{y}=ax+by​=ax+b

x蓝色的线段为误差,即ε=y−y^ε=y−\widehat{y}ε=y−y​

2.2 方差 - 损失函数 Cost Function

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

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

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

而这里的损失函数,用的是0.5 * MSE。即:
J(a,b)=12n∑i=0n(yi​−y​i^​)2J(a,b)= \frac{1}{2n}\sum_{i=0}^{n} (yi​−\widehat{y​i}​)^{2}J(a,b)=2n1​i=0∑n​(yi​−y​i​​)2

记住,这里的损失函数是针对参数a和b的函数,y和y^\widehat{y}y​其实都是已知的。

2.3 优化方法 Optimization Function

有了损失函数后,还需要一个方法,使得我们可以找到这个损失函数的最小值。机器学习里叫做优化方法。这里的优化方法,就是算损失的方向。或者说,当我的参数变化的时候,我的损失是变大了还是变小了。如果a变大了,损失变小了。那么,说明a增大这个方向是正确的,我们可以朝着这个方向继续小幅度的前进。反之,就应该考虑往相反的方向试试看。因为每个参数(a和b)都是一维的,所以,所谓的方向,无非就是正负符号。

这里,我们需要用偏微分的方法,得到损失函数的变化量。即:

如果你已经忘了微积分,你暂时可以不必纠结上面的公式,只要知道公式给出了损失函数的变化就可以了。伟大的python还提供了sympy,你可以用sympy做微积分。这部分我也放在附件代码里了,有兴趣的可以看一下。

之前说到,整过迭代过程是小幅度进行的。这里,就需要一个超参数来控制这个过程。这个超参数就是α,通常是0.01.

这时,我们就可以去更新a和b的值:
a=a−α∂J∂aa=a−α\frac{∂J}{∂a}a=a−α∂a∂J​
b=b−α∂J∂bb=b−α\frac{∂J}{∂b}b=b−α∂b∂J​

本身​∂J∂a​ \frac{∂J}{∂a}​∂a∂J​和 ​∂J∂b​ \frac{∂J}{∂b}​∂b∂J​​ 是损失函数的变化量。如果损失函数随着a变大了,即​∂J∂a​ \frac{∂J}{∂a}​∂a∂J​为正。说明a的增大会导致损失函数的增大。那么是不是说,a的减小会使得损失函数减小呢?而我们的目标是使得J最小,所以,这个时候,我们的a要减小一点点。

2.4 算法步骤

  1. a和b的起始值设置为零

  2. 通过模型yˆ=ax+b

  3. y^​=ax+b\widehat{y}​=ax+by​​=ax+b,我们可以算出​y^\widehat{y}y​

  4. 有了​y^\widehat{y}y​​,就可以用优化方法算去更新参数

    重复2和3,直到找到J的最小值

下图解释了模型,损失函数和优化方法之间的关系。

模型,损失函数和优化方法之间的关系:

(三)Python 实现

首先是模型 :

def model(a, b, x):return a*x + b

损失函数:

def cost_function(a, b, x, y):n = 5return 0.5/n * (np.square(y-a*x-b)).sum()

优化函数:

def optimize(a,b,x,y):n = 5alpha = 1e-1y_hat = model(a,b,x)da = (1.0/n) * ((y_hat-y)*x).sum()db = (1.0/n) * ((y_hat-y).sum())a = a - alpha*dab = b - alpha*dbreturn a, b

三个函数中a和b是标量(scalar value),x和y是向量(vector)
至此,一元线性回归的主要部分就14行代码。

训练模型
用scikit-learn训练和评价模型

import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
%matplotlib inlinex = [13854,12213,11009,10655,9503] #程序员工资,顺序为北京,上海,杭州,深圳,广州
x = np.reshape(x,newshape=(5,1)) / 10000.0
y =  [21332, 20162, 19138, 18621, 18016] #算法工程师,顺序和上面一致
y = np.reshape(y,newshape=(5,1)) / 10000.0
# 调用模型
lr = LinearRegression()
# 训练模型
lr.fit(x,y)
# 计算R平方
print lr.score(x,y)
# 计算y_hat
y_hat = lr.predict(x)
# 打印出图
plt.scatter(x,y)
plt.plot(x, y_hat)
plt.show()

有了模型,损失函数,优化函数,我们就可以训练模型了。
这里给出分别训练1次,再训练5次,再训练10次,再训练100,再训练10000次的模型。





分析:随着训练次数的增加,回归线越来越接近样本了。自己写的线性回归比较简单,我只能目测凭直觉感觉损失函数已经达到了最小值。

模型评价

在机器学习中,模型的好坏是有标准的。在回归模型中,我们用R2R^{2}R2 来评价模型。公式:
R2R^{2}R2=SSR/SST
其中
SSR=∑i=0n=(yi^−y‾)SSR=\sum_{i=0}^{n}= (\widehat{yi}−\overline{y})SSR=∑i=0n​=(yi​−y​)
SSR=∑i=0n=(yi−y‾)SSR=\sum_{i=0}^{n}= (yi−\overline{y})SSR=∑i=0n​=(yi−y​)
y‾\overline{y}y​读作y bar,是y的平均值。
可以证明SST=SSR+SSESST=SSR+SSESST=SSR+SSE。

机器学习笔记二 单型线性回归相关推荐

  1. 吴恩达机器学习笔记二之多变量线性回归

    本节目录: 多维特征 多变量梯度下降 特征缩放 学习率 正规方程 1.多维特征 含有多个变量的模型,模型中的特征为(x1,x2,-xn), 比如对房价模型增加多个特征 这里,n代表特征的数量, x(i ...

  2. [机器学习笔记] Note3--多变量线性回归

    继续是机器学习课程的笔记,这节课介绍的是多变量的线性回归. 多变量线性回归 多维特征 上节课介绍的是单变量的线性回归,这节课则是进一步介绍多变量的线性回归方法. 现在假设在房屋问题中增加更多的特征,例 ...

  3. [机器学习笔记] Note2--单变量线性回归

    继续是机器学习课程的笔记,这节介绍的是单变量线性回归算法,线性回归算法也是一个比较基础的算法. 模型表达 首先是以房屋交易问题为例,假设我们回归问题的训练集如下表所示: Size in feet2fe ...

  4. 吴恩达机器学习笔记 —— 5 多变量线性回归

    http://www.cnblogs.com/xing901022/p/9321045.html 本篇主要讲的是多变量的线性回归,从表达式的构建到矩阵的表示方法,再到损失函数和梯度下降求解方法,再到特 ...

  5. 机器学习笔记(二)模型评估与选择

    2.模型评估与选择 2.1经验误差和过拟合 不同学习算法及其不同参数产生的不同模型,涉及到模型选择的问题,关系到两个指标性,就是经验误差和过拟合. 1)经验误差 错误率(errorrate):分类错误 ...

  6. 机器学习(二)线性回归、多项式回归、多元回归

    文章目录 一.线性回归 二.多项式回归 三.多元回归 一.线性回归 简介:线性回归使用数据点之间的关系在所有数据点之间画一条之线,这条直线可以预测未来的值. 可以借助scipy绘制线性回归线. fro ...

  7. 机器学习笔记二十四 中文分词资料整理

    一.常见的中文分词方案 1. 基于字符串匹配(词典) 基于规则的常见的就是最大正/反向匹配,以及双向匹配. 规则里糅合一定的统计规则,会采用动态规划计算最大的概率路径的分词. 以上说起来很简单,其中还 ...

  8. 机器学习笔记(2):线性回归-使用gluon

    代码来自:https://zh.gluon.ai/chapter_supervised-learning/linear-regression-gluon.html 1 from mxnet impor ...

  9. 脑电图机器学习笔记(二):SVM 脑电波原信号和傅立叶变换的 癫痫信号检测

    使用SVM进行癫痫检测 背景: 这是一片论文的简单复现,只是还原思想,不知道是不是我看的不够仔细,我觉得论文说的也就是这样简单的操作 论文名称:Seizure prediction with spec ...

最新文章

  1. KeyWordHelper-关键字提取类(注:使用第三方组件DictSeg.dll)
  2. SGU - 507 启发式合并维护平衡树信息
  3. 全球及中国食品行业发展潜力与投资机会评估报告2022版
  4. 为CentOS 6 配置本地YUM源
  5. 数据结构(1) -- 绪论
  6. 《智慧书》格言91-100
  7. IDC:IoT市场即将井喷的5大标志
  8. [Android Pro] 判断Uri对应的ContentProvider所操作的数据库u存在,及DownloadManager的暂停,继续...
  9. Git pull(拉取),push(上传)命令整理
  10. Linux内核中Netfilter架构介绍
  11. Unity 基础 之 Camera摄像机属性介绍
  12. 开源组件分析工具OpenSCA教程
  13. 《腾讯是怎么长大的》读书笔记
  14. MAC上VMware fusion 12安装vmware tools灰色解决办法
  15. linux离线安装apr-util 报错,Linux 编译 apr-util 时报错
  16. Codeforces Round #657 (Div. 2)B. Dubious Cyrpto
  17. 【华为HCIE证书难考吗?】
  18. 计算机管理服务修复,电脑提示“部署映像服务和管理工具错误87”的修复步骤...
  19. QueryByExampleExecutor接口的查询
  20. 隐藏进程命令行参数,例如输入密码等高危操作

热门文章

  1. 内容运营、用户运营、活动运营
  2. 李玉婷经典版MySQL基础
  3. 【学习笔记】软件设计模式(一)基本概念与归纳总结
  4. DedeCMS织梦系统服务器端安装
  5. 19年以后ArcGIS 调用天地图
  6. 袁磊老师的课,ES6(四)
  7. LPT COM RS232 RS232C 并口 串口
  8. 【Linux之Ubantu——乱记】5.U盘重装Linux系统(惠普)
  9. 法宝就在顺其自然的道上
  10. linux文件查看和文件查找