线性回归原理小结

线性回归可以说是机器学习中最基本的问题类型了,这里就对线性回归的原理和算法做一个小结。

一、线性回归的模型函数和损失函数

    线性回归遇到的问题一般是这样的。我们有m个样本,每个样本对应于n维特征和一个结果输出,如下:

    \((x_1^{(0)}, x_2^{(0)}, ...x_n^{(0)}, y_0), (x_1^{(1)}, x_2^{(1)}, ...x_n^{(1)},y_1), ... (x_1^{(m)}, x_2^{(m)}, ...x_n^{(m)}, y_m)\)

    我们的问题是,对于一个新的$(x_1^{(x)}, x_2^{(x)}, ...x_n^{(x)} \(, 他所对应的\)y_x$是多少呢? 如果这个问题里面的y是连续的,则是一个回归问题,否则是一个分类问题。

    对于n维特征的样本数据,如果我们决定使用线性回归,那么对应的模型是这样的:

    \(h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}\), 其中$\theta_i $ (i = 0,1,2... n)为模型参数,$x_i $ (i = 0,1,2... n)为每个样本的n个特征值。这个表示可以简化,我们增加一个特征$x_0 = 1 $ ,这样\(h_\theta(x_0, x_1, ...x_n) = \sum\limits_{i=0}^{n}\theta_{i}x_{i}\)

    进一步用矩阵形式表达更加简洁如下:

    \(h_\mathbf{\theta}(\mathbf{X}) = \mathbf{X\theta}\)

    其中, 假设函数\(h_\mathbf{\theta}(\mathbf{X})\)为mx1的向量,\(\mathbf{\theta}\)为nx1的向量,里面有n个代数法的模型参数。\(\mathbf{X}\)为mxn维的矩阵。m代表样本的个数,n代表样本的特征数。

    得到了模型,我们需要求出需要的损失函数,一般线性回归我们用均方误差作为损失函数。损失函数的代数法表示如下:

    \(J(\theta_0, \theta_1..., \theta_n) = \sum\limits_{i=0}^{m}(h_\theta(x_0, x_1, ...x_n) - y_i)^2\)

    进一步用矩阵形式表达损失函数:

    \(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})\)

    由于矩阵法表达比较的简洁,后面我们将统一采用矩阵方式表达模型函数和损失函数。

二、线性回归的算法

    对于线性回归的损失函数\(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y})\),我们常用的有两种方法来求损失函数最小化时候的\(\mathbf{\theta}\)参数:一种是梯度下降法,一种是最小二乘法。由于已经在其它篇中单独介绍了梯度下降法和最小二乘法,可以点链接到对应的文章链接去阅读。

    如果采用梯度下降法,则\(\mathbf{\theta}\)的迭代公式是这样的:

    \(\mathbf\theta= \mathbf\theta - \alpha\mathbf{X}^T(\mathbf{X\theta} - \mathbf{Y})\)

    通过若干次迭代后,我们可以得到最终的\(\mathbf{\theta}\)的结果

    如果采用最小二乘法,则\(\mathbf{\theta}\)的结果公式如下:

    $ \mathbf{\theta} = (\mathbf{X^{T}X})^{-1}\mathbf{X^{T}Y} $

 

    当然线性回归,还有其他的常用算法,比如牛顿法和拟牛顿法,这里不详细描述。

三、线性回归的推广:多项式回归

    回到我们开始的线性模型,\(h_\theta(x_1, x_2, ...x_n) = \theta_0 + \theta_{1}x_1 + ... + \theta_{n}x_{n}\), 如果这里不仅仅是x的一次方,比如增加二次方,那么模型就变成了多项式回归。这里写一个只有两个特征的p次方多项式回归的模型:

    \(h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_1^{2} + \theta_{4}x_2^{2} + \theta_{5}x_{1}x_2\)

    我们令\(x_0 = 1, x_1 = x_1, x_2 = x_2, x_3 =x_1^{2}, x_4 = x_2^{2}, x_5 =  x_{1}x_2\) ,这样我们就得到了下式:

    \(h_\theta(x_1, x_2) = \theta_0 + \theta_{1}x_1 + \theta_{2}x_{2} + \theta_{3}x_3 + \theta_{4}x_4 + \theta_{5}x_5\)

    可以发现,我们又重新回到了线性回归,这是一个五元线性回归,可以用线性回归的方法来完成算法。对于每个二元样本特征\((x_1,x_2)\),我们得到一个五元样本特征\((1, x_1, x_2, x_{1}^2, x_{2}^2, x_{1}x_2)\),通过这个改进的五元样本特征,我们重新把不是线性回归的函数变回线性回归。

四、线性回归的推广:广义线性回归

    在上一节的线性回归的推广中,我们对样本特征端做了推广,这里我们对于特征y做推广。比如我们的输出\(\mathbf{Y}\)不满足和\(\mathbf{X}\)的线性关系,但是\(ln\mathbf{Y}\)\(\mathbf{X}\)满足线性关系,模型函数如下:

    \(ln\mathbf{Y} = \mathbf{X\theta}\)

    这样对与每个样本的输入y,我们用 lny去对应, 从而仍然可以用线性回归的算法去处理这个问题。我们把 Iny一般化,假设这个函数是单调可微函数\(\mathbf{g}(.)\),则一般化的广义线性回归形式是:

    \(\mathbf{g}(\mathbf{Y}) = \mathbf{X\theta}\) 或者 \(\mathbf{Y} = \mathbf{g^{-1}}(\mathbf{X\theta})\) 

    这个函数\(\mathbf{g}(.)\)我们通常称为联系函数。

五、线性回归的正则化

    为了防止模型的过拟合,我们在建立线性模型的时候经常需要加入正则化项。一般有L1正则化和L2正则化。

 

    线性回归的L1正则化通常称为Lasso回归,它和一般线性回归的区别是在损失函数上增加了一个L1正则化的项,L1正则化的项有一个常数系数\(\alpha\)来调节损失函数的均方差项和正则化项的权重,具体Lasso回归的损失函数表达式如下:  

    \(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \alpha||\theta||_1\)

    其中n为样本个数,\(\alpha\)为常数系数,需要进行调优。\(||\theta||_1\)为L1范数。

     Lasso回归可以使得一些特征的系数变小,甚至还是一些绝对值较小的系数直接变为0。增强模型的泛化能力。

     Lasso回归的求解办法一般有坐标轴下降法(coordinate descent)和最小角回归法( Least Angle Regression),由于它们比较复杂,在我的这篇文章单独讲述: 线程回归的正则化-Lasso回归小结

 

    线性回归的L2正则化通常称为Ridge回归,它和一般线性回归的区别是在损失函数上增加了一个L2正则化的项,和Lasso回归的区别是Ridge回归的正则化项是L2范数,而Lasso回归的正则化项是L1范数。具体Ridge回归的损失函数表达式如下:

    \(J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) + \frac{1}{2}\alpha||\theta||_2^2\)

    其中\(\alpha\)为常数系数,需要进行调优。\(||\theta||_2\)为L2范数。

    Ridge回归在不抛弃任何一个特征的情况下,缩小了回归系数,使得模型相对而言比较的稳定,但和Lasso回归比,这会使得模型的特征留的特别多,模型解释性差。

      Ridge回归的求解比较简单,一般用最小二乘法。这里给出用最小二乘法的矩阵推导形式,和普通线性回归类似。

    令\(J(\mathbf\theta)\)的导数为0,得到下式:

    \(\mathbf{X^T(X\theta - Y) + \alpha\theta} = 0\)

    整理即可得到最后的\(\theta\)的结果:

    \(\mathbf{\theta = (X^TX + \alpha E)^{-1}X^TY}\)

     其中E为单位矩阵。

 

    除了上面这两种常见的线性回归正则化,还有一些其他的线性回归正则化算法,区别主要就在于正则化项的不同,和损失函数的优化方式不同,这里就不累述了。

(欢迎转载,转载请注明出处。欢迎沟通交流: 微信:nickchen121)

转载于:https://www.cnblogs.com/nickchen121/p/11214779.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯,字节等大厂面试真题汇总,进阶学习资料!

前言 找工作还是需要大家不要紧张,有我们干这一行的接触人本来就不多 难免看到面试官会紧张,主要是因为怕面试官问的问题到不上来,那时候不要着急 ,答不上了的千万不然胡扯一些,直接就给面试官说这块我还没接触到&…

【题解】鱼塘钓鱼

题目描述 有N个鱼塘排成一排(N<100),每个鱼塘中有一定数量的鱼,例如:N5时,如下表: 即:在第1个鱼塘中钓鱼第1分钟内可钓到10条鱼,第2分钟内只能钓到8条鱼&…

腾讯,字节,阿里,小米,京东大厂Offer拿到手软!分享一点面试小经验

(一)简介 Handler机制是一套Android消息传递机制。在Android开发多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理。 在Android开发中&a…

腾讯,字节,阿里,小米,京东大厂Offer拿到手软!绝对干货

开头 又到年底了,每到这个时候,我们都会慢慢反思,这一年都做了什么?有什么进步?年初的计划都实现了吗?明年年初有跳槽的底气了吗?况且今年的互联网环境太差,需要自己有足够的知识储…

request对象与response对象

一.request对象 1.通过request对象可以获得客户端输入的信息。request对象包含了从客户端传来的请求信息。 请求的参数是一个请求的组成部分,它们被作为字符串从客户端传送到JSP/Servlet容器中,并被用于初始化request对象。 2.request对象是javax.Servle…

腾讯,字节,阿里,小米,京东大厂Offer拿到手软!讲的明明白白!

缘起 随着Android开发行业逐渐饱和,对Android开发者的面试要求也越来越高,是否掌握底层源码,是面试官衡量一名Android开发者的重要依据。有没有读过源码也可以很大程度上判断你这个人的学习能力和思维方式。无论你开发经验几年,面…

HTML div 滚动条样式设计

::-webkit-scrollbar-track-piece{ background-color:#fff;/*滚动条的背景颜色*/ -webkit-border-radius:0;/*滚动条的圆角宽度*/ } ::-webkit-scrollbar{ width:8px;/*滚动条的宽度*/ height:8px;/*滚动条的高度*/ } ::-webkit-scrollbar-thumb:vertical{/*垂直滚动条的样式*/…

膜拜大佬!5年经验Android程序员面试27天,高级面试题+解析

前言 网上关于启动优化的文章多不胜数,内容千篇一律,大都是列举一些耗时操作,采用异步加载、懒加载等。 而在面试过程中,关于启动优化的问题,如果只是很表面地回答耗时操作应该放在子线程,显然太过于普通…

膜拜大佬!不同层级的Android开发者的不同行为,社招面试心得

都说Android最近行情不好,很多人都遇到瓶颈或放弃或转行。其实这种情况17年18年也是如此,相对比之下,个人认为今年比去年好多了,Android接下来将会走向复苏的春天。 自从Google开始推出AMP项目已经有一年了。除此之外,…

zookeeper的四种类型的节点

znode创建类型(CreateMode),有以下四种: PERSISTENT 持久化节点PERSISTENT_SEQUENTIAL 顺序自动编号持久化节点,这种节点会根据当前已存在的节点数自动加 1EPHEMERAL 临时节点, 客户端session超时这类节点…

膜拜大牛!Android开发最佳实践手册全网独一份,终获offer

前言 首先介绍一下自己,计算机水本,考研与我无缘。之前在帝都某公司算法部实习,公司算大公司吧,然而个人爱好偏开发,大二的时候写个一个app,主要是用各种框架。 学习路径:如何循序渐进、阶段性…

英语每日一句

从今天开始学英语了:还蛮重要的。 It s not what I ask for.这不是我要的那样。 你能写出,你第一时间想到的一句英语吗? 转载于:https://www.cnblogs.com/igouz/archive/2008/11/28/1343014.html

膜拜大牛!HTTPS面试常问全解析,吊打面试官系列!

写在前面 1月初失业,找了近2个多月的工作了,还没找到心仪的工作,感觉心好慌,不知道该怎么办了?找不到工作的时候压力很大,有人说自信会很受打击,还有人说会很绝望,是人生的低谷………

vSphere HA 原理与配置

内容预览: 1. vSphere HA 概述 2. vSphere HA 提供的保护级别 3. vSphere HA运行原理 4. vSphere HA 故障支持场景 5. vSphere HA接入控制策略 6. 如何选择vSphere HA 的接入控制策略 7. 配置vSphere HA的基础条件 8. 虚拟机组件保护 9. 开启vSphere HA功能 1. v…

自学Android!Android高级工程师面试题-字节跳动,附答案

前言 大厂面试一直都是程序员圈内摸鱼时间津津乐道的话题,进大厂想必也是无数程序员的梦想。 关于“原理”的问题,几乎是现如今Android开发岗必问的问题,尤其在大厂面试中更为突出。有过大厂面试经验的小伙伴应该知道:大厂的面试…

WEB可以调节的框架页

<html> <head><meta HTTP-EQUIV"Content-Type" CONTENT"text/html; charsetgb2312"><title>主框架[www.tecsoon.com]</title></head><frameset cols"30%,*"> <frame name"dir" target&…

被面试官问的Android问题难倒了,成功入职字节跳动

感悟 这个世界有一个“二八原则”在好多地方都发挥着作用&#xff0c;在Android开发上我认为也一样有用。做一个Android开发&#xff0c;你也许只会用到Android开发知识中的20%&#xff0c;有80%其实你学了也不一定会用。 而面试官也一样&#xff0c;他也可能只掌握了20%的知…

PANEL中显示窗体

var frm: TForm2;//定义窗口类begin PageControl1.activepage:tabsheet1; if Panel1.ControlCount 0 then begin frm : Tform2.Create(self); frm.Parent : Panel1; frm.BorderStyle : bsnone; frm.WindowState : wsmaximized; if skindata1.active…

被面试官问的Android问题难倒了,系列篇

本篇将由 环境搭建、实现原理、编程开发、插件开发、编译运行、性能稳定、发展未来 等七个方面&#xff0c;对当前的 React Native 和 Flutter 进行全面的分析对比&#xff0c;希望能给你更有价值的参考。 前言 移动端跨平台在经历数年沉浮之后&#xff0c;如今还能在舞台聚光…

使用screen管理后台程序

我们常需要SSH 或者telent 远程登录到Linux 服务器&#xff0c;经常运行一些需要很长时间才能完成的任务&#xff0c;在此期间不能关掉窗口或者断开连接&#xff0c;否则这个任务就会被杀掉&#xff0c;一切半途而废了。这时&#xff0c;我们可以用screen命令解决这个问题。 Sc…