岭回归算法的原理和代码实战
岭回归算法的原理和代码实战
前言
学过吴恩达老师的机器学习入门课程都应该知道,在逻辑回归那一讲,吴老师提到了使用正则化来防止逻辑回归模型过拟合。而岭回归在这里的作用是一样的,同样也是防止模型过拟合。这两者的区别在于,同样在使用差平方作为所损失值后,前者使用梯度下降法进行参数优化,而后者使用最小二乘法计算参数。
岭回归原理
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.
从图中我们可以看出,随着λ的增大,我们所拟合的直线模型逐渐偏移数据。从另一个层面来讲,λ的增大,使得模型精度逐渐减少,同样也会减少模型的过拟合,使得模型更加符合整个数据的趋势。
总结
岭回归只是缩减法的一种,其作用就是能够减少模型的拟合度,防止过拟合。咱们前几篇文章也有说到关于防止欠拟合的方法,如果大家感兴趣的话,可以将两者方法结合起来,说不定模型的效果会更好。
岭回归算法的原理和代码实战相关推荐
- ICCV2017跟踪算法BACF原理及代码解析
文章和代码下载地址: Galoogahi H K, Fagg A, Lucey S. Learning Background-Aware Correlation Filters for Visual ...
- TPAMI2015跟踪算法KCF原理及代码解析
文章和代码下载地址: http://www.robots.ox.ac.uk/~joao/circulant/ 一.基础公式的由来 相关滤波跟踪器可以表示为最小化的岭回归问题: 表示期望相应,表示正则系 ...
- 视觉SLAM开源算法ORB-SLAM3 原理与代码解析
来源:深蓝学院,文稿整理者:何常鑫,审核&修改:刘国庆 本文总结于上交感知与导航研究所科研助理--刘国庆关于[视觉SLAM开源算法ORB-SLAM3 原理与代码解析]的公开课. ORB-SLA ...
- R构建岭回归模型(Ridge Regression)实战
R构建岭回归模型(Ridge Regression)实战 目录 R构建岭回归模型(Ridge Regression) 岭回归模型 选择最优λ值 交叉验证
- 【编程实践】Raft 算法的原理 go代码实例
文章目录 Raft 算法的原理 & go代码实例 Raft 算法的原理 使用 Go 语言实现的简单 Raft 算法示例 Raft 算法的原理 & go代码实例 Raft 算法的原理 R ...
- 【机器学习入门】(9) 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)附python完整代码和数据集
各位同学好,今天我和大家分享一下python机器学习中的逻辑回归算法.内容主要有: (1) 算法原理:(2) 精确率和召回率:(3) 实例应用--癌症病例预测. 文末有数据集和python完整代码 1 ...
- 论文|Node2vec算法原理、代码实战和在微信朋友圈的应用
1 概述 Node2vec是2016年斯坦福教授 Jure Leskovec.Aditya Grover提出的论文,论文的下载链接为:https://arxiv.org/pdf/1607.00653. ...
- 机器学习算法系列(四)- 岭回归算法(Ridge Regression Algorithm)
阅读本文需要的背景知识点:标准线性回归算法.一丢丢编程知识 一.引言 前面一节我们学习了机器学习算法系列(三)- 标准线性回归算法(Standard Linear Regression Algor ...
- 几种风控算法的原理和代码实现
一.基算法 1.决策树(Decision Tree) (1)原理:决策树根据样本数据集的数据特征对数据集进行划分,直到针对所有特征都划分过,或者划分的数据子集的所有数据的类别标签相同. (2)代码实现 ...
最新文章
- python什么模块动态调用链接库_Python调用C/C++动态链接库的方法详解
- React Native开源项目如何运行(附一波开源项目)
- python之路---迭代器和生成器
- Hierarchy视图里的Transform和Camera组件
- node.js的异步
- 【Linux】一步一步学Linux——fc命令(224)
- Mozilla官方:Firefox 3.5.1问题并非安全漏洞 仅是堆溢出Crash
- 高并发系统—通用设计方法
- 使用C#为.NET Interactive开发自定义扩展
- 杭州招聘计算机专业毕业生,毕业季必看!杭州高校毕业生就业情况:这些专业最吃香!这个岗位最缺人!...
- JAVA集合系列(3):ArrayList扩容原理分析
- redis 集群 set key报错CLUSTERDOWN Hash slot not served
- 体验数学之美——泛函
- windows service 2012阿里云服务器在搭建mysql时缺少msvcr100.dll文件解决方案
- 世界上最会“算计”的公司争相布局区块链,普华永道等四大会计师事务所的变革之路...
- ASP.NET删除服务器端文件,asp.net删除服务器上的文件
- 工作手册 会计核算制度 目录 1. 会计核算管理制度	1 2. 会计档案管理办法	4 1.会计核算管理制度 8. 1.采取借贷记账法记账,采用权责发生制,即凡是收益已经实现,用已经发生,不论款
- 流量矩阵常见的两种估计方法对比
- iOS拍照识别车牌技
- GNSS说第(七)讲---自适应动态导航定位(六)---导航解算中的误差探测、诊断与修复