岭回归算法的原理和代码实战

前言

学过吴恩达老师的机器学习入门课程都应该知道,在逻辑回归那一讲,吴老师提到了使用正则化来防止逻辑回归模型过拟合。而岭回归在这里的作用是一样的,同样也是防止模型过拟合。这两者的区别在于,同样在使用差平方作为所损失值后,前者使用梯度下降法进行参数优化,而后者使用最小二乘法计算参数。

岭回归原理

1. 前情回顾

前面咱们写过一篇博客,主要说的是使用最小二乘法解决一般线性回归问题,如果大家没有看过,请看一下。线性回归算法拟合数据原理分析以及源代码解析

不想看没关系,咱们在这里把重要推导公式再写一遍:

直线方程:

损失值函数:

向量书写:

式子展开:

求导:

令导数为零,求出α:

2. 岭回归公式推导

看完一般线性回归推导式后,我们对上面的式子稍微做一些改变。

首先我们在损失函数上添加惩罚项,与文首咱们说的正则化项基本一致。

对于λ,其值越大,对整个损失函数的惩罚就越大,换句话意思就是λ值越大,对α参数的变化就更加敏感。我们假设λ为10的时候,α²有0.1的变化,整理就会产生1的变化。如果λ为10000,α²有0.1的变化,整体就有1000的变化。

接着我们把公式进行向量化:

我们对其进行求导:

我们令其导数为零,可以求出来α,

好了,到这里我们就得出来这个参数α了,其中I是常向量E。

α新式子另一个优势

我们知道这个式子里面X代表数据。

如果我们数据的属性要大于数据量,那么这个X矩阵则是奇异矩阵(矩阵的模为0),即表示X矩阵不可逆。所以XTX这个求解的矩阵,也会存在不可逆的情况。此时我们添加了一个λI,可以避免不可逆现象的出现。

岭回归代码实战

1. 数据集的加载

我们先来看一下数据集的属性有哪些:

图中最坐标红色方块是数据的常数1,用来求解常量,对应着就是我们前面公式的b。

中间黄色的是我们的属性值α1.

最右边白色的是我们数据的值,也就是y值。

我们来看一下数据的分布情况:

def LoadData(filename):dataMat = []labelMat = []with open(filename) as f:numFeat = len(f.readline().split('\t'))-1#这里会导致忽略第一个数据for line in f.readlines():lineArr = []curLine = line.strip().split('\t')for i in range(numFeat):lineArr.append(float(curLine[i]))dataMat.append(lineArr)labelMat.append(float(curLine[-1]))return dataMat,labelMat

这里将text数据集分别放入到两个数组中

2. 主函数,计算模型参数

## 主函数,计算模型参数
def ridgeRegres(xMat,yMat,lam=0.2):xTx = xMat.T*xMatdenom = xTx+np.eye(np.shape(xMat)[1])*lamif np.linalg.det(denom)==0.0:print("This matrix is singular ,cannot do inverse")returnws = denom.I*(xMat.T*yMat)return ws

这一部分是整个代码中最关键的部分,用来计算模型参数。

代码中的ws对应着公式中的α。

denom.I 表示对denom取逆。

3. 交叉验证,选择合适的λ

def Cross_validation(xMat,yMat,ridgeWeights,lamudas):yMat = np.array(yMat).reshape((len(yMat),1))lossvalue = []for i in range(9):yHat = xMat*np.mat(ridgeWeights[i]).Tlossvalue.append(np.sum(np.abs(yHat-yMat)))lossvalue = np.array(lossvalue)result = lossvalue.argmin()return lamudas[result]

这个函数,我们主要是通过比较不同λ产生的预测值与原标签值的损失值,选择可以使损失值达到最小的λ值。

这里为了计算的方便,我们使用了绝对值代替的平方,但是最终产生的结果都是一样的。

结果分析

首先我们先输出不同λ对应的不同图像,我将这九个图形放在了一张图形中,方便我们去比较,观察。

经交叉验证输出,最优的λ取值是1.0.

从图中我们可以看出,随着λ的增大,我们所拟合的直线模型逐渐偏移数据。从另一个层面来讲,λ的增大,使得模型精度逐渐减少,同样也会减少模型的过拟合,使得模型更加符合整个数据的趋势。

总结

岭回归只是缩减法的一种,其作用就是能够减少模型的拟合度,防止过拟合。咱们前几篇文章也有说到关于防止欠拟合的方法,如果大家感兴趣的话,可以将两者方法结合起来,说不定模型的效果会更好。

岭回归算法的原理和代码实战相关推荐

  1. ICCV2017跟踪算法BACF原理及代码解析

    文章和代码下载地址: Galoogahi H K, Fagg A, Lucey S. Learning Background-Aware Correlation Filters for Visual ...

  2. TPAMI2015跟踪算法KCF原理及代码解析

    文章和代码下载地址: http://www.robots.ox.ac.uk/~joao/circulant/ 一.基础公式的由来 相关滤波跟踪器可以表示为最小化的岭回归问题: 表示期望相应,表示正则系 ...

  3. 视觉SLAM开源算法ORB-SLAM3 原理与代码解析

    来源:深蓝学院,文稿整理者:何常鑫,审核&修改:刘国庆 本文总结于上交感知与导航研究所科研助理--刘国庆关于[视觉SLAM开源算法ORB-SLAM3 原理与代码解析]的公开课. ORB-SLA ...

  4. R构建岭回归模型(Ridge Regression)实战

    R构建岭回归模型(Ridge Regression)实战 目录 R构建岭回归模型(Ridge Regression) 岭回归模型 选择最优λ值 交叉验证

  5. 【编程实践】Raft 算法的原理 go代码实例

    文章目录 Raft 算法的原理 & go代码实例 Raft 算法的原理 使用 Go 语言实现的简单 Raft 算法示例 Raft 算法的原理 & go代码实例 Raft 算法的原理 R ...

  6. 【机器学习入门】(9) 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)附python完整代码和数据集

    各位同学好,今天我和大家分享一下python机器学习中的逻辑回归算法.内容主要有: (1) 算法原理:(2) 精确率和召回率:(3) 实例应用--癌症病例预测. 文末有数据集和python完整代码 1 ...

  7. 论文|Node2vec算法原理、代码实战和在微信朋友圈的应用

    1 概述 Node2vec是2016年斯坦福教授 Jure Leskovec.Aditya Grover提出的论文,论文的下载链接为:https://arxiv.org/pdf/1607.00653. ...

  8. 机器学习算法系列(四)- 岭回归算法(Ridge Regression Algorithm)

    阅读本文需要的背景知识点:标准线性回归算法.一丢丢编程知识 一.引言   前面一节我们学习了机器学习算法系列(三)- 标准线性回归算法(Standard Linear Regression Algor ...

  9. 几种风控算法的原理和代码实现

    一.基算法 1.决策树(Decision Tree) (1)原理:决策树根据样本数据集的数据特征对数据集进行划分,直到针对所有特征都划分过,或者划分的数据子集的所有数据的类别标签相同. (2)代码实现 ...

最新文章

  1. python什么模块动态调用链接库_Python调用C/C++动态链接库的方法详解
  2. React Native开源项目如何运行(附一波开源项目)
  3. python之路---迭代器和生成器
  4. Hierarchy视图里的Transform和Camera组件
  5. node.js的异步
  6. 【Linux】一步一步学Linux——fc命令(224)
  7. Mozilla官方:Firefox 3.5.1问题并非安全漏洞 仅是堆溢出Crash
  8. 高并发系统—通用设计方法
  9. 使用C#为.NET Interactive开发自定义扩展
  10. 杭州招聘计算机专业毕业生,毕业季必看!杭州高校毕业生就业情况:这些专业最吃香!这个岗位最缺人!...
  11. JAVA集合系列(3):ArrayList扩容原理分析
  12. redis 集群 set key报错CLUSTERDOWN Hash slot not served
  13. 体验数学之美——泛函
  14. windows service 2012阿里云服务器在搭建mysql时缺少msvcr100.dll文件解决方案
  15. 世界上最会“算计”的公司争相布局区块链,普华永道等四大会计师事务所的变革之路...
  16. ASP.NET删除服务器端文件,asp.net删除服务器上的文件
  17. 工作手册 会计核算制度 目录 1. 会计核算管理制度 1 2. 会计档案管理办法 4 1.会计核算管理制度 8. 1.采取借贷记账法记账,采用权责发生制,即凡是收益已经实现,用已经发生,不论款
  18. 流量矩阵常见的两种估计方法对比
  19. iOS拍照识别车牌技
  20. GNSS说第(七)讲---自适应动态导航定位(六)---导航解算中的误差探测、诊断与修复

热门文章

  1. php去除某个字符,php怎样去掉某个字符串
  2. 能源之战---盗梦空间的真实含义
  3. 极米科技的高光与暗影
  4. OSChina 周四乱弹 —— 优衣库集合
  5. 点到直线垂足坐标的计算
  6. matlab怎么排列一群变量,添加、删除和重新排列表变量
  7. 前端框架Layui实现动态表格效果用户管理实例(对表格进行CRUD操作-附源码)
  8. matlab求两向量夹角_初学讲义之高中数学十四:向量的数量积
  9. Java初学者作业——编写JAVA程序,根据用户输入课程名称,输出对应课程的简介,各门课程的简介见表
  10. Python---re模块 正则表达式的