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

如何用Scikit-learn在Python中按组拟合多变量逻辑回归?

按分组拟合多变量逻辑回归的问题与解决

问题描述

我尝试实现按分组拟合多变量逻辑回归,参考了分组回归的相关内容,但运行代码时报错,示例代码及错误如下:

示例代码:

import pandas as pd
from sklearn.linear_model import LogisticRegression

df = pd.DataFrame({'group': [1,2,3,4,5,6], 
               'var1': [9,5,3,1,2,3],
              'var2': [3,4,1,6,4,9], 
              'var3': [3,5,2,8,4,4],
              'closed': [0,1,1,1,0,0],
              'date': [2020, 2020, 2021, 2022, 2021, 2021]
              })

def GroupRegress(data, yvar, xvars):
    Y = data[yvar]
    X = data[xvars]
    result = LogisticRegression(Y, X).fit()
    return result.params

df.groupby('group').apply(GroupRegress, 'closed', ['X'])

报错信息:
TypeError: __init__() takes from 1 to 2 positional arguments but 3 were given

实际场景中有近20个X变量,同时我的非分组逻辑回归代码如下:

import pandas as pd
import datetime as dt
from sklearn.model_selection import train_test_split as tts
from sklearn.linear_model import LogisticRegression

X = df.drop('closed', axis=1)
X['date']=X['date'].map(dt.datetime.toordinal)

y = df['closed']

X_train, X_test, y_train, y_test = tts(X, y, test_size=0.20)

model = LogisticRegression()
model.fit(X_train, y_train)

解决方案

1. 错误根源

sklearn的LogisticRegression类的构造函数不需要传入训练数据,你错误地把Y和X传给了构造函数,数据应该通过fit()方法传入。

2. 修正分组回归函数

重新编写分组回归函数,正确初始化模型并传入数据:

from sklearn.linear_model import LogisticRegression
import pandas as pd
import datetime as dt

def group_logistic_regress(data, yvar, xvars):
    y = data[yvar]
    X = data[xvars]
    # 初始化模型,可根据需要调整max_iter避免收敛问题
    model = LogisticRegression(max_iter=1000)
    model.fit(X, y)
    # 整理系数和截距为Series,方便分组查看结果
    params = pd.Series(model.coef_.flatten(), index=xvars)
    params['intercept'] = model.intercept_[0]
    return params

3. 调用分组回归

自动获取所有特征变量,处理日期后执行分组拟合:

# 定义目标变量和特征变量(排除group和closed)
yvar = 'closed'
xvars = [col for col in df.columns if col not in [yvar, 'group']]

# 处理日期变量,与非分组逻辑保持一致
df['date'] = df['date'].map(dt.datetime.toordinal)

# 按group分组拟合模型
group_results = df.groupby('group').apply(group_logistic_regress, yvar=yvar, xvars=xvars)

# 查看每个分组的回归结果
print(group_results)

4. 关键注意事项

  • 样本量要求:每个分组必须有足够样本,且目标变量的两类都要存在,否则模型无法拟合(比如示例中每个group只有1条数据,实际运行会报错,需确保真实数据分组样本量达标)。
  • 模型参数调整:如果遇到收敛警告,可增大max_iter参数,或调整正则化参数C来优化。
  • 特征预处理:所有特征需做统一预处理(如日期转换、标准化等),避免特征尺度差异影响模型性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:01:10