机器学习有监督学习之--回归

2023-11-16

一、引言

  本材料参考Andrew Ng大神的机器学习课程 http://cs229.stanford.edu,以及斯坦福无监督学习UFLDL tutorial http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial

  机器学习中的回归问题属于有监督学习的范畴。回归问题的目标是给定D维输入变量x,并且每一个输入矢量x都有对应的值y,要求对于新来的数据预测它对应的连续的目标值t。比如下面这个例子:假设我们有一个包含47个房子的面积和价格的数据集如下:

 

我们可以在Matlab中画出来这组数据集,如下:

  看到画出来的点,是不是有点像一条直线?我们可以用一条曲线去尽量拟合这些数据点,那么对于新来的输入,我么就可以将拟合的曲线上返回对应的点从而达到预测的目的。如果要预测的值是连续的比如上述的房价,那么就属于回归问题;如果要预测的值是离散的即一个个标签,那么就属于分类问题。这个学习处理过程如下图所示:

  上述学习过程中的常用术语:包含房子面积和价格的数据集称为训练集training set;输入变量x(本例中为面积)为特征features;输出的预测值y(本例中为房价)为目标值target;拟合的曲线,一般表示为y = h(x),称为假设模型hypothesis;训练集的条目数称为特征的维数,本例为47。

 

二、线性回归模型

  线性回归模型假设输入特征和对应的结果满足线性关系。在上述的数据集中加上一维--房间数量,于是数据集变为:

  于是,输入特征x是二维的矢量,比如x1(i)表示数据集中第i个房子的面积,x2(i)表示数据集中第i个房子的房间数量。于是可以假设输入特征x与房价y满足线性函数,比如:

 

 

这里θi称为假设模型即映射输入特征x与结果y的线性函数h的参数parameters,为了简化表示,我们在输入特征中加入x0 = 1,于是得到:

参数θ和输入特征x都为矢量,n是输入的特征x的个数(不包含x0)。

  现在,给定一个训练集,我们应该怎么学习参数θ,从而达到比较好的拟合效果呢?一个直观的想法是使得预测值h(x)尽可能接近y,为了达到这个目的,我们对于每一个参数θ,定义一个代价函数cost function用来描述h(x(i))'与对应的y(i)'的接近程度:

前面乘上的1/2是为了求导的时候,使常数系数消失。于是我们的目标就变为了调整θ使得代价函数J(θ)取得最小值,方法有梯度下降法,最小二乘法等。

 

  2.1 梯度下降法

  现在我们要调整θ使得J(θ)取得最小值,为了达到这个目的,我们可以对θ取一个随机初始值(随机初始化的目的是使对称失效),然后不断地迭代改变θ的值来使J(θ)减小,知道最终收敛取得一个θ值使得J(θ)最小。梯度下降法就采用这样的思想:对θ设定一个随机初值θ0,然后迭代进行以下更新

直到收敛。这里的α称为学习率learning rate。

  梯度方向由J(θ)对θ 的偏导数决定,由于要求的是最小值,因此对偏导数取负值得到梯度方向。将J(θ)代入得到总的更新公式

这样的更新规则称为LMS update rule(least mean squares),也称为Widrow-Hoff learning rule。

  对于如下更新参数的算法:

由于在每一次迭代都考察训练集的所有样本,而称为批量梯度下降batch gradient descent。对于引言中的房价数据集,运行这种算法,可以得到θ0 = 71.27, θ1 = 1.1345,拟合曲线如下图:

  如果参数更新计算算法如下:

这里我们按照单个训练样本更新θ的值,称为随机梯度下降stochastic gradient descent。比较这两种梯度下降算法,由于batch gradient descent在每一步都考虑全部数据集,因而复杂度比较高,随机梯度下降会比较快地收敛,而且在实际情况中两种梯度下降得到的最优解J(θ)一般会接近真实的最小值。所以对于较大的数据集,一般采用效率较高的随机梯度下降法。

  2.2 最小二乘法(LMS)

  梯度下降算法给出了一种计算θ的方法,但是需要迭代的过程,比较费时而且不太直观。下面介绍的最小二乘法是一种直观的直接利用矩阵运算可以得到θ值的算法。为了理解最小二乘法,首先回顾一下矩阵的有关运算:

  假设函数f是将m*n维矩阵映射为一个实数的运算,即,并且定义对于矩阵A,映射f(A)对A的梯度为:

因此该梯度为m*n的矩阵。例如对于矩阵A=,而且映射函数f(A)定义为:F(A) = 1.5A11 + 5A122 + A21A22,于是梯度为:

  另外,对于矩阵的迹的梯度运算,有如下规则:

  下面,我们将测试集中的输入特征x和对应的结果y表示成矩阵或者向量的形式,有:

对于预测模型有,即,于是可以很容易得到:

所以可以得到

  于是,我们就将代价函数J(θ)表示为了矩阵的形式,就可以用上述提到的矩阵运算来得到梯度:

令上述梯度为0,得到等式:,于是得到θ的值:

。这就是最小二乘法得到的假设模型中参数的值。

  2.3 加权线性回归

  首先考虑下图中的几种曲线拟合情况:

最左边的图使用线性拟合,但是可以看到数据点并不完全在一条直线上,因而拟合的效果并不好。如果我们加入x2项,得到,如中间图所示,该二次曲线可以更好的拟合数据点。我们继续加入更高次项,可以得到最右边图所示的拟合曲线,可以完美地拟合数据点,最右边的图中曲线为5阶多项式,可是我们都很清醒地知道这个曲线过于完美了,对于新来的数据可能预测效果并不会那么好。对于最左边的曲线,我们称之为欠拟合--过小的特征集合使得模型过于简单不能很好地表达数据的结构,最右边的曲线我们称之为过拟合--过大的特征集合使得模型过于复杂。

  正如上述例子表明,在学习过程中,特征的选择对于最终学习到的模型的性能有很大影响,于是选择用哪个特征,每个特征的重要性如何就产生了加权的线性回归。在传统的线性回归中,学习过程如下:

而加权线性回归学习过程如下:

  二者的区别就在于对不同的输入特征赋予了不同的非负值权重,权重越大,对于代价函数的影响越大。一般选取的权重计算公式为:

其中,x是要预测的特征,表示离x越近的样本权重越大,越远的影响越小。

 

三、logistic回归与Softmax回归

  3.1 logistic回归

  下面介绍一下logistic回归,虽然名曰回归,但实际上logistic回归用于分类问题。logistic回归实质上还是线性回归模型,只是在回归的连续值结果上加了一层函数映射,将特征线性求和,然后使用g(z)作映射,将连续值映射到离散值0/1上(对于sigmoid函数为0/1两类,而对于双曲正弦tanh函数为1/-1两类)。采用假设模型为:

而sigmoid函数g(z)为:

   

当z趋近于-∞,g(z)趋近于0,而z趋近于∞,g(z)趋近于1,从而达到分类的目的。这里的

  那么对于这样的logistic模型,怎么调整参数θ呢?我们假设

,由于是两类问题,即,于是得到似然估计为:

对似然估计取对数可以更容易地求解:

接下来是θ的似然估计最大化,可以考虑上述的梯度下降法,于是得到:

得到类似的更新公式:。虽然这个更新规则类似于LMS得到的公式,但是这两种是不同算法,因为这里的hθ(x(i))是一个关于θTx(i)的非线性函数。

  3.2 Softmax回归

  logistic回归是两类回归问题的算法,如果目标结果是多个离散值怎么办?Softmax回归模型就是解决这个问题的,Softmax回归模型是logistic模型在多分类问题上的推广。在Softmax回归中,类标签y可以去k个不同的值(k>2)。因此对于y(i)从属于{1,2,3···k}。

  对于给定的测试输入x,我们要利用假设模型针对每一个类别j估算概率值p(y = j|x)。于是假设函数hθ(x(i))形式为:

其中θ1,θ2,θ3,···,θk属于模型的参数,等式右边的系数是对概率分布进行归一化,使得总概率之和为1。于是类似于logistic回归,推广得到新的代价函数为:

可以看到Softmax代价函数与logistic代价函数形式上非常相似,只是Softmax函数将k个可能的类别进行了累加,在Softmax中将x分为类别j的概率为:

于是对于Softmax的代价函数,利用梯度下降法使的J(θ)最小,梯度公式如下:

表示J(θ)对第j个元素θj的偏导数,每一次迭代进行更新:

  3.3 Softmax回归 vs logistic回归

  特别地,当Softmax回归中k = 2时,Softmax就退化为logistic回归。当k = 2时,Softmax回归的假设模型为:

我们令ψ = θ1,并且两个参数都剪去θ1,得到:

于是Softmax回归预测得到两个类别的概率形式与logistic回归一致。

  现在,如果有一个k类分类的任务,我们可以选择Softmax回归,也可以选择k个独立的logistic回归分类器,应该如何选择呢?

  这一选择取决于这k个类别是否互斥,例如,如果有四个类别的电影,分别为:好莱坞电影、港台电影、日韩电影、大陆电影,需要对每一个训练的电影样本打上一个标签,那么此时应选择k = 4的Softmax回归。然而,如果四个电影类别如下:动作、喜剧、爱情、欧美,这些类别并不是互斥的,于是这种情况下使用4个logistic回归分类器比较合理。

 

四、一般线性回归模型

  首先定义一个通用的指数概率分布:

考虑伯努利分布,有:

  

再考虑高斯分布:

  

一般线性模型满足:1. y|x;θ 满足指数分布族E(η)  2. 给定特征x,预测结果为T(y) = E[y|x]  3. 参数η = θTx 。

  对于第二部分的线性模型,我们假设结果y满足高斯分布Ν(μ,σ2),于是期望μ = η,所以:

很显然,从一般线性模型的角度得到了第二部分的假设模型。

  对于logistic模型,由于假设结果分为两类,很自然地想到伯努利分布,并且可以得到,于是 y|x;θ 满足B(Φ),E[y|x;θ] = Φ,所以

于是得到了与logistic假设模型的公式,这也解释了logistic回归为何使用这个函数。

转载于:https://www.cnblogs.com/fanyabo/p/4060498.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习有监督学习之--回归 的相关文章

  • URL 中的 %2F 中断并且未引用所需的 .php 文件 [重复]

    这个问题在这里已经有答案了 我需要将 作为变量作为 URL 的一部分传递 我的结构如下所示 www domain com listings page 1 city Burnaby South type Townhome bedroom 2
  • 从 PHP 数组生成 HTML 表

    我不明白这一点 我需要解决看似简单的问题 但这超出了我的逻辑 我需要编写一个函数 table columns input cols 它将输出一个表 示例 input array apple orange monkey potato chee
  • 如何从父类中获取子类名

    我试图在不需要子类上的函数的情况下完成此任务 这可能吗 我有一种感觉 但我真的很想确定
  • Laravel $request->file() 返回 null

    尝试在后端使用 Laravel 上传文件时遇到问题 Issue Laravel request gt file 方法返回 null Setup 我使用以下方法构建了一个 AJAX 请求超级代理人 https github com visio
  • 一种无需 JavaScript 即可在 PHP 中确定浏览器宽度的方法?

    首先有吗 或者我必须使用javascript 我希望能够更改使用的 CSS 因此 frex 我可以为移动设备或其他设备加载较小的字体 不幸的是 仅使用 PHP 无法检测用户分辨率 如果您使用 Javascript 则可以在 cookie 中
  • PHP 通过 SSL 连接到 MS SQL

    我想要实现的目标非常简单 我想通过安全连接从 PHP 脚本连接到外部 MS SQL 数据库 然而 这已被证明是有问题的 到目前为止 经过三个小时的研究 我不知所措 客户端的平台是Ubuntu 这意味着我无法使用SQLSRV 安全连接已经在不
  • 按文件名对 $_FILES 进行排序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 他俩 如您所知 在新的 HTML5 中 您可以非常轻松地上传多个文件 但我这里的问题是如何按列 名称 对 FILES 数组进行排序 这是
  • Yii2 - 错误请求 (#400) |前端和后端cookie

    仅当我打开时才会出现此问题frontend and backend在相同的browser 设想 与后端交互 gt 切换选项卡 gt 与前端交互 gt 切换选项卡返回 gt 与后端交互 gt 错误请求 400 Cookie 后端 identi
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • CakePHP 视图包括其他视图

    我有一个 CakePHP 应用程序 在某些时候会显示带有产品媒体 图片或视频 的视图 我想知道是否有某种方式可以包含另一个威胁视频或威胁图片的视图 具体取决于标志 我想将这些 小视图 用于其他几个目的 所以它应该 像 蛋糕组件一样 以便重用
  • 如何在 PHP 的 HTML 页面中显示错误消息?

    我有以下登录表单 login php 其中要求输入用户名和密码
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 使用 PHP glob 列出 FTP 服务器上的文件不起作用

    我使用此代码来访问目录 location files pictures glob location png 我想使用 FTP 访问远程路径 location opendir ftp user password host name files
  • 使用值填充的 Symfony2 自定义字段类型

    这是先前问题的后续问题Symfony2 自定义表单类型或扩展 https stackoverflow com questions 24079288 symfony2 custom form type or extension 我正在尝试为订
  • docker 中的 php Curl 冲突 CURLOPT_FILE 和 CURLOPT_RETURNTRANSFER

    当我使用curl时CURLOPT FILE and CURLOPT RETURNTRANSFER选项 文件为空 没有任何curl错误 fp fopen saveTo w ch curl init fileUrl curl setopt ch
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 如何在codeigniter中将上传图片比例限制为16:9?

    这是我用来上传图像的代码 this gt load gt library upload ext pathinfo file name PATHINFO EXTENSION img name now ext imgConfig upload
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • PHP session_regenerate_id 和黑莓浏览器

    问候 我正在开发一个登录系统 并陷入了黑莓浏览器身份验证的困境 他们似乎对 PHP 的 session regenerate id 有问题 有人可以建议替代方案吗 以下是身份验证和登录脚本 UPDATE看来会话一般都不起作用 拿出 sess
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p

随机推荐

  • FFMpeg 实现视频编码、解码

    FFMpeg 作为音视频领域的开源工具 它几乎可以实现所有针对音视频的处理 本文主要利用 FFMpeg 官方提供的 SDK 实现音视频最简单的几个实例 编码 解码 封装 解封装 转码 缩放以及添加水印 接下来会由发现问题 分析问题 解决问题
  • 如何成为一名合格的前端开发者?

    个人 懂得都懂 我觉得会 Ctrl C 和 Ctrl V 才是合格 这是对老板讲的 一 JavaScript基础 前端工程师吃饭的家伙 深度 广度一样都不能差 变量和类型 1 JavaScript规定了几种语言类型 2 JavaScript
  • k8s系统获取真实客户端ip

    k8s部署 系统获取真实客户端ip 我们生产中使用的是kong网关环境的架构也不同 第一种kong网管后走nginx 第二种kong网管后不走nginx kong网管后走ingress nginx 修改kong的配置 配置要信任的原始IP地
  • 使用python做手机app后台

    编辑器 HBuiderX PyCharm 主要技术 5 App python HBuiderX 下载地址 http www dcloud io hbuilderx html PyCharm 下载地址 http www jetbrains c
  • 如何在html里写css类选择器,关于html:如何在CSS选择器中排除特定的类名?

    当用户鼠标将鼠标悬停在类名称为 reMode hover 的元素上时 我尝试应用背景色 但是如果元素也有 reMode selected 我不想更改颜色 注意 因为我在某种有限的环境中工作 所以只能使用CSS而不是JavaScript 为了
  • ASN.1 常用类型 编码详解 入门

    文章目录 编码结构 标识符 Identifier 长度 Length 短形式 长形式 内容 Contents 基本类型 布尔类型 BOOLEAN 整形 INTEGER 实数 REAL 枚举类型 ENUMERATED 二进制的编码 十进制的编
  • 微信测试号 如何配置服务器配置,微信测试号配置失败

    appID wxd281df297a6dc834 appsecret 20b2deacfa8a9e88a9afcbbe12da1f31 define TOKEN weixin function checksignature signatur
  • openGL之API学习(三十三)查看opengl、显卡的信息

    const GLubyte name glGetString GL VENDOR 返回负责当前OpenGL实现厂商的名字 const GLubyte biaoshifu glGetString GL RENDERER 返回一个渲染器标识符
  • LWIP学习笔记(2)---ARP简析

    ARP协议概述 即地址解析协议 用于实现从 IP 地址到 MAC 地址的映射 即询问目标IP对应的MAC地址 ARP分组格式 以太网目的地址 MAC 以太网源地址 MAC 帧类型 硬件类型 协议类型 OP 发送端目的地址 发送端 地址 目的
  • Selenium 高频面试题及答案

    1 什么是 Selenium 它用于做什么 Selenium 是一个用于自动化测试的开源框架 它提供了多种工具和库 用于模拟用户在不同浏览器和操作系统上的行为 并且可用于测试网页应用程序 2 Selenium WebDriver 和 Sel
  • 2023前端面试题及答案整理(CSS)

    盒模型 标准盒模型 W3C标准 一个块的总宽度 内容宽度 margin 左右 padding 左右 border 左右 怪异盒模型 IE标准 一个块的总宽度 width 包含 padding 和 border margin 左右 怪异盒模型
  • C++并发编程框架Theron(8)——Theron中包含的类(二)

    1 前言 本篇文章主要接着上一篇来介绍Theron框架库中包含的类 上一篇中主要介绍了Theron下Actor Address AllocatorManager和Catcher类 在本篇文章中我会相继介绍DefaultAllocator E
  • 解决vscode找不到arduino esp8266头文件

    用Arduino IDE写ESP8266没有代码补全 不能跳转查看头文件 个人觉得这是最难受的 vscode装上Microsoft的arduino扩展后 有时候会找不到头文件 刚开始自己傻傻的一个个往includePath里面添加 后来在引
  • 决策树(Decision Tree)简介

    决策树 Decision Tree 及其变种是另一类将输入空间分成不同的区域 每个区域有独立参数的算法 决策树分类算法是一种基于实例的归纳学习方法 它能从给定的无序的训练样本中 提炼出树型的分类模型 树中的每个非叶子节点记录了使用哪个特征来
  • 李宏毅机器学习课程第4讲:Estimator

    李宏毅机器学习课程第4讲 Estimator 味儿太冲了 开头又是宝可梦哈哈哈哈哈 不过听了这一讲 我对于过拟合和欠拟合的理解更深刻了 李老师从Bias和Variance两个角度进行了解释 对 于 这 样 一 个
  • linux centos7 centos8 Rocky8.8 Rocky9.2 sed错误sed: -e expression #1, unknown option to `s‘解决办法

    报错如下 sed e expression 1 char 13 unknown option to s 需要替换的行为 monitor url http 192 168 25 100 8443 rest 查询资料得知 报错是因为替换的字符串
  • 高等数学(工本)填空题

    1 2 3 4 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 4
  • Error: listen EADDRINUSE: address already in use 127.16.20.217:8090

    端口占用npm run staert无效 今天遇到一个问题 就是在提交代码时怕把本地端口号提交到远程 然后将已经启用的端口设置为localhost 待提交完代码后再刷新页面 结果一直更新不出来 然后重启代码 终端报 Error listen
  • 怎么上传代码到GitHub

    怎么上传代码到GitHub 2021 9 我们想要把代码上传到github上面用git管理 但是怎么操作呢 首先在本地电脑安装git 和在github上面注册账号 git下载地址 git官网链接 然后我们要知道有二种方式可以配置操作 一种是
  • 机器学习有监督学习之--回归

    一 引言 本材料参考Andrew Ng大神的机器学习课程 http cs229 stanford edu 以及斯坦福无监督学习UFLDL tutorial http ufldl stanford edu wiki index php UFL