超简单白话文机器学习 - 逐步回归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,一经查实,立即删除!

相关文章

仓库管理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 。 展开后的单链表应该与二叉树 先序遍历 顺序相同…

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…

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;在这些方面深入研究了一下&…

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;攻击者可以利用该漏洞对数据库进行未授权查询或操作…

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; 解决方案 设置资源文件的 属性&…

<MySQL> 【数据类型】

目录 一、数据类型一览 二、整型 &#xff08;一&#xff09;INT &#xff08;二&#xff09;BIT 三、浮点数 &#xff08;一&#xff09;FLOAT &#xff08;二&#xff09;DECIMAL &#xff08;三&#xff09;如何选择 四、字符 &#xff08;一&#xff09;CHAR &a…

超简单白话文机器学习 - 支持向量机SVM(含算法讲解,公式全解,手写代码实现,调包实现)

1. 支持向量机SVM 支持向量机&#xff0c;因其英文名为support vector machine&#xff0c;故一般简称SVM&#xff0c;通俗来讲&#xff0c;它是一种二类分类模型&#xff0c;其基本模型定义为特征空间上的间隔最大的线性分类器&#xff0c;其学习策略便是间隔最大化&#xff…

优雅草便民工具v2.0.4更新

优雅草便民工具v2.0.4更新 优雅草便民工具v2.0.4更新 2024年5月20日v2.0.4更新优雅草便民工具youyacao-tools-增加淘宝联想词功能和ai绘画功能apk下载 https://fenfacun.youyacao.com/tools204.apk 介绍 优雅草便民工具是一款由成都市一颗优雅草科技有限公司打造的便民查询公益…

JVM(8):虚拟机性能分析和故障解决工具之jinfo工具

1 jinfo(Configuration Info forJava)作用 实时地查看和调整虚拟机各项参数 2 命令格式 jinfo [options] 参数解释&#xff1a; 第一个参数&#xff1a;options no option&#xff1a;输出全部的参数和系统属性-flag name&#xff1a;输出对应名称的参数-flag [|-]name&am…

6. Spring面试题汇总

Java全栈面试题汇总目录-CSDN博客 1. 什么是Spring框架? Spring是一种轻量级开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 我们一般说Spring框架指的都是Spring Framework&#xff0c;它是很多模块的集合&#xff0c;使用这些模块可以很方便地协助…

如何轻松访问 Android 手机和平板电脑上的内部存储

概括 在数字设备领域&#xff0c;我们的智能手机充当虚拟金库&#xff0c;在其范围内存储个人数据、珍贵记忆和重要信息的宝库。因此&#xff0c;我们将指导您如何访问 Android 上的内部存储&#xff0c;确保您可以安全、轻松地检查内部文件系统并管理文件。同时&#xff0c;您…

无人机监测系统:天空之眼,精准掌握地球脉动

在当今信息化快速发展的时代&#xff0c;无人机技术以其独特的优势&#xff0c;正在成为资源调查、环境监测和规划支持的重要工具。无人机监测系统通过搭载多种传感器和设备&#xff0c;能够快速、高效地获取地表信息&#xff0c;为决策提供科学依据。 项目背景 随着全球环境…

Llama 3 CPU推理优化指南

备受期待的 Meta 第三代 Llama 现已发布&#xff0c;我想确保你知道如何以最佳方式部署这种最先进的 (SoTA) LLM。在本教程中&#xff0c;我们将重点介绍如何执行仅权重量化 (WOQ) 来压缩 8B 参数模型并改善推理延迟&#xff0c;但首先&#xff0c;让我们讨论一下 Meta Llama 3…

CSS基础(第五天)

目录 定位 为什么需要定位 定位组成 边偏移 静态定位 static&#xff08;了解&#xff09; 相对定位 relative 绝对定位 absolute&#xff08;重要&#xff09; 子绝父相的由来 固定定位 fixed &#xff08;重要&#xff09; 粘性定位 sticky&#xff08;了解&#xff…

常见算法(2)

1.冒泡排序 定义&#xff1a;相邻的数据两两比较&#xff0c;小的放前面&#xff0c;大的放后面。 public class test {public static void main(String [] arg) {int [] arr {2,4,5,3,6,1};//冒泡排序&#xff0c;排序次数arr.length-1for(int i0;i<arr.length-1;i) {f…