资讯动态

ML-For-Beginners 分类实践:深入剖析 scikit-learn LogisticRegression 的 Solver 选择与对比

发布时间:2026/9/10 21:52:17 来源:尧图企业网站定制
ML-For-Beginners 分类实践深入剖析 scikit-learn LogisticRegression 的 Solver 选择与对比【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners本篇技术指南基于 ML-For-Beginners 项目第 11 课《Cuisine Classifiers 1》课程正文及其配套作业《Study the solvers》英文原版作业围绕在多重分类任务中如何理解并选择 LogisticRegression 的 solver这一核心主题展开。你将掌握liblinear、lbfgs、newton-cg、sag、saga五个 solver 的底层原理、适用数据规模与正则化支持差异并学会按照作业要求用对比论证的方式完成一份结构化的 solver 研究报告。作业背景从预测菜系到研究求解器本课的任务是基于上一课清洗出的平衡数据集cleaned_cuisines.csv构建一个根据一组食材预测国家菜系的多分类模型数据文件。在建模过程中课程引入了一个关键概念solver即优化问题中使用的算法。作业要求学习者在课程所列出的 solver 中任选两个用自己的话完成对比分析回答三个核心问题它们解决什么类型的问题它们如何处理不同的数据结构为什么你会选择其中一个而不是另一个要高质量完成这份作业首先需要理解 solver 在 scikit-learn 逻辑回归中的确切角色。先厘清两个参数multi_class与solver在课程中当使用LogisticRegression处理多分类数据时需要显式指定两个关键参数课程正文multi_class决定多分类展开方案。设为ovrone-vs-rest一对剩余时模型为每个类别训练一个二分类器将其余所有类别视为负类设为multinomial时模型直接使用交叉熵损失cross-entropy loss训练一个多分类模型。solver决定优化算法即用什么算法求解优化问题。值得注意的是并非所有 solver 都能与所有multi_class方案自由组合。例如课程文档明确说明multinomial选项目前仅由lbfgs、sag、saga和newton-cg支持而liblinear只能配合ovr使用。五个 solver 逐一拆解liblinear小规模数据的坐标下降法liblinear源自 LIBLINEAR 库采用坐标下降coordinate descent优化策略专为线性分类器设计。它的优势在于原生支持 L1 正则化可用于特征选择对未标准化的数据鲁棒性较好适合中小规模数据集。代价是它不支持multinomial方案也无法使用none无惩罚项选项且会惩罚截距项这一行为通常不被推荐。lbfgs拟牛顿法的默认之选lbfgsLimited-memory Broyden–Fletcher–Goldfarb–Shanno是一种拟牛顿法通过近似海森矩阵Hessian的逆来加速收敛内存占用远小于完整牛顿法。它同时支持ovr与multinomial两种方案支持 L2 正则化与无惩罚项对未标准化的数据鲁棒是课程中指出的通常作为默认值的 solver。newton-cg牛顿共轭梯度法newton-cg使用牛顿法配合共轭梯度conjugate gradient求解计算成本较高适合中小规模数据。它支持ovr与multinomial、L2 惩罚与无惩罚项同样对未标准化数据鲁棒。sag随机平均梯度法sagStochastic Average Gradient是一种随机平均梯度方法通过维护所有样本梯度的平均值来平滑更新特别适合大规模数据集收敛速度快于传统梯度下降。但它的前提条件是特征需经过标准化否则容易不收敛。saga弹性网正则化的唯一选择saga是sag的改进版增加了对 L1 和弹性网Elastic-NetL1L2 混合正则化的支持。在课程列举的五个 solver 中只有saga同时支持multinomial L1、OVR L1 以及 Elastic-Net且同样适合大规模数据集但同样要求特征标准化。Solver 支持能力速查表课程正文中的solvers.png表格图片原件系统总结了五个 solver 在不同惩罚项和数据行为下的支持情况这也是完成作业对比时最直接的依据场景liblinearlbfgsnewton-cgsagsagaMultinomial L2否是是是是OVR L2是是是是是Multinomial L1否否否否是OVR L1是否否否是Elastic-Net否否否否是无惩罚项none否是是是是惩罚截距不推荐是否否否否大规模数据更快否否否是是对未标准化数据鲁棒是是是否否从表中可以提炼出三条核心结论直接服务于作业的对比论证追求 L1 正则化/特征选择时liblinear仅限 OVR与sagaOVR 与 multinomial 均可是仅有的两个选项数据量大时优先考虑sag或saga但必须先做特征标准化需要multinomial交叉熵方案且数据未标准化时lbfgs是最稳妥的默认选择——这也是课程建议尝试lbfgs作为默认值的原因。在真实数据集上跑通作业所需的对比实验作业要求用自己的话对比两个 solver而课程 notebook 提供了完整的对比实验模板官方解答 notebook。以liblinear为例训练与评估代码如下from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report import numpy as np import pandas as pd cuisines_df pd.read_csv(../data/cleaned_cuisines.csv) cuisines_label_df cuisines_df[cuisine] cuisines_feature_df cuisines_df.drop([Unnamed: 0, cuisine], axis1) X_train, X_test, y_train, y_test train_test_split( cuisines_feature_df, cuisines_label_df, test_size0.3) # 方案一ovr liblinear lr LogisticRegression(multi_classovr, solverliblinear) model lr.fit(X_train, np.ravel(y_train)) print(Accuracy is {}.format(model.score(X_test, y_test))) # 方案二multinomial lbfgs作业对比的另一个候选 lr2 LogisticRegression(multi_classmultinomial, solverlbfgs) model2 lr2.fit(X_train, np.ravel(y_train)) print(Accuracy is {}.format(model2.score(X_test, y_test))) y_pred model.predict(X_test) print(classification_report(y_test, y_pred))在实际运行中ovr liblinear方案在测试集上获得了81.8% 的准确率分类报告显示各菜系的 F1 分数大致在 0.740.90 之间来源solution/notebook.ipynb。这组数据为作业对比提供了可引用的事实依据。此外还可以像课程那样用predict_proba观察单个样本的概率分布理解 solver 优化出的模型如何犹豫test X_test.iloc[50].values.reshape(-1, 1).T proba model.predict_proba(test) classes model.classes_ resultdf pd.DataFrame(dataproba, columnsclasses) topPrediction resultdf.T.sort_values(by[0], ascending[False]) topPrediction.head()对比实验时建议控制变量固定multi_class与数据集切分例如固定random_state只切换solver从而将准确率、收敛时间与正则化能力差异归因于 solver 本身。你也可以参考本课 R 语言解法lesson_11-R.ipynb中通过multinom_reg(penalty ...)调参的思路理解惩罚参数对多分类模型的同等重要性。作业的评分标准与交付要求原作业以 Rubric 形式明确了评分维度见 assignment.md标准优秀合格待改进内容提交一份 .doc 文件包含两个段落每段对一个 solver 进行深思熟虑的对比只提交了一个段落作业不完整对照优秀标准一份高质量作业应当为每个选中的 solver 各写一段段落内至少覆盖解决的问题类型与数据结构的适配关系选择理由三个维度并结合上文的支持矩阵与实验结果给出可验证的论据。例如比较liblinear与saga时可以论证两者都支持 L1 正则化前者限 OVR、后者同时支持 multinomial但saga在大规模数据上更快且需要标准化而liblinear对未标准化数据更稳健、实现更轻量。从作业出发的延伸思考课程结尾的挑战环节建议深入阅读 scikit-learn 提供的分类算法选项进一步探究 solver 背后的数学机制课程正文。solver 的选择本质上是优化算法特性 × 数据形态 × 正则化需求三者之间的权衡没有放之四海而皆准的最优解只有与当前数据规模、特征分布和建模目标最匹配的组合。完成本次作业后建议继续阅读本系列后续课程观察同一数据集在 SVM 等其他分类器下的表现差异下一课 Classifiers-2从而建立更完整的分类算法选型视野。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价