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

Logistic Regression中Elastic Net惩罚项配置报错,如何设置l1_ratio?

问题:Elastic Net逻辑回归训练报错,l1_ratio参数设置疑问

在完成IBM机器学习课程作业时,训练逻辑回归模型已设置penalty='elasticnet',但多次报错。已知Elastic Net模型需要l1_ratio参数,但不确定该参数是否必须设置以及正确的设置位置。

相关代码

# 定义带Elastic Net惩罚的逻辑回归参数
l1_ratio=0.5
# Elastic Net惩罚:收缩系数但不剔除特征
penalty= 'elasticnet'
# 多分类问题
multi_class = 'multinomial'
# Elastic Net和多分类仅支持saga求解器
solver = 'saga'
# 设置最大迭代次数
max_iter = 1000
# 初始化逻辑回归模型并训练
e_net_model = LogisticRegression(random_state=rs, penalty=penalty, multi_class=multi_class, solver=solver, max_iter = 1000)
# 训练模型
e_net_model.fit(X_train, y_train) 

报错信息

TypeError                                 Traceback (most recent call last)
Input In [60], in <cell line: 2>()
      1 # Type your code here
----> 2 e_net_model.fit(X_train, y_train)

File ~\anaconda3\lib\site-packages\sklearn\linear_model\_logistic.py:1291, in LogisticRegression.fit(self, X, y, sample_weight)

解决方案

  • 当使用penalty='elasticnet'时,必须显式设置l1_ratio参数,这是scikit-learn的硬性要求,不设置会触发TypeError。
  • 正确位置是在初始化LogisticRegression对象时,将l1_ratio作为参数传入,和其他配置参数放在一起。

修正后的代码:

# 初始化带Elastic Net惩罚的逻辑回归模型
e_net_model = LogisticRegression(
    random_state=rs,
    penalty=penalty,
    l1_ratio=l1_ratio,  # 传入预先定义的l1_ratio值
    multi_class=multi_class,
    solver=solver,
    max_iter=1000
)
# 训练模型
e_net_model.fit(X_train, y_train)

补充说明:l1_ratio取值范围为0到1,0对应纯L2惩罚,1对应纯L1惩罚,你设置的0.5是L1和L2惩罚各占一半的混合模式,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 12:45:37