python 最小二乘回归 高斯核_「机器学习」一文读懂线性回归、岭回归和Lasso回归...

点击上方蓝色字体,关注AI小白入门哟

d03392cce670940ea98217841193a5b9.png

作者 | 文杰

编辑 | yuquanle

本文介绍线性回归模型,从梯度下降和最小二乘的角度来求解线性回归问题,以概率的方式解释了线性回归为什么采用平方损失,然后介绍了线性回归中常用的两种范数来解决过拟合和矩阵不可逆的情况,分别对应岭回归和Lasso回归,最后考虑到线性回归的局限性,介绍了一种局部加权线性回归,增加其非线性表示能力

线性回归

A、线性回归

假设有数据有:

677e30492981ea46ddbbc50d079c2761.png

其中

ad717cdce1007c07036ea689b88b2eb0.png

,

2b77546b39fe297c3ac5636f25333095.png

。其中m为训练集样本数,n为样本维度,y是样本的真实值。线性回归采用一个高维的线性函数来尽可能的拟合所有的数据点,最简单的想法就是最小化函数值与真实值误差的平方(概率解释-高斯分布加最大似然估计)。即有如下目标函数:

a51993f650240790f3e99bab427877c8.png

其中线性函数如下:

6488fd2fcac19bc3cc88a0c5ee342ffe.png

构建好线性回归模型的目标函数之后,接下来就是求解目标函数的最优解,即一个优化问题。常用的梯度优化方法都可以拿来用,这里以梯度下降法来求解目标函数。

2077a238a07e01367b299b3e49d15975.png

另外,线性回归也可以从最小二乘法的角度来看,下面先将样本表示向量化,

bc4dd7ed60ed7d1bc8d91521cff7c2a7.png

f92ceff54972fe5f239643dda41680a4.png

,构成如下数据矩阵。

03f2af3cd2367f3b10e9d9a8d289cb5b.png

那么目标函数向量化形式如下:

98666c9a1d8e2c6a6ee1c0712d207c35.png

可以看出目标函数是一个凸二次规划问题,其最优解在导数为0处取到。

38d165b4697e9805e976d279e82d822f.png

值得注意的上式中存在计算矩阵的逆,一般来讲当样本数大于数据维度时,矩阵可逆,可以采用最小二乘法求得目标函数的闭式解。当数据维度大于样本数时,矩阵线性相关,不可逆。此时最小化目标函数解不唯一,且非常多,出于这样一种情况,我们可以考虑奥卡姆剃刀准则来简化模型复杂度,使其不必要的特征对应的w为0。所以引入正则项使得模型中w非0个数最少。当然,岭回归,lasso回归的最根本的目的不是解决不可逆问题,而是防止过拟合。

B、概率解释

损失函数与最小二乘法采用最小化平方和的概率解释。假设模型预测值与真实值的误差为

ce4249ab29c037a691d67014609e83ef.png

,那么预测值

45735bc15188a02f0569c554719ac497.png

与真实值

0902bfb631aef3abed7000d96ac38dd7.png

之间有如下关系:

27bdc59330956761d462700690e2d6a0.png


根据中心极限定理,当一个事件与很多独立随机变量有关,该事件服从正态分布 。一般来说,连续值我们都倾向于假设服从正态分布。假设每个样本的误差

ce4249ab29c037a691d67014609e83ef.png

独立同分布均值为0,方差为σ的高斯分布

160dacdb11bcb42a5c0994e81d1be29d.png

,所以有:

cb3e86b5a26fddbf9c4d52b3fb2b2492.png

即表示

0902bfb631aef3abed7000d96ac38dd7.png

满足以均值为

b4b4c8057240e9dd67745a1bbbc3ea61.png

,方差为

ce4249ab29c037a691d67014609e83ef.png

的高斯分布。

758aa18210d32f93791dc6361361b5bb.png

由最大似然估计有:

87d2197ac109d0dcae95c8f3128f7ee2.png

岭回归和Lasso回归

岭回归的目标函数在一般的线性回归的基础上加入了正则项,在保证最佳拟合误差的同时,使得参数尽可能的“简单”,使得模型的泛化能力强(即不过分相信从训练数据中学到的知识)。正则项一般采用一,二范数,使得模型更具有泛化性,同时可以解决线性回归中不可逆情况。

b1eaa2967307d6d3c09bca7022ed0326.png


其迭代优化函数如下:

38515607b37633f26df42fd106b10ded.png


另外从最小二乘的角度来看,通过引入二范正则项,使其主对角线元素来强制矩阵可逆。

919b1a249434d0739f12da33c31cd8b3.png


Lasso回归采用一范数来约束,使参数非零个数最少。而Lasso和岭回归的区别很好理解,在优化过程中,最优解为函数等值线与约束空间的交集,正则项可以看作是约束空间。可以看出二范的约束空间是一个球形,而一范的约束空间是一个方形,这也就是二范会得到很多参数接近0的值,而一范则尽可能非零参数最少。

64152818df53f82679db3f74cac3af1f.png

值得注意的是线性模型的表示能力有限,但是并不一定表示线性模型只能处理线性分布的数据。这里有两种常用的线性模型非线性化。对于上面的线性函数的构造,我们可以看出模型在以

cad7a5fe990f121843430fffa00d62d2.png

的坐标上是线性的,但是并不表示线性的模型就一定只能用于线性分布问题上。假如我们只有一个特征

0382374c86a427f4efe21a2ae11ec553.png

,而实际上回归值是

76e80194e3be7b6683b0c5735dba47d5.png

等,我们同样可以采用线性模型,因为我们完全可以把输入空间映射到高维空间

de85f2ad55eee95782b1748c827181bf.png

,其实这也是核方法以及PCA空间变换的一种思想,凡是对输入空间进行线性,非线性的变换,都是把输入空间映射到特征空间的思想,所以只需要把非线性问题转化为线性问题即可。另外一种是局部线性思想,即对每一个样本构建一个加权的线性模型。

局部加权线性回归

考虑到线性回归的表示能力有限,可能出现欠拟合现象。局部加权线性回归为每一个待预测的点构建一个加权的线性模型。其加权的方式是根据预测点与数据集中点的距离来为数据集中的点赋权重,当某点距离预测点较远时,其权重较小,反之较大。由于这种权重的机制引入使得局部加权线性回归产生了一种局部分段拟合的效果。由于该方法对于每一个预测点构建一个加权线性模型,都要重新计算与数据集中所有点的距离来确定权重值,进而确定针对该预测点的线性模型,计算成本高,同时为了实现无参估计来计算权重,需要存储整个数据集。

局部加权线性回归,在线性回归基础上引入权重,其目标函数(下面的目标函数是针对一个预测样本的)如下:

3cefc46fd1a68eb3870aa6efca29fe1c.png


一般选择下面的权重函数,权重函数选择并非因为其类似于高斯函数,而是根据数据分布的特性,但权重函数的选取并不一定依赖于数据特性。

7fdbab0b7b2388503adfde3291c9bf0b.png


其中是待预测的一个数据点。

对于上面的目标函数,我们的目标同样是求解使得损失函数最小化,同样局部加权线性回归可以采用梯度的方法,也可以从最小二乘法的角度给出闭式解。

e0a2189cc7f6698816832cffaa419a46.png

其中

e5862597752da8da203856c484874fa8.png

是对角矩阵,

1270240a2c28702fd09e8c283bcec064.png

线性回归核心思想最小化平方误差,可以从最小化损失函数和最小二乘角度来看,优化过程可以采用梯度方法和闭式解。在闭式解问题中需要注意矩阵可逆问题。考虑到过拟合和欠拟合问题,有岭回归和lasso回归来防止过拟合,局部加权线性回归通过加权实现非线性表示。

代码实战

A、线性回归

/**线性回归函数的实现,考虑一般的线性回归,最小平方和作为损失函数,则目标函数是一个无约束的凸二次规划问题,由凸二次规划问题的极小值在导数为0处取到,且极小值为全局最小值,且有闭式解。根据数学表达式实现矩阵之间的运算求得参数w。**/int regression(Matrix x,Matrix y){ Matrix xT=x.transposeMatrix(); Matrix xTx=xTx.multsMatrix(xT,x); Matrix xTx_1=xTx.niMatrix(); Matrix xTx_1xT=xTx_1xT.multsMatrix(xTx_1,xT); Matrix ws; ws=ws.multsMatrix(xTx_1xT,y); cout<

B、岭回归和Lasso回归

/**下面的岭回归函数只是在一般的线性回归函数的基础上在对角线上引入了岭的概念,不仅有解决矩阵不可逆的线性,同样也有正则项的目的,采用常用的二范数就得到了直接引入lam的形式。**/int ridgeRegres(Matrix x,Matrix y,double lam){ Matrix xT=x.transposeMatrix(); Matrix xTx=xTx.multsMatrix(xT,x); Matrix denom(xTx.row,xTx.col,lam,"diag"); xTx=xTx.addMatrix(xTx,denom); Matrix xTx_1=xTx.niMatrix(); Matrix xTx_1xT=xTx_1xT.multsMatrix(xTx_1,xT); Matrix ws=ws.multsMatrix(xTx_1xT,y); cout<

C、局部加权线性回归

/**局部加权线性回归是在线性回归的基础上对每一个测试样本(训练的时候就是每一个训练样本)在其已有的样本进行一个加权拟合,权重的确定可以通过一个核来计算,常用的有高斯核(离测试样本越近,权重越大,反之越小),这样对每一个测试样本就得到了不一样的权重向量,所以最后得出的拟合曲线不再是线性的了,这样就增加的模型的复杂度来更好的拟合非线性数据。**///需要注意的是局部加权线性回归是对每一个样本进行权重计算,所以对于每一个样本都有一个权重w,所以下面的函数只是局部线性回归的一个主要辅助函数Matrix locWeightLineReg(Matrix test,Matrix x,Matrix y,const double &k){ Matrix w(x.row,x.row,0,"T"); double temp=0; int i,j; /** 根据测试样本点与整个样本的距离已经选择的核确定局部加权矩阵,采用对角线上为局部加权值 **/ for(i=0;i

详细代码: https://github.com/myazi/myLearn/blob/master/LineReg.cpp

The End

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

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

相关文章

优先队列默认是小顶堆吗_一分钟带你读懂什么是堆?

堆其实就是一种特殊的队列——优先队列。 普通的队列游戏规则很简单&#xff1a;就是先进先出&#xff1b;但这种优先队列搞特殊&#xff0c;不是按照进队列的时间顺序&#xff0c;而是按照每个元素的优先级来比拼&#xff0c;优先级高的在堆顶。 这也很容易理解吧&#xff0c;…

python 注释一段话_Python快速入门(一)

引言Python作为一个&#xff0c;目前最火的编程语言之一&#xff0c;已经渗透到了各行各业。它易学好懂&#xff0c;拥有着丰富的库&#xff0c;功能齐全。人生苦短&#xff0c;就用Python。这个快速入门系列分为六篇&#xff0c;包含了Python大部分基础知识&#xff0c;每篇阅…

linux ibus获取窗体位置,Ubuntu 12.04 显示ibus 的输入框

在虚拟机中安装了Ubuntu 12.04&#xff0c;系统是英文版本的&#xff0c;我能接受&#xff0c;但是苦于没有中文输入法。起先&#xff0c;我是安装SCIM&#xff0c;结果我折腾了半天&#xff0c;发现其只能在lib-office下使用。firefox,文字编辑器中都不能调出SCIM。无奈将其卸…

python批量下载文件教程_Python抓包菜鸟教程:批量下载图片的方法,电脑和手机都能用...

笔者看上了一组图集&#xff0c;然后准备一张一张下载时&#xff0c;瞄了一眼&#xff0c;这组图集还有100&#xff0c;好吧&#xff0c;我酸了。 笔者就是试试工具&#xff0c;你们别像我这样用&#xff0c;这么好的工具&#xff0c;做自媒体&#xff0c;那绝对了那如何批量下…

esxi挂载Linux的nfs盘,ESXi安装centos7挂载群晖NFS

前段时间折腾了ESXi&#xff0c;然后无尽的折腾接踵而来&#xff0c;今天要说的是如何安装centos7并挂载群晖虚拟机的NFS共享文件夹直接步入正题&#xff01;先是下载centos7镜像&#xff0c;因为我是用来当服务器的&#xff0c;所以只需要minimal版即可【centos下载链接】自己…

传统的6d位姿估计fangfa1_李飞飞团队最新论文:基于anchor关键点的类别级物体6D位姿跟踪...

点击上方“3D视觉工坊”&#xff0c;选择“星标”干货第一时间送达简介作者提出了一种基于RGB-D的深度学习方法6PACK&#xff0c;能够实时的跟踪已知类别物体。通过学习用少量的3D关键点来简洁地表示一个物体&#xff0c;基于这些关键点&#xff0c;通过关键点匹配来估计物体在…

安卓system镜像分区_玩机爱好者想要的PT分区到底是什么?可以使现有的安卓系统更快!...

小编第一次看见PT分区这个词。就比较好奇他到底是什么神仙技术。今天&#xff0c;小编给大家科普一下&#xff0c;可能小编理解的也不是特别准确&#xff0c;请各位谅解&#xff01;&#xff01; 欢迎关注小编。各位玩机爱好者总是沉浸在各种ROM包、第三发Rec&#xff0c;以及各…

python求和1到100_python等差数列求和公式前 100 项的和实例

python等差数列求和公式前 100 项的和实例 最近跑去学了下python,一个很简单的题&#xff0c;结果发现数学公示忘了&#xff0c;在不用for循环的情况下居然有些懵&#xff0c;记录为下.. 题&#xff1a;等差数列可以定义为每一项与它的前一项的差等于一个常数&#xff0c;可以用…

jupyter kernel_新乡联通案例分享:Jupyter开发环境配置的常用技巧

Jupyter开发环境配置的常用技巧新乡联通网管中心 邢少华Python开发环境中&#xff0c;大部分人使用的是Jupyter&#xff0c;在Jupyter中有几个令人困扰的问题&#xff1a;1. Jupyter的默认打开目录如何修改2. Jupyter默认使用的浏览器如何修改3. 好用的Jupyter插件如何安装4.…

二叉树 中序遍历 python_LeetCode 105 树 从前序与中序遍历序列构造二叉树(Medium)

17(105) 从前序与中序遍历序列构造二叉树(Medium)描述根据一棵树的前序遍历与中序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。示例例如&#xff0c;给出前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7]返回如下的二叉树&#xff1a;3/ 9 20/ 1…

计算payload长度c语言,C语言0长度数组(可变数组/柔性数组)详解

1 零长度数组概念众所周知, GNU/GCC 在标准的 C/C 基础上做了有实用性的扩展, 零长度数组(Arrays of Length Zero) 就是其中一个知名的扩展.多数情况下, 其应用在变长数组中, 其定义如下struct Packet{ int state; int len; char cData[0]; //这里的0长结构体就为变长结构体提供…

go语言调用c 的头文件 so,golang 学习(10): 使用go语言调用c语言的so动态库-Go语言中文社区...

一、前言最近在学习go&#xff0c;因为需要调用c语言打包成的so动态库里面的方法&#xff0c;避免自己再去造轮子&#xff0c;所以想直接使用golang调用so&#xff0c;但是参考了其他博客大佬写的&#xff0c;我每一步原封不动的写下来&#xff0c;结果都是一堆错误&#xff0c…

android 开机动画 渐变,[Parallax Animation]实现知乎 Android 客户端启动页视差滚动效果...

前言Parallax Scrolling (视差滚动)&#xff0c;是一种常见的动画效果。视差一词来源于天文学&#xff0c;但在日常生活中也有它的身影。在疾驰的动车上看风景时&#xff0c;会发现越是离得近的&#xff0c;相对运动速度越快&#xff0c;而远处的山川河流只是缓慢的移动着&…

python可以做计量分析吗_技术分享 - python数据分析(2)——数据特征分析(上)...

1 分布分析 分布分析能揭示数据的分布特征和分布类型。对于定量数据&#xff0c;欲了解其分布形式是对称的还是非对称的&#xff0c;发现某些特大或特小的可疑值&#xff0c;可通过绘制频率分布表、绘制频率分布直方图、绘制茎叶图进行直观地分析&#xff1b;对于定性分类数据&…

matlab的7.3版本是什么_乐建工程宝V6.3版本升级说明公告

尊敬的乐建工程宝客户&#xff1a;您好&#xff01;为了给客户提供更加优质的产品和服务&#xff0c;我司已于2019年11月20日开始乐建工程宝V6.3版本升级服务。目前&#xff0c;Android系统各应用市场已基本审核完毕&#xff0c;iOS系统已上传AppStore&#xff0c;目前苹果官方…

origin设置不同区域的颜色_[测试狗]Origin入门教程(二十四):效率翻倍小技巧——修改默认字体...

在使用Origin的时候&#xff0c;对于每次绘图都需要更改字体觉得很麻烦&#xff0c;因为Origin默认的字体为Arial&#xff0c;但是我们常用的字体一般为Times New Roman&#xff0c;在下拉框的很底部&#xff0c;每次更改都很浪费时间。那为什么不把他设置成默认字体呢&#xf…

cgi web 调用多次启动_全面了解CGI、FastCGI、PHPFPM

一、抛个砖1、Web Server传递数据的方法正式说CGI之前&#xff0c;先来了解一下Web Server传递数据的另外一种方法&#xff1a;PHP Module加载方式。相信都会想起Apache吧&#xff0c;初学php时&#xff0c;在windows上安装完php和Apache之后&#xff0c;为了让Apache能够解析p…

mysql 按月和年累加_广西柳州市市场监管局公布市2020年11月(第一批)电梯按需维保试点名单...

中国质量新闻网讯 根据《柳州市改进电梯维护保养模式试点工作方案》&#xff0c;近日&#xff0c;广西柳州市市场监管局公布柳州市首批按需维保试点电梯名单&#xff0c;冠亚蓝湾国际小区和南庆安置小区共46台电梯成为首批试点电梯&#xff0c;标志着柳州市全面启动了按需维保改…

上传 mp4 格式判断_视频如何转换成通用的MP4格式?按下这个键,10秒就能搞定...

我们在网上下载视频的时候&#xff0c;有很多的视频都是无法播放的&#xff0c;或者是需要特定的播放器才可以播放。其实&#xff0c;只要把这些视频的格式转换成通用的MP4格式即可。如果你还不知道怎么转换视频格式&#xff0c;下面就教大家两个小方法&#xff0c;百试百灵。一…

android不能在主线程,安卓开发:主线程真的不能做UI操作吗?这一点很多程序员都没想到...

只要参与过安卓项目开发一两年的朋友们应该清楚&#xff0c;为了避免UI渲染出现异常安卓框架限制UI操作只能在主线程中进行&#xff0c;如果贸然在子线程做了UI操作结果会怎样&#xff1f;我们随便写下了如下测试代码。不出意外的话&#xff0c;代码执行报错抛出了名为CalledFr…