You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何调整sklearn的LogitRegression类适配多自变量与固定效应?

适配多自变量与固定效应的Logit回归实现方案

自定义LogitRegression类修改方案

你原来的类核心逻辑是对因变量做logit转换后用线性回归拟合,再通过sigmoid映射回0-1区间,只要放开单变量限制即可适配多特征和固定效应输入,修改后代码如下:

import numpy as np
from sklearn.linear_model import LinearRegression

class LogitRegression(LinearRegression):
    def __sigmoid(self, x):
        # 截断避免数值溢出
        x = np.clip(x, -500, 500)
        return 1 / (1 + np.exp(-x))
    
    def fit(self, X, y):
        # 支持输入多特征矩阵,可直接传入连续自变量+国家独热编码的组合
        # 因变量边界截断避免logit转换报错
        y = np.clip(y, 1e-6, 1 - 1e-6)
        y_logit = np.log(y / (1 - y))
        # 直接调用父类线性回归的拟合逻辑
        super().fit(X, y_logit)
        return self
    
    def predict(self, X):
        linear_output = super().predict(X)
        return self.__sigmoid(linear_output)

使用注意事项:

  • 你已经通过pd.get_dummies生成的国家独热编码,直接和x1、x2、x3拼接作为输入特征即可
  • 如果生成独热编码时没有加drop_first=True,拟合时需要设置fit_intercept=False避免多重共线性(虚拟变量陷阱)
  • 输出的预测值会自动落在(0,1)区间,不会出现普通线性回归的越界问题

更便捷的替代实现方案

你提到statsmodels OLS难以添加固定效应的问题,用公式接口可以轻松解决,不需要提前生成独热编码,适配性更强:

import numpy as np
import statsmodels.formula.api as smf

# 直接在公式中指定分类变量作为固定效应,自动处理虚拟变量陷阱
df['y_logit'] = np.log(np.clip(df['比例因变量'], 1e-6, 1-1e-6) / (1 - np.clip(df['比例因变量'], 1e-6, 1-1e-6)))
model = smf.ols("y_logit ~ x1 + x2 + x3 + C(国家)", data=df).fit()

# 预测时转换回0-1区间
linear_pred = model.predict(df)
pred = 1 / (1 + np.exp(-linear_pred))

如果你的数据是面板结构,还可以直接用statsmodels的PanelOLS接口指定个体/时间固定效应,代码更简洁,也能避免高维独热编码带来的性能损耗。

内容的提问来源于stack exchange,提问作者Hoppity81

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 18:15:03