【疑难杂症】PerfectSeparationError: Perfect separation detected, results not available问题解决

在构建多元逻辑回归模型时遇到PerfectSeparationError,问题源于自变量与因变量完全相关。通过检查缺失值、数据类型、分类数值变量,发现weight变量是问题所在。删除此变量后,模型成功运行并筛选出显著变量。问题根源在于自变量中存在与因变量完全线性相关的变量,提醒在建模前需检查变量与因变量的相关性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


手动反爬虫: 原博地址 https://blog.youkuaiyun.com/lys_828/article/details/123931108

 知识梳理不易,请尊重劳动成果,文章仅发布在优快云网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息

1 问题背景

在进行多元逻辑回归模型创建过程中,因变量是0-1二分类数据,自变量中包含了分类变量和连续变量,直接将所有的变量都传到模型中,让其自动进行挑选显著变量,输出结果如下。
在这里插入图片描述

2 问题解决

核心点就是自变量中存在着与因变量完全相关的的变量,需要删除这个自变量,否则模型无法求解。
在这里插入图片描述

2.1 百度求助

具体排错过程如下,首先百度查找是够有相关经验贴,搜到一条关于这方面的问题解答Error : PerfectSeparationError: Perfect separation detected, results not available,点击打开后里面有很重要的提示信息,而且报错和目前正在做的模型相一致,截图如下
在这里插入图片描述
关于这三段话的翻译如下

  • Python在一个或多个预测器和结果变量中检测到完全或准完全分离。(不知道啥意思,一脸懵逼)
  • 当一个预测器类别(或多个预测器的组合)中的所有或几乎所有变量只与一个二进制结果变量相关联时,就会发生这种情况。(我假设你是在尝试逻辑回归。)当这种情况发生时,就无法找到预测系数的解。(卧槽,就是这个呀)
  • 有几种可能的解决方案。根据分析中有多少变量,您可以尝试对结果和每个预测变量运行双向交叉表,以定位任何观察值为零的单元格,然后将该变量从分析中删除或使用较少的类别。另一种选择是运行Firth逻辑回归或惩罚回归。(哇咔咔,没错了)

根据提供的答案,很完美的就是目前遇到错误的解读,建议删除变量或使用较少的类别。模型出错,肯定是有部分字段是有问题的,那么就需要排查问题。可以按照下面的小标题顺序进行。

2.2 缺失值查看

是不是有的字段出现了缺失值或者异常数据导致的问题,代码核实如下(所有字段都是没有缺失值)
在这里插入图片描述

2.3 分类数据类型干扰

通过查看各个字段的数据类型,然后排除分类字段,代码如下
在这里插入图片描述
有两个变量是属于分类变量,尝试剔除后,再进行逻辑回归建模,代码如下。
在这里插入图片描述

2.4 分类数值变量干扰

排除分类变量后,依然报错,而此时字段中仅有数值变量,进一步考虑一下是不是分类数值变量的问题(也就是虽然变量中都是数值,但是数值只存在几类,比如0-1,有可能有些数据拿到手是已经对分类变量进行编码后的结果),代码如下
在这里插入图片描述
第一个是属于因变量不用管的,剩下的两个先进行删除,然后再次运行模型,这次发现可以成功运行,并筛选出显著变量
在这里插入图片描述
而对于剩下的两个变量,就可以确定问题出在其中一个身上,提取这两个变量数据,如下
在这里插入图片描述

2.5 解决bug

可以看出weight这个变量,不是属于常见的分类数值数据,可以尝试把原始数据拿过来,只剔除这一个变量,看看模型是否可以运行,代码如下(成功排除出来就是这个字段的问题)
在这里插入图片描述

3 问题根源

3.1 试错1:分类数值中出现小数点

是不是这个报错就是属于分类的数值数据中呈现出小数的问题才导致最后分类时候无法识别导致的,这里尝试把weight变量都变成整型数据,然后再尝试传入模型。模型最终还是报错
在这里插入图片描述

3.2 试错2:虽然是二分类但不是0-1分类

尝试转化为0-1二分类,代码及模型运算结果输出如下。模型运行依然报错
在这里插入图片描述

3.3 试错3:自变量和因变量完全相关

也就是说自变量中存在着和因变量成等比例或者完全相同的变量,导致模型运行后无法求解。既然已经知道这个有问题的变量是weight变量,直接把因变量和这个weight变量都提取出来进行一个判断即可,看看最终相同的个数。代码如下。
在这里插入图片描述
故最终的根源就是因为自变量中存在与因变量完全线性相关的变量,导致模型无法求解。这也就给了启示:在进行模型训练之前要先判断各变量与因变量的相关性后再次传入模型进行运算。

很开心这个发现错误,试错和解决错误的过程。完结撒花✿✿ヽ(°▽°)ノ✿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值