关于回归

  • 这里给出了一个典型的回归任务,假设我们要根据商品在线广告的费用来预测每月电子商务的销售量
  • 通常的做法是会收集到很多历史数据,然后假设某个商品他在线广告的费用是1.7的时候,每月电子商务的销售量是368
  • 广告费用是1.5的时候,销售达成340等等,有了这些数据之后,我们希望能学习到在线广告费用,对电子商务的销售量的一个影响
  • 给一个新的数据,我们只知道在线广告的费用假设是2.8的时候,我们要预测它每月电子商务的销售量,这个y是多少?
  • 我们把这个例子形式化表示一下,可以写成这样,我们给定的这些历史数据,称为训练数据,用D来表示, D={xi,yi}i=1ND = \{ \bm{x_i}, y_i \}_{i=1}^ND={xi​,yi​}i=1N​
  • 这个训练数据集里是一些样本的集合,一共有n个样本,每一个样本,有它的输入特征x\bm{x}x,和它对应的输出y
  • 这里我们用i来表示样本下标的索引,所以i等于1到n,xi\bm{x}_ixi​就表示第i个样本的输入特征,这里xi\bm{x}_ixi​是一个向量
  • 在这个例子里,我们在线广告的费用是一个一维的标量,比如说我们其实还可以包含商品的其他属性,如商品的类别等等
  • 这样的话,这个输入特征一般的形式是一个向量,这个y表示第i个样本的输出或者叫响应
  • 在回归里这个y是一个实数也是属于R,这个y它其实是一个类别变量
  • 在回归任务里,我们就需要根据刚才我们给定的训练数据D来学习到一个 x\bm{x}x 到 y 的一个映射 f
  • f 学习好了之后,我们希望对于新的测试数据x\bm{x}x,我们可以用f(x)f(\bm{x})f(x)来对它进行预测
  • 这个预测结果我们记为y^\hat{y}y^​,表示它是一个预测值 y^=f(x)\hat{y} = f(\bm{x})y^​=f(x)
  • 通常我们就用y来表示真值,y^\hat{y}y^​来表示它的预测值

回归任务举例

  • 从这里可以看出响应 y 是一个实数,如:价格,销量,收成,薪水,成绩

线性回归模型

  • 在线性回归中,需要确定回归任务中输入x\bm{x}x到输出y的映射f,这个 f 到底是一个什么样的一个形势呢?
  • 最简单的来说,我们可以假设x\bm{x}x与y之间的关系是一个线性关系,我们把这个回归模型叫做线性回归模型,线性函数是最简单的函数
  • 线性回归模型用数学表达式是这样,y=f(x)=wTxy = f(\bm{x}) = \bm{w}^T \bm{x}y=f(x)=wTx,这里w\bm{w}w和x\bm{x}x都是向量,因为机器学习模型用向量表示更简洁,在具体实践上,用数值和矩阵也更高效
  • 展开来看,如上图所示,比如说这个x就是一个列向量,表示前面有一个常数项1,后面是从x1x_1x1​到xDx_DxD​,这里D表示特征的维数,也就是输入特征一共有多少个
  • 在广告投入量例子中只有一个特征,D就是1,如果再加入商品的类型,D就变成2了,就有了两维特征
  • 这里w\bm{w}w其实也是一个列向量,转置之后wT\bm{w}^TwT就变成一个行向量,这个w\bm{w}w里面也是包含D+1维,第1个称为w0w_0w0​,后面的D维,我们称从w1w_1w1​到wdw_dwd​
  • 习惯上,我们把w0w_0w0​称为截距项或偏置项,一般时候一些论文里用b来表示,其实都一样,因为是基于y=kx+by=kx+by=kx+b, 这里的b表示bias, 偏置项的意思
  • 如果x只有一维的话,k就相当于这里的wjw_jwj​,这个系数k或者是wjw_jwj​表示这个xjx_jxj​的变化对y的一个影响
  • wjw_jwj​越大的话,表示当x有一个单位的变化时y的变化更大一些,这里wjw_jwj​有时我们也叫第j维特征的权重,一般我们把它称为回归系数
  • 输入x\bm{x}x从xix_ixi​到xDx_DxD​就是一个D维的输入特征,这个我们加了一个常数项 1,这样的表示是为了把截距项当成x的一维来处理,写起来的形式非常简洁
  • 不特殊说明的话,线性回归模型,一般是指 y=f(x)=wTxy = f(\bm{x}) = \bm{w}^T \bm{x}y=f(x)=wTx
  • 这个例子是根据在线广告投入费用预测每月电子商务销售量
  • 这里一共有6个样本点,所以训练样本的数目N=6,x是输入,也叫属性,y是输出,也叫目标, 这里y都是向量(用y_train表示),x都是矩阵(用X_train表示, 可能包含多维数据)
  • 第一步我们需要看下x和y之间的关系,所以我们先把这个数据可视化来看一下,用散点图来表示,横轴是x,纵轴是y
  • 我们看出来就是这个x越大,看起来y应该是最大的,当然它也没有那么完美的一个关系,比如有两个x相同,它们y的就不同
  • 散点图在python中可以用scatter来作图,plt.scatter(X_train, y_train, label = 'Train Samples')
  • 用线性模型来表示的话,我们认为x和y之间是一个线性函数,这里的x是一维的,一般形式表示为y=kx+by=kx+by=kx+b
  • 这样在几何上我们就能更清楚的看到这个截距项是什么意思,就是当x等于0的时候y的取值,也就是b或者叫做w0w_0w0​
  • 在这里x和y都是一个一维数组,但是在机器学习模型实现的时候,一般情况下这个x是一个二维的数组,也就是它可以有多维特征
  • 在Scikit-Learn中,训练数据x是二维数组, 例子中是单维特征,需要变成二维数组
  • 这里我们为了把它送到机器学习模型里面去,我们需要把它做一个形状变化叫做reshape,X_train = X_train.reshape(-1, 1),就是把它变成一个二维矩阵,大小就根据它的大小来自动计算
  • 在这个例子中是一个6×1的,所以它也是一个二维数组,6行1列
  • 数据准备好了之后,如果是用线性模型来表示的话,可以调用Scikit-Learn里的线性模型,里边有一个LinearRegression叫线性回归
    #训练模型
    from sklearn.linear_model import LinearRegression
    # 使用默认配置初始化 这里是默认参数,也可指定参数 这里生成一个学习器的实例 lr
    lr = LinearRegression()
    # 这里fit是训练模型函数 用来训练模型参数 训练结束后就会修改 lr 中的一些属性(如截距和系数)
    lr.fit(X_train, y_train)
    
  • 在sklearn里我们调用学机器学习模型的步骤都是一样的,除了线性回归模型,其他模型也会遵循同样的一个模式
  • 根据例子中数据算出来一条绿色直线: y=123.94+167.80∗xy = 123.94 + 167.80 * xy=123.94+167.80∗x,这里123.94是w0w_0w0​, 167.80是w1w_1w1​
  • 模型 f 学习好了之后就可以把它用到预测,比如我们对一个新的输入x等于2.8,也就是当这些广告费用等于2.8的时候,电子商务的销售量应该是多少?
  • 把这个输入x带入到这个f(x)模型,就可以得到它的估计,记为 y^\hat{y}y^​,y^=123.94+167.80∗2.8=593.78\hat{y} = 123.94 + 167.80 ∗ 2.8 = 593.78y^​=123.94+167.80∗2.8=593.78
  • w0w_0w0​和w1w_1w1​是通过训练数据训练得到的模型的一个解,最终估计是593.78
  • 这个过程就是从训练到预测
  • 现在的问题是这个模型已经训练好了,也可以拿来做预测,那怎么知道这个模型它好还是不好?
  • 这里除了用线性回归得到的绿色的线之外还有一条蓝色的线,这个蓝色的线是 y=150+120∗xy = 150 + 120 * xy=150+120∗x
  • 蓝色模型似乎没有绿色的预测这条线好,因为它对每一点的预测都是比较悲观的,它的预测值都小于真值,有些差异比较小,有些差异的就比较多
  • 我们需要有一个东西来衡量一下预测值和真值,那怎么来衡量呢?这里我们需要用到预测残差
  • 预测残差(Residual):真实值和预测值之间的差异 r=y−y^r = y − \hat{y}r=y−y^​
  • 我们在图上也可以把这个残差画出来,比如说对于绿色这条线(线性回归得到的这条线)
  • 绿色直线在训练集上的预测残差:-41.20, -35.64, 33.92, -8.92, -11.08, 62.91
  • 蓝色直线在训练集上的预测残差:14, 10, 70, 204, 25, 142
  • 可以看到残差有正有负,有大有小,比较起来不方便,要忽略符号对其造成的影响,就和方差类似,我们可以看它的平方
  • 我们用残差的平方来度量这个预测模型的好坏,r2=(y−y^)2r^2 = (y − \hat{y}) ^2r2=(y−y^​)2
  • 我们有多个训练样本,因为我们不能只看一个样本拟合的好就行,应该把所有训练样本上的那个残差平方给加起来,得到所谓的残差平方和(Residual Sum of Squares, 简记为 RSS )
  • 最佳直线: RSS最小, RSS=∑i=1Nr2=∑i=1N(yi−y^i)2RSS = \sum_{i=1}^N r^2 = \sum_{i=1}^N (y_i - \hat{y}_i) ^2RSS=∑i=1N​r2=∑i=1N​(yi​−y^​i​)2
  • 绿色直线在训练集上的 RSS=(−41.20)2+(−35.64)2+(33.92)2+(−8.92)2+(−11.08)2+(62.91)2=8277.32RSS = (−41.20)^2 + (−35.64)^2 + (33.92)^2 + (−8.92)^2 + (−11.08)^2 + (62.91)^2 = 8277.32RSS=(−41.20)2+(−35.64)2+(33.92)2+(−8.92)2+(−11.08)2+(62.91)2=8277.32
  • 蓝色直线在训练集上的 RSS=(14)2+(10)2+(70)2+(204)2+(25)2+(142)2=67601RSS = (14)^2 + (10)^2 +(70)^2 + (204)^2 + (25)^2 + (142)^2 = 67601RSS=(14)2+(10)2+(70)2+(204)2+(25)2+(142)2=67601
  • 可以看到绿色线条是比较好的一条线

AI笔记: 关于回归、线性回归、预测残差、残差平方和相关推荐

  1. 百度飞桨2021李宏毅机器学习特训营学习笔记之回归及作业PM2.5预测

    百度飞桨2021李宏毅机器学习特训营学习笔记之回归及作业PM2.5预测 前言 回归 什么是回归(Regression)? 怎么做回归? 线性回归(Linear Regression) 训练集与验证集 ...

  2. Machine Learning in Action 读书笔记---第8章 预测数值型数据:回归

    Machine Learning in Action 读书笔记 第8章 预测数值型数据:回归 文章目录 Machine Learning in Action 读书笔记 一.回归 1.回归的一般过程 2 ...

  3. R语言使用lm函数拟合多元线性回归模型、假定预测变量之间有交互作用、R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响

    R语言使用lm函数拟合多元线性回归模型.假定预测变量之间有交互作用.R语言使用effects包的effect函数查看交互作用对于回归模型预测响应变量的影响 目录

  4. R语言实战读书笔记(八)回归

    简单线性:用一个量化验的解释变量预测一个量化的响应变量 多项式:用一个量化的解决变量预测一个量化的响应变量,模型的关系是n阶多项式 多元线性:用两个或多个量化的解释变量预测一个量化的响应变量 多变量: ...

  5. AI笔记: 损失函数之L1损失、L2损失、Huber损失

    损失函数 之前我们知道预测残差和残差平方和,在机器学习中,我们用专门的术语叫损失函数(loss function)度量样本真实值与模型预测值之间差异 如果我们采用残差平方来作为你的损失函数的话,那我们 ...

  6. 《计量经济学》学习笔记之多元线性回归模型

    导航 上一章:一元线性回归模型 下一章:放宽基本假定的模型 文章目录 导航 3.1多元线性回归模型 一.多元线性回归模型 二.多元线性回归的基本假设 3.2多元线性回归模型的参数估计 四.参数统计量的 ...

  7. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  8. 人工智能必备数学知识· 学习笔记 ·001【线性回归,最小二乘法梯度下降法】

    注:笔记 来自课程 人工智能必备数学知识 Tips①:只是记录从这个课程学到的东西,不是推广.没有安利 Tips②:本笔记主要目的是为了方便自己遗忘查阅,或过于冗长.或有所缺省.或杂乱无章,见谅 Ti ...

  9. Python金融系列第五篇:多元线性回归和残差分析

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 第一篇:计算股票回报率,均值和方差 第二篇:简单线性回归 第三篇:随机变量和分布 第四篇:置信区间和假设 ...

最新文章

  1. 病毒式营销案例:多芬让“病毒”的诱惑自发传递
  2. Struts2之struts-2.3.20开发环境的搭建并实现第一个Hello World小应用
  3. python 传递带参数的函数_Python 函数的参数传递
  4. 软考试题希赛网爬取过程分享二
  5. java List转Map
  6. eclipse中添加subclipse插件
  7. 键盘表和ASCII码表
  8. 记一次使用verdaccio 搭建本地私有npm服务器
  9. 2021年中国食糖产销量及重点企业对比分析[图]
  10. 使用jquery easyui datetimebox 设置默认时间
  11. 百旺红字发票信息表显示服务器返回为空,红字发票信息表状态详细说明
  12. 【老生谈算法】matlab实现模糊K-均值算法——均值算法
  13. 2019年上半年 DDOS流量攻击分析以及解决方案
  14. 标签类目体系(面向业务的数据资产设计方法论)-读书笔记2
  15. 阿雪的学习记录|解决Linux下PPPoE拨号上网不稳定的问题
  16. gunicorn 安装部署详解
  17. 然而沼跃鱼早就看穿了一切 hihoCoder1082
  18. 区块链投资基金致力于银行的一亿美…
  19. C五子棋---心态是如何到绝望的.....
  20. 【观察】智能决策:从中国制造到中国智造的通关“金钥匙”

热门文章

  1. vue根据返回路径下载xml文件
  2. Ubuntu换Kali源
  3. C#接口与抽象类学习笔记
  4. c++华为面试题--牛客网-2.0
  5. Python简史:开发者的小小副业如何成为全球最热编程语言?
  6. Swift之深入解析内存安全
  7. 51单片机DS1302时钟芯片应用Proteus仿真
  8. 表单查询(二)【educoder】+笔记+答案
  9. 关于对称归一化的拉普拉斯矩阵为何选用度矩阵D的逆平方根
  10. 红枣的功效与食用方法