回归分析扫盲:为什么非线性模型不能直接用最优子集选择法

news2024/10/5 16:32:14

最近有人给我发了篇文章:

 一个问题有一堆变量,我们要选取哪些变量来建模呢?我们来看看这篇文章是怎么做的:

这个方法简单来说就是:对于这一堆变量,我们每次尝试剔除其中一个变量,然后用剩下的变量训练一个新模型。那么,少了一个变量,模型的效果就会有区别,这个区别就是该变量的贡献。最后,我们选出贡献比较大的那些变量,构成我们的最终模型。

这种认识明显是错的。举一个易懂的反例:我们都知道深度模型数据越多上限越高(也就是现在大家说的“涌现”),但同时数据越多也会导致训练难度越高——也就是说,用少量数据训练小模型,和用大量数据训练大模型,在不调参的情况下,很可能前者的效果远远超过后者——如果按这篇文章的说法,那推出的结果就是“大量数据是没用的”,这显然是错的。出现这种现象只是因为少量数据训练的小模型大量数据训练的大模型下限更高而已。

我这么说之后,有个学经济的同学说我说的不对,这篇文章说的这个方法其实是经济学建模常用的方法“最优子集选择法”——如果你也这么认为,那就说明你既不懂数学上的函数拟合、也不懂经济学上的回归分析。首先,“最优子集选择法”不是用来干这件事的,其次,“最优子集选择法”也不能在这种模型上用。下面我来讲讲为什么。

为什么非线性模型不能用最优子集选择法

大部分人应该是在学习回归分析时接触的最优子集选择法——在使用线性模型进行回归分析时,用这个方法来剔除共线性的解释变量。为什么我们要发现并剔除共线性的变量?因为经济学模型的目的是解释现象,对于线性回归分析,就是要根据拟合后每个自变量的系数来解释它对响应变量的影响。但如果存在两个变量共线性,就会造成一个变量的系数可以被另一个变量吸收。比如A、B两个变量共线,那拟合之后的结果在极端情况可能是100A+0B或100B+0A——但这并不代表其中一个有超大的影响,另一个没有影响,只是因为一个变量的影响被另一个吸收了。对于这种结果,你是无法做出正确解释的。

在这个时候,我们就可以使用最优子集选择法:分别做一个有A无B的模型和有B无A的模型,发现这两个模型从参数到结果都很类似,只不过是第二个模型把第一个模型的A换成了B——这种情况就说明他俩共线性——A和B的背后有一个共同的隐变量,是这个隐变量在对响应变量施加影响。那么我可以继续研究这个隐变量到底是什么。或者分析A和B哪个与那个隐变量更相关,从而选取更好的解释变量。

但是非线性模型就不存在这个问题——你要想一想,为什么线性模型里两个共线变量的参数会互相吸收?这只是因为多项式分配律而已。而非线性模型不是这个多项式形式,所以不会直接出现变量间互相吸收的情况——一个好的非线性模型,即使参数A和参数B有一丁点不一样,它也能把这一丁点不一样分离出来,然后用于预测。所以,对于非线性模型,对预测没有帮助的充分条件是两个变量一模一样[1](这时你一定可以至少去除一个),而并非共线。

基于以上分析,我们再回来看为什么非线性模型不能用最优子集选择法——我前面说了,“最优子集选择法”不是用来干这件事的,这是因为最优子集选择法是在帮助我们排除影响解释的因素,而并非直接让预测结果更好。事实上,对于线性模型,即使解释变量间存在共线性,但只要这些变量都与响应变量线性相关(而没有把无关变量混杂进来),那么它们同时存在也对预测精度没有太大影响。因此使用最优子集选择法的根本目的不是提高预测精度,你也不应该用预测精度作为指标来比较不同的变量子集好坏。“最优子集选择法”也不能在这种模型上用,这是因为非线性模型不需要检测共线性,两个共线性的变量也可能给预测提供有用信息。同时,因为使用不同的变量子集时,模型的最优超参数是不同的,所以,你也不能在不调参的情况下比较两个变量子集的好坏(即本文最开始说的反例)。

为什么最优子集选择法在某些情况下可以提高预测精度

不过,虽然我说“最优子集选择法”不是用来提高预测精度的,因此不应该用预测精度作为指标来比较不同的变量子集好坏,但是很多学经济的同学在实践中确实在用该方法进行变量选择,并获得比较好的模型,这样做为什么可以work呢?

仔细看前文可以发现,我强调两个不同变量子集训练出的模型预测精度无法直接比较的原因是,两个模型的最优超参数是不同的,超参数决定了优化迭代的初值和动力学路径。在不调参的情况下,两个模型在训练时可能一个走的是径直向下的山路,一个走的是凹凸不平的丘陵,显然前者会更快收敛到更好的参数,获得更好的预测精度,但这只是因为二者在训练过程中所走的路径不同,并不能说明前者的数据比后者更好(没有控制变量)。

但是,广义线性模型的最小二乘损失均为凸函数,因此无论你把初值选择在哪个地方,它都会沿着梯度方向收敛到最优参数(事实上这个凸函数的最小值是可以解析求解的,我们平时都是把数据带入这个解析解,直接得到最优参数,不需要进行迭代),因此就消除了超参数这个无法控制的变量——给出一组数据,直接就能得到能达到最好预测精度的最优参数。在这种情况下,预测精度是可以一定程度上说明两组数据的好坏的。

但这是否说明最优子集选择法可以用来提高预测精度呢?我前面已经说了,在使用线性模型时,如果你选取的解释变量全部与响应变量线性相关,那么再用最优子集选择法不会对精度有影响——所以,一些经济学同学使用“最优子集选择法”进行“变量选择”的本质仅仅是使用试错的方法排除了一些相关性较弱的变量而已。事实上,你直接计算一下每个解释变量和响应变量间的线性相关系数,然后进行排除,也可以有类似的结果,而且计算次数还会更少……如果你刻舟求剑,发现这个方法在线性模型上“有效”,然后像这个作者一样在非线性模型上还想用,那就是完全错误了……

最后我吐槽一句:都3202年了,能不能别抱着中文论文不放了?你看这作者犯的错误,他明显就是那种把经济当文科学,基本不懂数学,拿着几个方法到处生搬硬套的——总看这种人的文章,你能有好果汁吃?

[1] T. Liu, S. Zhang and Q. Xiong, "Separated Model for Stopping Point Prediction of Autoregressive Sequence," 2023 IEEE 12th Data Driven Control and Learning Systems Conference (DDCLS), Xiangtan, China, 2023, pp. 799-803, doi: 10.1109/DDCLS58216.2023.10167110.

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

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

相关文章

字节流概述,及字节流写数据的三种方式

1.IO流概述和分类 如果数据通过记事本打开,我们还可以读懂里面的内容就使用字符流,否则使用字节流。如果不知道使用哪种类型的流,就使用字节流。 2.字节流写数据 创建字节输出流的时候,一共做了三件事情。 调用系统功能创建了文…

Goland 配置go modules 环境变量

我的配置,仅供参考: GOPROXYhttps://goproxy.cn,direct;GO111MODULEon;GOSUMDBoff;GONOSUMDB*

spring整合mybatis教程(详细易懂)

一、引言 1、Spring整合MyBatis的目的是? 将两个框架结合起来,以实现更好的开发体验和效果。Spring提供了一种轻量级的容器和依赖注入的机制,可以简化应用程序的配置和管理。而MyBatis是一个优秀的持久层框架,可以方便地进行数据…

Mysql join加多条件与where的区别

最近在项目中遇到一个问题,感觉有点意思,在解决问题及查阅了相关资料后,打算写篇文章给朋友们分享一下。 问题现象: 问题是很常见的空指针问题,后端查询数据库数据,遍历进行相关业务处理时报空指针。通过…

stm32单片机实现电机的PID控制

PID控制应该算是非常古老而且应用非常广泛的控制算法了,小到热水壶温度控制,大到控制无人机的飞行姿态和飞行速度等等。在电机控制中,PID算法用得尤为常见。 一、位置式PID 1.计算公式 在电机控制中,我们给电机输出的是一个PWM占…

分布式计算框架:Spark、Dask、Ray

目录 什么是分布式计算 分布式计算哪家强:Spark、Dask、Ray 2 选择正确的框架 2.1 Spark 2.2 Dask 2.3 Ray 什么是分布式计算 分布式计算是一种计算方法,和集中式计算是相对的。 随着计算技术的发展,有些应用需要非常巨大的计算能力才…

Boost电路实战详解!(高效率同步整流,PID闭环追踪)

文章目录 寄语什么是BOOST电路BOOST同步升压电路设计要求设计方案驱动电路电压采样电路 总体电路代码实物图总结 寄语 提示:若想实战演练,请先熟悉文章操作流程哦,不然会有危险!! 我建了一个群,分享我个人…

【业务功能篇82】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-进阶实战

四、ElasticSearch进阶 https://www.elastic.co/guide/en/elasticsearch/reference/7.4/getting-started-search.html 1.ES中的检索方式 在ElasticSearch中支持两种检索方式 通过使用REST request URL 发送检索参数(uri检索参数)通过使用 REST request body 来发送检索参数…

人力资源小程序的设计与开发步骤

在当前信息化时代,小程序成为了各行各业提升用户体验和服务效率的重要渠道。人力资源部门也可以通过定制开发人力资源小程序来提升招聘、培训、员工福利等方面的工作效率。接下来,我们将介绍人力资源小程序定制系统开发的具体流程。 首先,我们…

章节 1:入门React.js -《React.js手把手教程:从初学者到实战高手》- 第一部分:React.js基础

《React.js手把手教程:从初学者到实战高手》 第一部分:React.js基础 章节 1:入门React.js 了解React.js 在我们开始探索React.js的奇妙世界之前,让我们先来认识一下这个“人人都在谈论”的家伙。你可以把React.js想象成是一个全…

【校招VIP】产品思维分析之面试新的功能点设计

考点介绍: 这种题型是面试里出现频度最高,也是难度最大的一种,需要面试者对产品本身的功能、扩展性以及行业都有一定的了解。而且分析时间较短,需要一定的产品能力和回答技巧。 『产品思维分析之面试新的功能点设计』相关题目及解…

既简单又高效,一款新型软件开发利器来了,让编程门槛不再是障碍

软件开发现在已经成为各行各业不可或缺的一部分。 无论是大型企业还是小型团队,都需要依赖软件来提高工作效率、优化用户体验,甚至是推动业务的发展。然而,对于非专业程序员来说,开发一款自己的软件似乎是一项遥不可及的任务。 幸…

idea建立java maven javaweb项目,建立maven基本项目

1.创建maven项目 2.在src/main 目录下建立webapp/WEB-INF/web.xml文件 src/main/webapp/WEB-INF/web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w…

Java轻松开发自定义注解

注解开发 元注解 Target(ElementType) 修饰的这个注解的使用范围&#xff0c;即被描述的注解可以用在哪里。 Target(ElementType.TYPE)——接口、类、枚举、注解 Target(ElementType.FIELD)——字段、枚举的常量 Target(ElementType.METHOD)——方法 Target(ElementT…

antd5:图片上传接口参数

使用场景&#xff0c;后端给了一个上传文件的接口/api/file/upload,方法类型为post,参数为{file: binary,type:string}. 上传文件需要设置请求头content-type. 项目使用的是umi4antd5 请求拦截便在app.ts文件写。 export const request: RequestConfig {baseURL: /api,time…

【MTK平台】根据kernel log分析wifi 打开的时候流程

一 概要: 本文主要讲解根据kernel log分析下 当前路径下(vendor/mediatek/kernel_modules/connectivity/wlan/core/gen4m/)wifi打开的时候代码流程 二. Log分析: 先看Log 2.1)在Framework层WifiManager.java 方法中,做了一个标记,可以精准的确认时间 这段log可以看出…

【业务功能篇81】微服务SpringCloud-ElasticSearch-Kibanan-docke安装-入门实战

ElasticSearch 一、ElasticSearch概述 1.ElasticSearch介绍 ES 是一个开源的高扩展的分布式全文搜索引擎&#xff0c;是整个Elastic Stack技术栈的核心。它可以近乎实时的存储&#xff0c;检索数据&#xff1b;本身扩展性很好&#xff0c;可以扩展到上百台服务器&#xff0c;…

SAP SD (Sales Distribution)简要介绍

目录 前言 一、SD的企业结构 二、SD 模块的特性 三、SD下的子模块/组件Components 前言 SAP SD代表销售和分销&#xff0c;它是核心模块之一&#xff0c;处理从收到产品订单到将产品交付给客户的各种业务流程&#xff0c;以完成客户订单。SAP R/3的主要优点是与内部和外部…

leetcode503. 下一个更大元素 II 单调栈

思路&#xff1a; 与之前 739、1475 单调栈的问题如出一辙&#xff0c;唯一不同的地方就是对于遍历完之后。栈中元素的处理&#xff0c;之前的栈中元素因无法找到符合条件的值&#xff0c;直接加入vector中。而这里需要再重头遍历一下数组&#xff0c;找是否有符合条件的&…

UG\NX二次开发 使用录制功能录制操作记录时,如何设置默认的开发语言?

文章作者&#xff1a;里海 来源网站&#xff1a;王牌飞行员_里海_里海NX二次开发3000例,C\C,Qt-CSDN博客 简介&#xff1a; NX二次开发使用BlockUI设计对话框时&#xff0c;如何设置默认的代码语言&#xff1f; 效果&#xff1a; 方法&#xff1a; 依次打开“文件”->“实用…