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

如何在逻辑回归(Logistic Regression)中找到最优的正则化参数C?

自动调优逻辑回归正则化参数C的最优方案

针对你的需求,scikit-learn提供了多种比手动调参更高效的自动参数搜索方案,优先推荐针对逻辑回归定制的LogisticRegressionCV,效率远高于通用参数搜索工具,也可根据你的需求选择通用搜索方案:


方法1:使用内置LogisticRegressionCV(最推荐)

这是scikit-learn专门为逻辑回归参数优化设计的交叉验证类,完全适配你的L1正则、liblinear求解器配置,无需额外编写循环逻辑:

from sklearn.linear_model import LogisticRegressionCV
import numpy as np

# 定义C的搜索范围,示例为从1e-4到1e4取20个对数间隔的候选值,符合正则化参数的搜索习惯
c_candidates = np.logspace(-4, 4, 20)
# 初始化带交叉验证的逻辑回归模型,其他参数和你原有配置保持一致
log_reg_cv = LogisticRegressionCV(
    Cs=c_candidates,
    cv=5, # 5折交叉验证,可根据需求调整
    max_iter=50000,
    penalty='l1',
    multi_class='ovr',
    class_weight='balanced',
    solver='liblinear',
    scoring='accuracy' # 以准确率为优化目标
)
# 拟合训练集,自动完成C参数搜索
log_reg_cv.fit(X_train, y_train)
# 输出搜索得到的最优C值
print("最优C值:", log_reg_cv.C_[0])
# 直接用最优参数的模型完成预测
y_pred = log_reg_cv.predict(X_test)

方法2:使用GridSearchCV(适合同时调优多个参数)

如果你后续还要同时调整其他参数(比如max_iter、分类权重规则等),可以使用通用网格搜索工具:

from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
import numpy as np

# 定义参数搜索网格
param_grid = {
    'C': np.logspace(-4, 4, 20)
    # 其他需要调优的参数可以直接追加到这个字典中
}
# 初始化基础模型,配置和你原有参数一致
base_model = LogisticRegression(
    max_iter=50000,
    penalty='l1',
    multi_class='ovr',
    class_weight='balanced',
    solver='liblinear'
)
# 初始化网格搜索实例
grid_search = GridSearchCV(
    base_model,
    param_grid,
    cv=5,
    scoring='accuracy',
    n_jobs=-1 # 调用所有CPU核心并行搜索,大幅提升速度
)
# 执行搜索
grid_search.fit(X_train, y_train)
# 输出最优结果
print("最优C值:", grid_search.best_params_['C'])
print("最优交叉验证准确率:", grid_search.best_score_)
# 获取训练完成的最优模型
best_model = grid_search.best_estimator_

方法3:使用RandomizedSearchCV(适合大范围参数搜索)

如果你的C值候选范围非常大,不想遍历所有候选值,可以用随机搜索,它会从指定分布中随机采样候选值,搜索速度更快,适合粗调参数:

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import loguniform

# 定义C的采样分布,对数均匀分布更适配正则化参数的搜索场景
param_dist = {
    'C': loguniform(1e-4, 1e4)
}
# 初始化随机搜索实例
random_search = RandomizedSearchCV(
    base_model,
    param_dist,
    n_iter=20, # 随机采样20个候选值,可调整数值平衡搜索精度和速度
    cv=5,
    scoring='accuracy',
    n_jobs=-1,
    random_state=42
)
random_search.fit(X_train, y_train)
print("最优C值:", random_search.best_params_['C'])

调优注意事项

  • 可先通过手动小范围测试缩小C的搜索区间,进一步提升搜索效率
  • 交叉验证折数cv可根据数据集规模调整:小数据集建议用10折保证结果可靠性,大数据集可用3折减少计算耗时
  • 如果你的评价指标不是准确率,可将scoring参数替换为对应指标,比如f1、roc_auc等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 15:06:05