尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ML-For-Beginners 分类课程实战:深入对比 scikit-learn 逻辑回归求解器(Solver)

ML-For-Beginners 分类课程实战:深入对比 scikit-learn 逻辑回归求解器(Solver) ML-For-Beginners 分类课程实战深入对比 scikit-learn 逻辑回归求解器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 课程「Cuisine classifiers 1」4-Classification/2-Classifiers-1中的课后作业「研究求解器」Study the solvers展开。作业要求从课程中出现的求解器中挑选两个进行对比它们解决什么问题如何适配不同的数据结构为什么在特定场景下你会选择其中一个本文以课程 README.md、notebook.ipynb 及 官方求解器答案 notebook 为事实依据逐层拆解solver与multi_class两个核心参数帮助你完成一份有深度、有依据的对比作业并真正理解逻辑回归背后的优化原理。作业背景为什么课程要让你「研究求解器」在4-Classification/2-Classifiers-1这一课中你使用上一课保存的cleaned_cuisines.csv数据尝试用多种分类器根据一组食材预测菜系。课程明确指出在调用 scikit-learn 执行逻辑回归时有两个必须指定的关键参数multi_class决定多分类的方案scheme即ovr或multinomialsolver决定优化问题所用的算法algorithm即求解器。作业见 英文原版 assignment.md本仓库另有 希腊语翻译版要求你从课程列出的求解器中选两个用自己的话比较它们的异同并回答三个问题——它们解决什么类型的问题、如何与不同数据结构协作、为什么你会选择其中一个而不是另一个。评分标准Rubric要求提交一份包含两段对比文字的.doc文件一段对应一个求解器。要完成这份作业先要搞清楚求解器到底是什么。什么是求解器Solver逻辑回归背后的优化器课程对求解器给出了精确定义solver 是优化问题中使用的算法。逻辑回归虽然名字里带回归本质上是拟合一个决策边界——即找到一组权重使得损失函数交叉熵等最小。这个找权重的过程就是数值优化而不同的求解器就是不同的优化算法。从源码结构看scikit-learn 的LogisticRegression在拟合时会把solver参数分发给底层不同的实现路径liblinear走的是独立于 scikit-learn 的 LIBLINEAR 库而lbfgs、newton-cg、sag、saga走的是 scikit-learn 自带或依赖 SciPy 优化器的实现。这正是课程强调并非所有 solver 都能与所有 multi_class 值配对的根源——不同实现支持的目标函数形式不同。课程引用的 scikit-learn 文档给出了多分类情况下的训练算法行为若multi_class设为ovr采用one-vs-restOvR方案为每个类别训练一个二分类器判断是不是这一类若multi_class设为multinomial采用交叉熵损失softmax 多分类直接对所有类别联合优化当前multinomial仅被lbfgs、sag、saga、newton-cg支持。课程用一个要点框解释了两者的本质区别逻辑回归本身是为二分类设计的这些方案让它能更好地处理多分类任务。OvR 把多分类拆成多个二分类multinomial 则用 softmax 一次性输出各类别概率。六个求解器速览各自解决什么问题scikit-learn 的LogisticRegression主要提供以下求解器课程重点涉及liblinear与lbfgs下表为课程与官方文档综合整理求解器优化思想擅长场景主要限制liblinear坐标下降法LIBLINEAR 库小数据集、L1 正则、稀疏数据只支持 OvR不支持multinomial会惩罚截距lbfgs拟牛顿法Limited-memory BFGS中小数据集默认常被设为默认值不支持 L1 正则newton-cg牛顿法 共轭梯度中小数据集不支持 L1 正则大数据集收敛慢sag随机平均梯度下降Stochastic Average Gradient大数据集速度快对未缩放数据不鲁棒不支持 L1sagaSAG 的扩展支持 L1/弹性网络大数据集 需要稀疏正则对未缩放数据不鲁棒newton-cholesky较新版本可选牛顿法 Cholesky 分解L2 正则场景课程未涉及可自行扩展阅读课程在练习中还提示可以尝试把solverliblinear换成lbfgs后者经常被设置为默认值——在较新的 scikit-learn 版本中lbfgs确实是solver的默认值且搭配multi_class默认的auto行为时对多分类任务表现稳定。solver × 数据结构适配表课程的核心对照依据课程直接给出了 scikit-learn 官方文档中的求解器对比表格用来解释不同求解器如何处理不同数据结构带来的挑战。这张表是完成作业的核心证据务必逐行理解按表中内容可归纳为三个维度惩罚项Penalties兼容性Multinomial L2liblinear不支持lbfgs/newton-cg/sag/saga支持OvR L2所有求解器都支持Multinomial L1仅saga支持OvR L1仅liblinear与saga支持Elastic-NetL1L2 组合仅saga支持无惩罚nonelbfgs/newton-cg/sag/saga支持liblinear不支持。行为特征Behaviors惩罚截距Penalize the intercept仅liblinear会这样做通常这是不理想的大数据集更快sag与saga具备优势对未缩放数据鲁棒liblinear/lbfgs/newton-cg鲁棒sag/saga不鲁棒它们依赖梯度估计特征尺度差异大会影响收敛。数据结构的适配结论如果你的数据是大规模的样本量很大优先考虑sag/saga如果你的数据未经标准化且样本量不大liblinear/lbfgs/newton-cg更稳如果你需要L1 稀疏解特征很多、希望自动筛特征liblinearOvR 下或saga是选择如果你想要联合多分类multinomial概率则必须避开liblinear。实战验证在菜系数据上比较liblinear与lbfgs课程的核心练习就是用liblinear训练一个多分类逻辑回归模型。这里以课程 官方求解器答案 notebook 的实际输出为基准完整还原流程方便你对照着做对比实验。步骤一加载清洗后的菜系数据import pandas as pd cuisines_df pd.read_csv(../data/cleaned_cuisines.csv) cuisines_df.head()数据为 382 列1 列索引 cuisine标签 380 个食材特征列每一行表示一道菜特征列为 0/1 布尔值表示是否使用某种食材。步骤二划分特征与标签cuisines_label_df cuisines_df[cuisine] # 标签菜系 cuisines_feature_df cuisines_df.drop([Unnamed: 0, cuisine], axis1) # 特征380 个食材列步骤三训练集/测试集划分from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test train_test_split(cuisines_feature_df, cuisines_label_df, test_size0.3)步骤四用liblinear OvR 训练并评估from sklearn.linear_model import LogisticRegression import numpy as np lr LogisticRegression(multi_classovr, solverliblinear) model lr.fit(X_train, np.ravel(y_train)) accuracy model.score(X_test, y_test) print(Accuracy is {}.format(accuracy))课程 notebook.ipynb 中的对应单元lr LogisticRegression(multi_classovr,solverliblinear)运行后官方答案输出为Accuracy is 0.8181818181818182即准确率超过 80%。注意课程 README 中使用np.ravel(y_train)将标签 Series 展平为一维数组——这是fit时的常见要求。对比实验把上面代码中的solverliblinear换成solverlbfgs保持multi_classovr再观察准确率变化。你会发现lbfgs在该数据集上同样可行这正印证了表格中OvR L2 对所有求解器都支持的结论由于本数据集特征全部是 0/1 布尔值尺度一致sag/saga对未缩放数据不鲁棒的问题在此不构成障碍也可以尝试。步骤五单样本预测与概率解释# 测试第 50 行数据 print(fingredients: {X_test.iloc[50][X_test.iloc[50]!0].keys()}) print(fcuisine: {y_test.iloc[50]})官方答案在这个随机划分下第 50 行的真实标签为korean食材包含artemisia, black_pepper, mushroom, shiitake, soy_sauce, vegetable_oil。接着用predict_proba查看各类别概率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()输出示例官方 notebook 实际结果0korean0.392231chinese0.372872japanese0.218825thai0.013427indian0.002645这里能看到 OvR 模式的一个特点各类别概率由多个二分类器的得分构成korean 与 chinese 的得分比较接近说明这两个菜系在食材上确有重叠都含酱油、香菇等。课程 README 中展示的另一组随机划分结果indian 0.715851则显示当食材特征香菜、洋葱、豌豆、土豆、番茄、植物油非常印度时模型会给出高置信度判断。步骤六分类报告深挖from sklearn.metrics import classification_report y_pred model.predict(X_test) print(classification_report(y_test, y_pred))官方 notebook 在liblinearovr下的分类报告完整结果precisionrecallf1-scoresupportchinese0.750.730.74223indian0.930.880.90255japanese0.780.780.78253korean0.870.860.86236thai0.760.840.80232accuracy0.821199macro avg0.820.820.821199weighted avg0.820.820.821199从报告可以看出indian类别的 precision/recall 最高而chinese/japanese较低——这与亚洲菜系食材重叠的现实一致。这是你对比不同 solver 时的理想观测点把 solver 换成lbfgs、sag、saga对比各自的 accuracy、各类别 f1-score 与训练耗时就能在作业中写出有数据支撑的对比结论。如何撰写对比作业一份结构建议结合评分标准「用两段文字、每段对应一个求解器、进行有思考深度的对比」建议按以下骨架组织你的.doc文件第一段liblinear解决什么问题小规模、稀疏0/1 特征数据的二分类与 OvR 多分类支持 L1 得到稀疏解如何与数据结构协作对未缩放数据鲁棒但只支持 OvR不能输出 multinomial 联合概率会惩罚截距为什么选它数据集小、特征为布尔值时训练快且结果可解释课程首选的合理性。第二段lbfgs解决什么问题中小规模数据的稳健优化默认 solver支持multinomialsoftmax 交叉熵多分类如何与数据结构协作对未缩放数据鲁棒支持 L2 与无惩罚但不能处理 L1为什么选它想要联合多分类概率、又不想为数据标准化操心时lbfgs是稳妥选择在菜系数据上准确率与liblinear相当还避免了 OvR 概率割裂的问题。可选加分第三段saga唯一同时支持 L1、L2、Elastic-Net 且可配multinomial的求解器大数据集速度快——适合把作业推向为什么saga是现代推荐的通用默认。课程在「 挑战」中鼓励你继续深挖 solver 的幕后原理并在「Review Self Study」中建议进一步阅读逻辑回归背后的数学推导——对比作业正是检验你理解深度的最佳载体。关联资源索引课程正文4-Classification/2-Classifiers-1/README.md含 solver 表格、完整代码与分类报告作业原文4-Classification/2-Classifiers-1/assignment.md官方答案 notebook4-Classification/2-Classifiers-1/solution/notebook.ipynb含真实运行输出起始 notebook4-Classification/2-Classifiers-1/notebook.ipynb数据文件4-Classification/data/cleaned_cuisines.csv后续课程对比更多分类器4-Classification/3-Classifiers-2/README.md完成本作业后你将能自信地回答什么样的数据结构对应什么样的求解器以及为什么——这不仅是课程评分的要求也是你在真实项目中为逻辑回归选型的基本功。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表