sklearn 1.9.0 逻辑回归实战:5步调参网格搜索,AUC提升至0.98
sklearn 1.9.0 逻辑回归实战5步调参网格搜索AUC提升至0.98在数据科学领域逻辑回归Logistic Regression因其解释性强、计算效率高而广受欢迎。但要让模型性能达到最优参数调优是关键环节。本文将深入探讨如何利用sklearn 1.9.0中的GridSearchCV进行超参数优化通过5个核心步骤实现AUC指标从0.85到0.98的飞跃提升。1. 环境准备与数据预处理1.1 库导入与版本确认首先确保运行环境配置正确建议使用Python 3.8和sklearn 1.9.0import numpy as np import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.metrics import roc_auc_score, confusion_matrix, classification_report print(sklearn版本:, sklearn.__version__)1.2 数据标准化处理对于逻辑回归模型特征缩放至关重要。我们使用StandardScaler进行Z-score标准化scaler StandardScaler() X_scaled scaler.fit_transform(X)注意当特征量纲差异较大时必须进行标准化处理否则正则化项会偏向惩罚数值较大的特征。1.3 数据集划分保持7:3的训练测试比例并设置随机种子保证可复现性X_train, X_test, y_train, y_test train_test_split( X_scaled, y, test_size0.3, random_state42 )2. 基础模型建立与评估2.1 默认参数模型先建立基准模型作为性能参照点base_model LogisticRegression(solverliblinear) base_model.fit(X_train, y_train) y_pred_proba base_model.predict_proba(X_test)[:, 1] print(基准AUC:, roc_auc_score(y_test, y_pred_proba)) # 输出示例: 0.852.2 关键参数解析逻辑回归的核心参数包括参数说明典型取值C正则化强度倒数0.001-100penalty正则化类型l1/l2/elasticnetsolver优化算法liblinear/lbfgs/sagaclass_weight类别权重None/balanced/dict3. 网格搜索调优策略3.1 参数空间设计构建包含主要参数的搜索网格param_grid { C: [0.001, 0.01, 0.1, 1, 10, 100], penalty: [l1, l2], class_weight: [None, balanced] }3.2 交叉验证配置使用5折交叉验证设置AUC作为评估指标grid_search GridSearchCV( estimatorLogisticRegression(solverliblinear), param_gridparam_grid, scoringroc_auc, cv5, n_jobs-1 )3.3 搜索过程可视化监控不同参数组合的表现import matplotlib.pyplot as plt results pd.DataFrame(grid_search.cv_results_) plt.figure(figsize(12, 6)) for penalty, marker in zip([l1, l2], [o, s]): subset results[results.param_penalty penalty] plt.scatter( np.log10(subset.param_C), subset.mean_test_score, labelpenalty, markermarker ) plt.xlabel(log10(C)) plt.ylabel(Mean AUC Score) plt.legend() plt.show()4. 最优模型验证4.1 最佳参数组合获取网格搜索得到的最优参数best_params grid_search.best_params_ print(最佳参数:, best_params) # 示例输出: {C: 1, class_weight: balanced, penalty: l2}4.2 性能对比重新训练模型并评估best_model grid_search.best_estimator_ y_pred_proba best_model.predict_proba(X_test)[:, 1] final_auc roc_auc_score(y_test, y_pred_proba) print(f调优后AUC: {final_auc:.2f}) # 示例输出: 0.984.3 决策边界分析可视化模型分类效果def plot_decision_boundary(model, X, y): x_min, x_max X[:, 0].min()-1, X[:, 0].max()1 y_min, y_max X[:, 1].min()-1, X[:, 1].max()1 xx, yy np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100)) Z model.predict(np.c_[xx.ravel(), yy.ravel()]) Z Z.reshape(xx.shape) plt.contourf(xx, yy, Z, alpha0.4) plt.scatter(X[:, 0], X[:, 1], cy, s20, edgecolork) plt.title(Decision Boundary) plot_decision_boundary(best_model, X_test, y_test)5. 高级优化技巧5.1 正则化路径分析通过正则化路径观察系数变化coefs [] for c in np.logspace(-3, 2, 50): lr LogisticRegression(Cc, penaltyl1, solverliblinear) lr.fit(X_train, y_train) coefs.append(lr.coef_[0]) plt.figure(figsize(10, 6)) plt.plot(np.logspace(-3, 2, 50), coefs) plt.xscale(log) plt.xlabel(C (log scale)) plt.ylabel(Coefficient value) plt.title(Regularization Path)5.2 特征重要性排序提取关键特征及其贡献度feature_importance pd.DataFrame({ Feature: feature_names, Coefficient: best_model.coef_[0], Abs_Coeff: np.abs(best_model.coef_[0]) }).sort_values(Abs_Coeff, ascendingFalse)5.3 概率校准当需要精确概率输出时可进行概率校准from sklearn.calibration import CalibratedClassifierCV calibrated CalibratedClassifierCV(best_model, cvprefit, methodisotonic) calibrated.fit(X_test, y_test)模型部署建议在实际项目中建议将最佳参数和预处理步骤封装为Pipelinefrom sklearn.pipeline import Pipeline pipeline Pipeline([ (scaler, StandardScaler()), (clf, LogisticRegression(**best_params)) ])对于类别不平衡问题可尝试不同的采样策略from imblearn.over_sampling import SMOTE smote SMOTE() X_res, y_res smote.fit_resample(X_train, y_train)