岭回归(Ridge Regression)及实现

2023-11-13

岭回归(Ridge Regression)及实现

https://blog.csdn.net/google19890102/article/details/27228279

一、一般线性回归遇到的问题

    在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:

在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:
  预测精度:这里要处理好这样一对为题,即样本的数量和特征的数量
  模型的解释能力:如果模型中的特征之间有相互关系,这样会增加模型的复杂程度,并且对整个模型的解释能力并没有提高,这时,我们就要进行特征选择。

  • 预测精度:这里要处理好这样一对为题,即样本的数量和特征的数量
    • 时,最小二乘回归会有较小的方差
    • 时,容易产生过拟合
    • 时,最小二乘回归得不到有意义的结果
  • 模型的解释能力:如果模型中的特征之间有相互关系,这样会增加模型的复杂程度,并且对整个模型的解释能力并没有提高,这时,我们就要进行特征选择。

以上的这些问题,主要就是表现在模型的方差和偏差问题上,这样的关系可以通过下图说明:


(摘自:机器学习实战)

方差指的是模型之间的差异,而偏差指的是模型预测值和数据之间的差异。我们需要找到方差和偏差的折中。

二、岭回归的概念

    在进行特征选择时,一般有三种方式:

  • 子集选择
  • 收缩方式(Shrinkage method),又称为正则化(Regularization)。主要包括岭回归个lasso回归。
  • 维数缩减
    岭回归(Ridge Regression)是在平方误差的基础上增加正则项

,

通过确定的值可以使得在方差和偏差之间达到平衡:随着的增大,模型方差减小而偏差增大。

    对求导,结果为


令其为0,可求得的值:


三、实验的过程

    我们去探讨一下取不同的对整个模型的影响。


MATLAB代码

主函数

%% 岭回归(Ridge Regression)

%导入数据
data = load(‘abalone.txt’);
[m,n] = size(data);

dataX = data(:,1:8);%特征
dataY = data(:,9);%标签

%标准化
yMeans = mean(dataY);
for i = 1:m
yMat(i,:) = dataY(i,:)-yMeans;
end

xMeans = mean(dataX);
xVars = var(dataX);
for i = 1:m
xMat(i,:) = (dataX(i,:) - xMeans)./xVars;
end

% 运算30
testNum = 30;
weights = zeros(testNum, n-1);
for i = 1:testNum
w = ridgeRegression(xMat, yMat, exp(i-10));
weights(i,:) = w’;
end

% 画出随着参数lam
hold on
axis([-9 20 -1.0 2.5]);
xlabel log(lam);
ylabel weights;
for i = 1:n-1
x = -9:20;
y(1,:) = weights(:,i)’;
plot(x,y);
end

岭回归求回归系数的函数

function [ w ] = ridgeRegression( x, y, lam )
    xTx = x'*x;
    [m,n] = size(xTx);
    temp = xTx + eye(m,n)*lam;
    if det(temp) == 0
        disp('This matrix is singular, cannot do inverse');
    end
    w = temp^(-1)*x'*y;
end

https://www.jianshu.com/p/4880d476d40e

  • 概述

  对于普通最小二乘的参数估计问题,当模型的各项是相关时,最小二乘估计对于随机误差非常敏感,会产生很大的方差。一般来说,对于没有经过实验设计搜集到的数据,很容易出现这种多重共线性。而岭回归在最小二乘法的基础上通过对回归系数施加‘惩罚’来解决这些问题,具体来说,就是在偏差平方和函数中加上了一个l2正则项,通过正则项来调节参数,删除那些相关的项。岭回归y=Xw的误差平方和函数\xi(x)为:\xi(x)=\|Xw-y\|_2^2+\alpha\|w\|_2^2
其中,\alpha\ge0是控制系数伸缩量的参数,可以通过\alpha的值使模型的方差和偏差达到平衡。随着\alpha的增大,方差减小而偏差增大。

  • 实际应用
    Scitkit-learn使用Ridge()函数实现岭回归。
class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)¶
  • Parameters
    alpha:正则化系数,较大的值指定更强的正则化。
    fit_intercept:是否计算模型的截距,默认为True,计算截距

normalize:在需要计算截距时,如果值为True,则变量x在进行回归之前先进行归一化(x = \frac{x-\bar x}{\|x\|_2}),如果需要进行标准化则normalize=False。若不计算截距,则忽略此参数。


copy_X:默认为True,将复制X;否则,X可能在计算中被覆盖。


max_iter:共轭梯度求解器的最大迭代次数。对于sparse_cglsqr,默认值由scipy.sparse.linalg确定。对于sag求解器,默认值为1000.
tol:float类型,指定计算精度。
solver:求解器{auto,svd,cholesky,lsqr,sparse_cg,sag,saga}

aotu:根据数据类型自动选择求解器
svd:使用X的奇异值分解计算岭系数。奇异矩阵比cholesky更稳定
cholesky:使用标准的scipy.linalg.solve函数获得收敛的系数
sparsr_cg:使用scipy.sparse.linalg.cg中的共轭梯度求解器。作为一种迭代算法,这个求解器比cholesky更适合大规模数据(设置tol和max_iter的可能性)
lsqr:使用专用的正则化最小二乘方法scipy.sparse.linalg.lsqr
sag:使用随机平均梯度下降,saga使用其改进的,无偏见的版本,两种方法都使用迭代过程。


random_state:随机数生成器的种子。


  • Attributes

coef_:返回模型的估计系数。
intercept_:线性模型的独立项,一维情形下的截距。
n_iter:实际迭代次数。

  • Methods
    fit(X,y):使用数据训练模型
    get_params([deep=True]):返回函数LinearRegression()内部的参数值
    predict(X):使用模型做预测
    score(X,y):返回模型的拟合优度判定系数R^2

R^2为回归平方和与总离差平方和的比值,介于0-1之间,越接近1模型的拟合效果越显著。

set_params(**params):设置函数LinearRegression()内部的参数。

  • 实例
from sklearn.preprocessing import scale
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
from sklearn.datasets import load_boston
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
boston = load_boston()
X = scale(boston.data)
y = boston.target
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.8)
lmodel = Ridge(alpha=i,fit_intercept = True,solver = 'auto',copy_X=True)
lmodel.fit(X_train,y_train)
Ridge(alpha=1.0, copy_X=True, fit_intercept=True, max_iter=None,
   normalize=False, random_state=None, solver='auto', tol=0.001)
lmodel.coef_
array([-1.11125473,  0.89842868, -0.00522108,  0.65887304, -1.93970763,
        2.95928617, -0.13589642, -2.98057045,  2.57068677, -2.03507147,
       -2.02756142,  0.88785945, -3.39465369])
lmodel.intercept_
22.48662693222167
lmodel.score(X_train,y_train)
0.7818715197682596
lmodel.get_params()
{'alpha': 1.0,
 'copy_X': True,
 'fit_intercept': True,
 'max_iter': None,
 'normalize': False,
 'random_state': None,
 'solver': 'auto',
 'tol': 0.001}
error = pow(lmodel.predict(X_test)-y_test,1)/len(X_test)
plt.figure(1,dpi = 100)
plt.scatter(np.arange(len(error)),error)
plt.ylabel('残差')
plt.title('残差图')
Text(0.5,1,'残差图')
image
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

岭回归(Ridge Regression)及实现 的相关文章

  • 【数学知识】质数与质因子

    一 质数 1 概念 质数又称素数 一个大于1的自然数 xff0c 除了1和它自身外 xff0c 不能被其他自然数整除的数叫做质数 xff0c 否则称为合数 规定1既不是质数也不是合数质数的个数是无穷的 2 例题 xff1a AcWing 3
  • 数学知识---数论(质数和约数)

    文章目录 1 质数1 1质数的判定 试除法1 2分解质因数 试除法 1 3筛质数2 约数2 1试除法求约数2 2约数个数2 3约数之和2 4最大公约数 欧几里得算法 xff08 辗转相除法 xff09 1 质数 质数是针对所有大于1的自然数
  • 20201013 矩阵2范数matlab求解

    这里是引用n norm X 返回矩阵 X 的 2 范数或最大奇异值 该值近似于 max svd X 示例 n norm X p 返回矩阵 X 的 p 范数 其中 p 为 1 2 或 Inf https ww2 mathworks cn he
  • 常用的范数求导

    矢量范数的偏导数 L1范数不可微 但是存在次梯度 即是次微分的 L1范数的次梯度如下 x x 1 sign x begin equation begin aligned frac partial partial mathbf x mathb
  • 【蓝桥杯】1246. 等差数列*

    穿越隧道 计算每两项差值之间的最大公因数 最后的值则为数列的等差 include
  • 2023-9-11 高斯消元解异或线性方程组

    题目链接 高斯消元解异或线性方程组 include
  • FFT将时域信号变换到频域里面的一些重要知识点记录

    一 FFT是离散傅立叶变换 采样得到的数字信号 就可以做FFT变换了 N个采样点 经过FFT之后 就可以得到N个点的FFT结果 为了方便进行FFT运算 通常N取2的整数次方 假设采样频率为Fs 信号频率F 采样点数为N 那么FFT之后结果就
  • Acwing 893. 集合-Nim游戏

    Mex运算 设S表示一个非负整数集合 定义mex S 为求出不属于集合S的最小非负整数的运算 即 mex S min x x属于自然数 且x不属于S SG函数 在有向图游戏中 对于每个节点x 设从x出发共有k条有向边 分别到达节点y1 y2
  • Acwing-877. 扩展欧几里得算法

    include
  • 矩阵特征值与行列式、迹的关系

    矩阵特征值与行列式 迹的关系 from http www cnblogs com AndyJee p 3737592 html 矩阵的特征值之积等于矩阵的行列式 矩阵的特征值之和等于矩阵的迹 简单的理解证明如下 1 二次方程的韦达定理 请思
  • 简单博弈论(Nim游戏)

    891 Nim游戏 题目 提交记录 讨论 题解 视频讲解 给定 n 堆石子 两位玩家轮流操作 每次操作可以从任意一堆石子中拿走任意数量的石子 可以拿完 但不能不拿 最后无法进行操作的人视为失败 问如果两人都采用最优策略 先手是否必胜 输入格
  • Acwing-4644. 求和

    暴力解法 TLE了hh include
  • 浅谈对梯度下降法的理解

    浅谈梯度下降法 如果读者对方向导数和梯度的定义不太了解 请先阅读上篇文章 方向导数与梯度 前些时间接触了机器学习 发现梯度下降法是机器学习里比较基础又比较重要的一个求最小值的算法 梯度下降算法过程如下 1 随机初始值 2 迭代 直至收敛 表
  • Acwing 892. 台阶-Nim游戏

    此时我们需要将奇数台阶看做一个经典的Nim游戏 如果先手时奇数台阶上的值的异或值为0 则先手必败 反之必胜 证明 先手时 如果奇数台阶异或非0 根据经典Nim游戏 先手总有一种方式使奇数台阶异或为0 于是先手留了奇数台阶异或为0的状态给后手
  • 统计学离散型变量和连续型变量有什么区别?

    离散变量是指其数值只能用自然数或整数单位计算的则为离散变量 例如 企业个数 职工人数 设备台数等 只能按计量单位数计数 这种变量的数值一般用计数方法取得 反之 在一定区间内可以任意取值的变量叫连续变量 其数值是连续不断的 相邻两个数值可作无
  • 4261. 孤独的照片

    数据范围为500 000 所以应该控制在O nlogn 或O n 我们发现要枚举的子串它其中有一个字母只出现一次 所以 我们可以去枚举只出现一次的字母是哪个 假设在第i个位置的字母为G 我们要枚举包含这个字母的 且只包含一个G的 且长度大于
  • 2023-9-11 拆分-Nim游戏

    题目链接 拆分 Nim游戏 include
  • Acwing-4366. 上课睡觉

    假设最终答案为每堆石子均为cnt个 cnt一定可以整除sum 石子的总数 我们可以依次枚举答案 sum小于等于10 6 所以cnt的数量等于sum约数的个数 10 6范围内 约数最多的数为720720 它的约数个数有240个 int范围内
  • Acwing-4729. 解密

    如果dt小于0 或者r不是整数 或者m r是奇数的话 m 2 与 m 2 的奇偶性相同 那么方程无解 输出NO include
  • Acwing 890. 能被整除的数

    注 S 表示集合S中的元素个数 对于 S1 U S2 U S3 U U Sn 中的任意一个元素x 证明在等式右侧只被计算一次 上述证明中假设x属于k个集合 推出x会被计算的次数 注 Si是指1 n中i的倍数的个数 使用容斥原理的时间复杂度是

随机推荐

  • 如何做数据清洗?

    一 预处理阶段 预处理阶段主要做两件事情 一是将数据导入处理工具 通常来说 建议使用数据库 单机跑数搭建MySQL环境即可 如果数据量大 千万级以上 可以使用文本文件存储 python操作的方式 而是看数据 这里包含两个部分 一是看元数据
  • 第四章 索引和视图 总结

    第四章 索引和视图 1 索引 索引主要分为聚类索引和非聚类索引 聚类索引 表中数据行的物理存储顺序与索引顺序完全相同 每个表只能有一个聚类索引 物理的重拍表中的数据以符合索引约束 用于经常查找的列 非聚类索引 不改变表中数据行的物理存储位置
  • linux系统中解决docker: command not found

    新申请了一台阿里云的服务器 打算在上边部署一个容器服务 竟然发现机器上连docker都没安装 如果是mac OS系统 可以参考文章 mac系统中解决docker command not found 解决 针对这个问题 今天特意记录了一下 我
  • 网上总结的字节跳动前端面试题

    1 jQuery与Vue的区别是什么 Vue vue是一个兴起的前端js库 是一个精简的MVVM 从技术角度讲 Vue js 专注于 MVVM 模型的 ViewModel 层 它通过双向数据绑定把 View 层和 Model 层连接了起来
  • Python爬虫常见异常及解决办法

    文章目录 1 selenium common exceptions WebDriverException Message unknown error cannot find Chrome binary 方法一 配置参数 方法二 修改源文件
  • mysql学习-mysql数据类型学习01

    数据类型概览 数值类型 整数类型包括 TINYINT SMALLINT MEDIUMINT INT BIGINT 浮点数类型包括 FLOAT 和 DOUBLE 定点数类型为 DECIMAL tinyint smallint mediumin
  • 【MySQL】MYSQL内核:INNODB存储引擎 卷1pdf——百度网盘下载

    百度网盘地址 https pan baidu com s 1p4CsmBhYzrIawwUznmByYw 资源来之不易 需要获取密码 请关注公众号 全栈船长 并回复数字 0002
  • 前端开发:JS中截取字符串的用法总结,高级Android程序员必会

    var a 0123456789 a substring 5 2 4 start 和 stop 有字符串 但是最后的输出结果是 234 a substring 5 hh start 和 stop 有字符串 但是最后的输出结果是 234 二
  • 计算机在汽车设计方面的应用属于计算机的,计算机技术辅助设计在汽车设计中的应用.pdf...

    82 车辆与动力工程 Vehicles and Power Engineering 2017 年 2 月 计算机技术辅助设计在汽车设计中的应用 温 欣 汪 家宇 杨 海 南 沈 阳理工 大学 辽 宁 沈 阳 110159 摘 要 随着社会经
  • keil软件调试(Debug)仿真教程(软件调试和硬件调试的区别)及常用调试按键详解

    文章目录 前言 一 什么是软件调试 Debug 有什么用 二 keil Debug常用按钮 总结 前言 单片机的调试分为两种 一种是使用软件模拟调试 第二种是硬件调试 两种调试方式各有不同 软件模拟调试有误差 而硬件调试 借用仿真器调试是嵌
  • 新斗罗大陆手游服务器维护,《新斗罗大陆》新ss魂师天青龙牛天修复公告

    亲爱的魂师大人 新SS魂师天青龙牛天首发后 小舞收到了大量意见反馈 部分魂师大人认为牛天战斗结果异常 过高的伤害与其魂师定位不符 我们在接收到反馈的第一时间 进行了紧急核查 随后 我们发现该问题是由牛天的技能 龙魂觉醒 导致 当牛天施展该技
  • AQS原理解析及源码分析

    目录 1 介绍下AQS几个重要的组件 2 内部成员变量state 3 同步队列NODE 4 等待队列 condition AbstractQueuedSynchronizer又称为队列同步器 后面简称AQS AQS的核心思想是 如果被请求的
  • 对比梯度下降和正规方程解性能

    现在用导数的方式模拟线性回归中的梯度下降法 首先再来回顾一下梯度下降法的基础 梯度下降法不是一个机器学习算法 而是一个搜索算法 梯度下降法用在监督学习中 梯度下降法的过程 对比模型输出值和样本值的差异不断调整本省权重 直到最后模型输出值和样
  • Leetcode题解——26.树的子结构

    题目地址 剑指 Offer 26 树的子结构 力扣 LeetCode 目录 一 解题思路 一 大体思路 二 Search函数 三 Judge函数 二 代码实现 三 拓展思考 一 解题思路 一 大体思路 对于二叉树类的题目 一般会使用递归或层
  • YOLOv5 tensorRT C++代码详解之engine的读取

    在tensorRT中 engine模型是对yolov5序列化后的结果 在推理的时候需要进行反序列化才能进行推理 那么第一步就是读取engine文件 ifstream介绍 engine文件的读取需要用到ifstream 需要导入头文件 inc
  • SpringBoot最简单好用的导出导入功能,拿来即用

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 拿来吧你 一 接口说明 二 依赖 三 导出工具类 四 导入工具类 五 实体类的改造 BaseEntity java 六 控制层使用 七 效果 数据库表 1 下载模板
  • C++中三种产生随机数的方法

    第一种方法 使用时间做为生成随机数的种子 include
  • 190705 安卓-对抗AndResGuard的重打包

    换了一个apk实验后 apktool b f p xxx也不行 仍然报资源错误 看了一下可能是鹅厂出的AndResGuard工具 会将资源文件夹 Res xxx重命名为 r x类的目录 导致资源解析出错 针对这个混淆有shakaApktoo
  • volatile 的理解

    文章目录 前言 通过一系列的问题 了解volatile 总结 前言 在面试的时候 经常会遇到多线程的问题 然后面试官会提到 你是怎么做到线程安全的 然后就会涉及到关键字volatile 这个是在面试过程中高频率出现的 所以还是有必要对它进行
  • 岭回归(Ridge Regression)及实现

    岭回归 Ridge Regression 及实现 https blog csdn net google19890102 article details 27228279 一 一般线性回归遇到的问题 在处理复杂的数据的回归问题时 普通的线性回