超简单白话文机器学习 - 逐步回归Lasso,Ridge正则化(含算法讲解,公式全解,手写代码实现,调包实现)

1. 提高泛化能力

1.1 概念

正则化是一种在机器学习和统计建模中用于防止过拟合的技术。过拟合是指模型在训练数据上表现很好,但在未见过的测试数据或新数据上表现不佳。正则化通过在损失函数(如最小二乘误差)中添加一个惩罚项,限制模型参数的复杂度,使得模型在训练数据和测试数据上都能表现良好。

1.2 为什么需要提高泛化能力

一个高大上的名词正则化,看的人一头雾水;了解正则化之前,我们需要明白为什么我们需要正则化。

下图是一张模型最终拟合出的三种不同效果:

图一我们可以看出样本数据与最终拟合直线相差甚远,这叫做欠拟合,字面意思就是有些欠缺;

图二就是一个很好的拟合直线了,即使有一些噪音,但也无关轻重,这一类状态也是在测试集中预测效果最好的,也就是泛化能力最强。

图三就是过拟合,就像字面意思一般,拟合过头了,训练数据完全与模型贴合。我们训练模型的最终目的是预测,这一类模型使用测试集预测往往效果很不好。

重点来了,为了防止过拟合,我们就有了正则化

2. 逐步回归

正则化不是唯一降低模型过拟合的方法。

逐步回归(Stepwise regression)是一种变量选择方法,用于从大量自变量中选择出对因变量最有影响的几个,从而简化回归模型,本段落着重叙述前向逐步回归。

2.1 前向逐步回归的步骤

逐步回归的基本思想是通过剔除变量中不太重要又和其他变量高度相关的变量,降低多重共线性程度。将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除,以确保每次引入新的变量之前回归方程中只包含显著性变量。这是一个反复的过程,直到既没有显著的解释变量选入回归方程,也没有不显著的解释变量从回归方程中剔除为止,以保证最后所得到的解释变量集是最优的。

总结前向逐步回归的过程:

1. 初始化模型:

-从一个空模型开始,即模型中不包含任何自变量。

2. 选择变量:

-计算每个自变量和因变量之间的简单线性回归,并选择对因变量解释能力最强的那个变量加入模型。即选择P值最小且小于阈值的变量加入模型。

3. 更新模型:

-在已有的模型基础上,尝试加入新的自变量,并计算新的回归模型。

-比较加入新变量后的模型与原模型,根据统计准则判断是否保留。

4. 重复步骤2&3:

-不断重复上述过程,直到没有新的变量可以显著提高模型的解释能力。

2.2 如何选择变量以及更新模型

我们一般使用的P值检验去判断变量是否选择以及保留:

在选择变量中,我们对于每个变量去拟合简单线性模型,判断P值最小者去选择;

加入到模型后,重新拟合新的线性方差,若新加入的变量P值小与显著性水平,则保留该变量并继续;否则不加入这个新的变量。

P值计算步骤:

1. 拟合回归模型:

-使用最小二乘法拟合线性回归模型,计算回归系数和截距项。

2. 计算标准误差:

-标准误差反映了回归系数的不确定性,是回归系数的估计标准误差。

3. 计算t统计量:

-t统计量等于回归系数除以其标准误差。

4. 计算P值:

-根据t统计量和自由度,使用t分布计算P值。

2.3 手写代码实现

import statsmodels.api as sm
import pandas as pd# 假设 df 是包含所有变量的数据框,y 是因变量,X 是自变量
y = df['target']
X = df.drop('target', axis=1)def forward_selection(data, response, threshold_in=0.05):initial_features = []remaining_features = list(data.columns)while remaining_features:scores_with_candidates = []for candidate in remaining_features:model = sm.OLS(response, sm.add_constant(pd.DataFrame(data[initial_features + [candidate]]))).fit()p_value = model.pvalues[candidate]scores_with_candidates.append((p_value, candidate))scores_with_candidates.sort()best_p_value, best_candidate = scores_with_candidates.pop(0)if best_p_value < threshold_in:initial_features.append(best_candidate)remaining_features.remove(best_candidate)else:breakreturn initial_featuresselected_features = forward_selection(X, y)
print("Selected features: ", selected_features)

2.4 逐步回归的优点与局限性

2.4.1 优点

1. 简化模型:
   - 逐步回归通过自动选择最重要的变量,可以简化模型,减少冗余变量,提高模型的可解释性。

2. 减少过拟合:
   - 通过去除不显著的变量,逐步回归可以减少模型的复杂性,从而降低过拟合的风险。

3. 计算效率高:
   - 相较于所有可能的子集回归,逐步回归计算效率更高,适用于包含大量变量的高维数据。

4. 自动化过程:
   - 逐步回归的自动化过程使得变量选择相对简单,不需要手动挑选变量,节省时间和精力。

2.4.2 局限性

1. 忽略变量间的交互作用:
   - 逐步回归通常忽略变量间的交互作用,可能会遗漏一些对因变量有重要影响的变量组合。

2. 多重共线性问题:
   - 在存在多重共线性的情况下,逐步回归可能选择不稳定的变量,导致模型不稳定。

3. 偏差问题:
   - 逐步回归的选择过程可能引入偏差,特别是在样本量较小的情况下,选择结果可能不稳定。

4. 过于依赖统计准则:
   - 逐步回归过于依赖于统计准则(如p值、AIC、BIC等),可能忽视了业务逻辑和实际意义。

2.5 应用前景

1. 经济和金融分析:
   - 在经济和金融数据中,逐步回归可以用于选择重要的经济指标和金融变量,建立预测模型。

2. 医学研究:
   - 在医学研究中,逐步回归可以用于从大量潜在的风险因素中筛选出与疾病相关的主要因素,帮助诊断和治疗。

3. 市场营销:
   - 在市场营销中,逐步回归可以用于分析影响消费者行为的关键因素,优化营销策略。

4. 环境科学:
   - 在环境科学中,逐步回归可以用于分析环境数据,识别对环境变化最重要的因素。

5. 社会科学:
   - 在社会科学研究中,逐步回归可以用于分析社会调查数据,找出影响社会现象的关键因素。

3. 正则化

正则化是机器学习中防止模型过拟合的重要技术,通过对模型复杂度施加惩罚来提高模型的泛化能力。常见的算法有L1正则化(Lasso),L2正则化(Ridge)。

3.1 Lasso

3.1.1 概述

Lasso通过在损失函数中加入权重系数的绝对值的和来约束模型。

它的特点在于会讲一些权重系数缩减为零,从而实现特征选择。

其中正则化参数一般通过交叉验证进行选择,提高模型的性能与泛化能力。

3.1.2 Lasso程序实现

from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 假设 X 是自变量,y 是因变量
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)lasso = Lasso(alpha=1.0)  # alpha 是正则化参数λ
lasso.fit(X_train, y_train)
y_pred = lasso.predict(X_test)
mse = mean_squared_error(y_test, y_pred)print("Lasso MSE:", mse)
print("Coefficients:", lasso.coef_)

3.2 Ridge

3.2.1 概述

与Lasso不同的是,这里所加入的权重系数是平方和的形式进行约束。

特别适用于处理多重共线性问题,防止模型权重过大,提供更加稳定的解。但相反,Ridge不会将权重系数缩减为零,因此无法进行特征选择。

3.2.2 Ridge程序实现

from sklearn.linear_model import Ridgeridge = Ridge(alpha=1.0)  # alpha 是正则化参数λ
ridge.fit(X_train, y_train)
y_pred = ridge.predict(X_test)
mse = mean_squared_error(y_test, y_pred)print("Ridge MSE:", mse)
print("Coefficients:", ridge.coef_)

3.3 应用前景

1. 高维数据分析:特别是特征数量多于样本数的场景,如基因数据分析。

2. 机器学习模型构建:提高模型的泛化能力,减少过拟合风险。

3. 经济和金融建模:处理多重共线性问题,构建稳定的预测模型。

4. 图像处理和计算机视觉:提高稳定性。

5. 自然语言处理:处理高纬度数据,如文本分析和情感分析。

4. 参考资料

带你完全读懂正则化(看这一篇就够了)-CSDN博客

Lasso回归与岭回归(附可视化计算过程) - 知乎

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

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

相关文章

【Spring】Spring事务管理

1. 事务的基本概念 1.1简介 数据库事务是指作为单个逻辑工作单元执行的一系列操作&#xff0c;要么完全地执行&#xff0c;要么完全地不执行。Spring的事务管理主要基于AOP&#xff08;面向切面编程&#xff09;技术&#xff0c;通过声明式或编程式的方式来实现。Spring框架内…

仓库管理WMS软件(Warehouse Management Software)百科解析

一、什么是仓库管理软件&#xff08;WMS&#xff09;&#xff1f; 仓库管理软件&#xff08;WMS&#xff09;全称Warehouse Management System&#xff0c;是一种专门用于仓库作业流程优化和库存控制的软件系统。它通过先进的自动识别与数据采集技术&#xff0c;实现对仓库货物…

Leecode热题100---114:二叉树展开为链表

题目&#xff1a; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同…

SCSS基本使用

SCSS&#xff08;Sassy CSS&#xff09;是一种 CSS 预处理器&#xff0c;它是 CSS 语言的一个扩展&#xff0c;增加了变量、嵌套规则、混合&#xff08;mixins&#xff09;、函数等功能&#xff0c;使得编写 CSS 更加高效和易于维护。SCSS 代码最终会被编译成标准的 CSS 代码。…

Lambda表达式使用及详解

Java 8引入的Lambda表达式是一种重要的功能&#xff0c;它允许你以更简洁、更直接的方式传递方法。Lambda可以被用来代替只有单个抽象方法的接口的匿名实现类。这里有一些Lambda表达式的实际应用场景及其示例&#xff1a; 1. 集合操作 在处理集合时&#xff0c;如List或Set&a…

Oracle数据库中的PCTFREE解析

PCTFREE是Oracle数据库中用于表或索引段空间管理的一个重要存储参数。这个参数定义了一个数据块中保留的最小空闲空间百分比&#xff0c;旨在为现有行的未来更新预留空间。具体来说&#xff1a; 当设置一个数据块的PCTFREE值时&#xff0c;你实际上是告诉Oracle在这个数据块填满…

Spring Boot | Spring Boot 实现 “记住我“ 功能

目录: 一、SpringBoot 中 自定义 "用户授权管理" ( 总体内容介绍 )二、实现 "记住我" 功能 ( 通过 "HttpSecurity类" 的 rememberMe( )方法来实现 "记住我" 功能 ) :2.1 基于 "简单加密 Token" 的方式 ( 实现 "记住我&…

av_dump_format经验分析,FFmpeg获取媒体文件总时长(FLV获取总时长的误区)

播放器有个功能&#xff0c;当用户打开视频时&#xff0c;需要读取媒体文件的总时长等信息&#xff0c;不巧的时&#xff0c;获取FLV时总失败&#xff0c;下面来具体分析下FLV和MP4获取总时长的原因和区别&#xff1a; 播放器有个获取MediaInfo的接口&#xff0c;功能如下&am…

python web自动化(关键字驱动与POM)

1.关键字驱动解析 所谓的关键字驱动&#xff0c;本质就是函数封装的过程。 ⾃动化当中的封装⽬的是&#xff1a;拆分重复的⾏为代码和测试数据&#xff0c;增加可维护性和复⽤性 我们想要定义一个工具类 # 定义工具类&#xff08;基于基础的方法&#xff0c;进行的关键…

echarts全局设置饼图的颜色

&#x1f337;第一步 在js文件中写入你需要的颜色 这里的颜色也可以写渐变的 &#x1f337;下一步 在main.is中引用全局挂载 &#x1f337;最后一步 在初始化的时候加一个macarons即可 &#x1f337;第一步 在js文件中写入你需要的颜色 这里的颜色也可以写渐变的 (functi…

探索k8s集群中kubectl的陈述式资源管理

一、k8s集群资源管理方式分类 1.1陈述式资源管理方式&#xff1a;增删查比较方便&#xff0c;但是改非常不方便 使用一条kubectl命令和参数选项来实现资源对象管理操作 即通过命令的方式来实 1.2声明式资源管理方式&#xff1a;yaml文件管理 使用yaml配置文件或者json配置文…

【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法

文章目录 前言 Timer中断调度 Event中断调度 StateFlow调度 分析和应用 总结 参考资料 前言 近期在一些嵌入式系统开发项目中&#xff0c;在使用嵌入式处理器时&#xff0c;遇到了挺多费时费力的事情。所以利用晚上和周末时间&#xff0c;在这些方面深入研究了一下&…

全文索引-FullText

一、数据结构 倒排索引&#xff1a;存储单词与文档的映射 1、正向索引 正向索引结构如下: 文档1的ID→单词1的信息&#xff1b;单词2的信息&#xff1b;单词3的信息… 文档2的ID→单词3的信息&#xff1b;单词2的信息&#xff1b;单词4的信息… 2、反向索引 反向索引结构如…

AWS安全性身份和合规性之Inspector

Amazon Inspector 是一项漏洞管理服务&#xff0c;可持续扫描您的 AWS 工作负载&#xff0c;以查找软件漏洞和意外网络泄露。Amazon Inspector 会自动发现和扫描正在运行的亚马逊 EC2 实例、亚马逊弹性容器注册表 (Amazon ECR) Container Registry 中的容器映像&#xff0c;以及…

Joomla 3.7.0 (CVE-2017-8917) SQL注入漏洞环境

1 漏洞概述 Joomla是一个基于PHP的内容管理系统&#xff08;CMS&#xff09;&#xff0c;广泛应用于各类网站。2017年&#xff0c;Joomla 3.7.0版本被发现存在SQL注入漏洞&#xff08;CVE-2017-8917&#xff09;&#xff0c;攻击者可以利用该漏洞对数据库进行未授权查询或操作…

前端常用的状态码

常用状态码 常用状态码大家可以记一下&#xff0c;所有的也记不住&#xff0c;简洁几个字概括一下&#xff0c;方便大家进行记忆。 200 OK&#xff1a;请求成功 401 Unauthorized&#xff1a;未授权&#xff0c;未登录 403 Forbidde&#xff1a;已登录&#xff0c;但是对于…

The Sandbox 和 Bitkub 联手增强东南亚元宇宙中心

作为去中心化游戏虚拟世界和区块链平台的先驱&#xff0c;The Sandbox 正与泰国领先的区块链网络 Bitkub Blockchain Technology Co., Ltd. 展开创新合作。双方合作的目的是将Bitkub元宇宙的影响力扩展到The Sandbox&#xff0c;建立一个元宇宙中心&#xff0c;向用户承诺从 Bi…

C# GetManifestResourceStream 获取项目资源为null解决方案(亲测)

GetManifestResourceStream 获取项目资源为null 使用Stream s assembly.GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name resourceName) 获取资源文件&#xff0c;返回流为null&#xff0c;如图所示&#xff1a; 解决方案 设置资源文件的 属性&…

centos服务器常用清理脚本分享

做开发时&#xff0c;经常遇到服务器监控报警&#xff0c;日志占据大量的磁盘空间&#xff0c;需要清理。每次手动清理很麻烦。这里分享一些定时清理的脚本&#xff0c;减轻运维的工作量。将sh脚本与crontab定时任务结合&#xff0c;实现定时清理。 nacos日志清理脚本 nacos也…

WPF--几种常用定时器Timer汇总

1.WPF中常用4种Timer&#xff1a; System.Windows.Threading.DispatcherTimer(UI操作线程) 这是一个基于WPF Dispatcher的计时器。它可以在指定的时间间隔内触发Tick事件&#xff0c;并在UI线程上执行回调函数&#xff0c;方便进行UI更新操作。 System.Timers.Timer 这是一个基…