尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ML-For-Beginners 回归实验:使用全量南瓜数据构建并评估逻辑回归分类模型
ML-For-Beginners 回归实验使用全量南瓜数据构建并评估逻辑回归分类模型【免费下载链接】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 课程《Logistic Regression》一节的课后作业展开课程中只用了南瓜数据集的子集6 列训练逻辑回归模型作业要求回到原始数据 US-pumpkins.csv尝试使用全部数据经过清洗与标准化后重新构建逻辑回归模型。读完本文你将掌握一套完整可复用的二分类建模流程——从数据清洗、特征/标签编码、可视化探索到模型训练、分类报告解读、混淆矩阵分析以及 ROC/AUC 评估并了解如何把课程中的“列子集”流水线扩展为“全量数据”流水线以及作业的验收评分标准。作业任务解读从列子集到全量数据课程作业的原始说明位于 assignment.md其任务定义非常明确在课程中你只使用了南瓜数据的一个子集。现在回到原始数据尝试使用全部数据经过清洗和标准化来构建一个逻辑回归模型。课程正文见 2-Regression/4-Logistic/README.md在建模前仅保留了 6 列特征columns_to_select [City Name,Package,Variety, Origin,Item Size, Color] pumpkins full_pumpkins.loc[:, columns_to_select] pumpkins.dropna(inplaceTrue)而作业要求我们跳出这 6 列的舒适区把清洗、编码、建模、评估的全流程迁移到完整数据集上。这意味着要回答几个关键问题原始数据一共有多少个字段哪些可以当作特征哪些应当剔除全量数据中新增的数值型字段价格、日期等是否需要标准化standardized全量数据的维度上升后逻辑回归模型的表现是提升还是下降如何用分类报告、混淆矩阵和 AUC 来量化对比数据集全景US-pumpkins.csv 的字段结构作业所依托的原始数据是 2-Regression/data/US-pumpkins.csv。从该文件表头可以确认原始数据集共26 列课程子集只用了其中 6 列。完整字段如下类别字段市场与地点City Name、Origin、Origin District商品属性Type、Package、Variety、Sub Variety、Grade、Item Size、Color、Unit of Sale、Quality、Condition、Appearance、Storage价格相关Low Price、High Price、Mostly Low、Mostly High时间与物流Date、Environment、Crop、Repack、Trans Mode及两个未命名列其中Color南瓜颜色正是课程设定的二分类标签ORANGE橙色与WHITE白色即“白南瓜 vs 非白南瓜”。课程还提到数据集中存在少量striped条纹类别但它在剔除空值后自然消失因此不参与建模。从课程求解笔记本 2-Regression/4-Logistic/solution/notebook.ipynb 的实现看官方解法确认了读取方式为pd.read_csv(../../data/US-pumpkins.csv)即数据文件位于2-Regression/data/目录下。这是“回到原始数据”的第一步。关于逻辑回归为什么它能做二分类在动手扩展作业之前有必要重温课程中的核心原理详见 2-Regression/4-Logistic/README.md逻辑回归本质上是分类方法虽然名称带“回归”但它输出的是“属于某个二分类类别的概率”例如“这块南瓜是白的还是非白的”而非连续数值预测。最大似然与 Sigmoid 函数逻辑回归依赖“最大似然”概念使用 Sigmoid 函数又称“逻辑曲线”把任意输入映射到 0~1 之间。函数输出大于 0.5 时样本被判为类别1否则判为类别0。变量不必相关与线性回归不同逻辑回归对特征的共线性并不敏感适合像南瓜数据这样特征相关性较弱的场景。需要更多干净数据逻辑回归在数据量更大时结果更准确这正是作业要求“使用全部数据”的动机所在——课程子集约 1000 行数据对逻辑回归而言并不充裕。除了二分类课程还介绍了两种扩展形态**Multinomial多项**用于多于两个无序类别如“橙/白/条纹”**Ordinal有序**用于存在顺序的类别如尺寸sml、med、lge等。第一步数据清洗与特征选择课程求解笔记本 2-Regression/4-Logistic/solution/notebook.ipynb 给出了清洗的标准动作import pandas as pd import numpy as np full_pumpkins pd.read_csv(../../data/US-pumpkins.csv) # 选择需要使用的列 columns_to_select [City Name,Package,Variety, Origin,Item Size, Color] pumpkins full_pumpkins.loc[:, columns_to_select] # 剔除含缺失值的行 pumpkins.dropna(inplaceTrue) pumpkins.head()扩展到全量数据时清洗环节要注意三点缺失值处理dropna(inplaceTrue)直接删除含 NaN 的行。全量数据中未命名列、Type、Sub Variety等字段缺失率较高直接保留会给编码和训练带来大量噪音应在特征筛选阶段就剔除。字段甄别Date可解析为时间特征或“一年中的第几天”Low Price/High Price/Mostly Low/Mostly High是连续的数值型字段恰好契合“标准化”的要求。数据探查清洗后可用pumpkins.info或pumpkins[Item Size].unique()查看数据类型与取值分布确认每个特征的类别数量是否适合做编码。第二步特征与标签编码关键环节机器学习的算法只能处理数值因此课程把编码视为“构建好模型的前提”。编码分为两个层面2.1 特征编码OrdinalEncoder OneHotEncoder课程针对南瓜数据总结了两类编码器顺序编码器OrdinalEncoder适用于存在逻辑顺序的分类变量如Item Size。其取值按[sml, med, med-lge, lge, xlge, jbo, exjbo]的顺序映射为 0~6 的整数。类别编码器OneHotEncoder适用于无顺序的名义变量如City Name、Package、Variety、Origin。每个类别生成一个二进制列南瓜属于该品种则该列为 1否则为 0。随后用ColumnTransformer把多个编码器组合成单一步骤并作用于各自对应的列from sklearn.preprocessing import OrdinalEncoder, OneHotEncoder from sklearn.compose import ColumnTransformer item_size_categories [[sml, med, med-lge, lge, xlge, jbo, exjbo]] ordinal_features [Item Size] ordinal_encoder OrdinalEncoder(categoriesitem_size_categories) categorical_features [City Name, Package, Variety, Origin] categorical_encoder OneHotEncoder(sparse_outputFalse) ct ColumnTransformer(transformers[ (ord, ordinal_encoder, ordinal_features), (cat, categorical_encoder, categorical_features) ]) ct.set_output(transformpandas) encoded_features ct.fit_transform(pumpkins)注意ct.set_output(transformpandas)使编码结果直接以 DataFrame 形式返回编码列会自动带上前缀如ord__Item Size、cat__City Name_BALTIMORE。作业扩展到全量数据时只需把categorical_features列表扩充为全量数据中的名义型特征并把连续数值特征如价格列交给StandardScaler进行标准化处理即可无缝复用这个ColumnTransformer。2.2 标签编码LabelEncoder目标变量Color用LabelEncoder归一化为 0/1from sklearn.preprocessing import LabelEncoder label_encoder LabelEncoder() encoded_label label_encoder.fit_transform(pumpkins[Color]) encoded_pumpkins encoded_features.assign(Colorencoded_label)求解笔记本中还演示了如何验证编码映射关系list(label_encoder.inverse_transform([0, 1]))该行会返回[ORANGE, WHITE]或按字母序排列的对应关系用于确认 0/1 与原始类别的对应避免评估时混淆正负类。第三步可视化探索特征与标签的关系课程强调“先可视化、再建模”。求解笔记本使用基于 Matplotlib 的Seaborn库绘制了三类图3.1 分类计数图catplot用sns.catplot(kindcount)观察每个品种Variety中橙色/白色南瓜的数量分布import seaborn as sns palette { ORANGE: orange, WHITE: wheat, } sns.catplot( datapumpkins, yVariety, hueColor, kindcount, palettepalette, )从图中可以直观看出Color与Variety的关联强度——某些品种几乎全是橙色少数品种如白皮品种才出现白色样本这提示Variety是预测颜色的重要特征。3.2 箱线图box plot把编码后的Item Size作为 x 轴、Color作为 y 轴、按品种分面rowVariety绘制箱线图可进一步观察“尺寸是否影响颜色”pumpkins[Item Size] encoded_pumpkins[ord__Item Size] g sns.catplot( datapumpkins, xItem Size, yColor, rowVariety, kindbox, orienth, sharexFalse, margin_titlesTrue, height1.8, aspect4, palettepalette, ) g.set(xlabelItem Size, ylabel).set(xlim(0,6)) g.set_titles(row_template{row_name})3.3 蜂群图swarm plot由于Color是二分类变量用蜂群图展示Color与编码后Item Size的分布palette { 0: orange, 1: wheat } sns.swarmplot(xColor, yord__Item Size, hueColor, dataencoded_pumpkins, palettepalette)注意数据点较多时 Seaborn 的蜂群图可能产生告警部分点无法放置。求解笔记本中给出的处理方式是抑制特定模块告警warnings.filterwarnings(actionignore, categoryUserWarning, moduleseaborn)或使用size参数调小标记。课程同时提醒抑制警告并非最佳实践应优先通过调参或换用其他图形如箱线图解决。第四步训练与评估逻辑回归模型4.1 划分训练集与测试集from sklearn.model_selection import train_test_split X encoded_pumpkins[encoded_pumpkins.columns.difference([Color])] y encoded_pumpkins[Color] X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state0)这里test_size0.2表示 20% 数据用于测试random_state0固定随机种子保证结果可复现。课程子集约 1000 行测试集约 199 条样本。4.2 训练与分类报告from sklearn.metrics import f1_score, classification_report from sklearn.linear_model import LogisticRegression model LogisticRegression() model.fit(X_train, y_train) predictions model.predict(X_test) print(classification_report(y_test, predictions)) print(Predicted labels: , predictions) print(F1-score: , f1_score(y_test, predictions))课程在 6 列子集上得到的分类报告数据来自 2-Regression/4-Logistic/README.md如下precision recall f1-score support 0 0.94 0.98 0.96 166 1 0.85 0.67 0.75 33 accuracy 0.92 199 macro avg 0.89 0.82 0.85 199 weighted avg 0.92 0.92 0.92 199 Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 1] F1-score: 0.7457627118644068对这份报告的解读要点这也是作业评估模型的参照系类别 0非白precision 0.94 / recall 0.98 / f1 0.96预测非常稳健类别 1白precision 0.85 / recall 0.67 / f1 0.75recall 偏低说明部分白色南瓜被漏判整体accuracy 0.92weighted avg f1 0.92。4.3 混淆矩阵理解模型的“错在哪里”课程使用confusion_matrix把误判可视化from sklearn.metrics import confusion_matrix confusion_matrix(y_test, predictions)课程子集上的输出为array([[162, 4], [ 11, 22]])在 Scikit-learn 中行axis 0是真实标签列axis 1是预测标签对应关系为预测 0预测 1真实 0TN162FP4真实 1FN11TP22TN真负162预测非白且实际非白FP假正4预测为白但实际非白FN假负11预测非白但实际是白——这类漏判正是 recall 偏低的原因TP真正22预测为白且实际为白。混淆矩阵直接解释了 precision 与 recall 的数值来源Precision TP / (TP FP) 22 / (22 4) 0.8461... Recall TP / (TP FN) 22 / (22 11) 0.6666...课程对评估术语的定义均可在 2-Regression/4-Logistic/README.md 中找到Precision精确率TP/(TPFP)检索出的相关实例占比Recall召回率TP/(TPFN)被正确检索到的相关实例占比F1-score(2×precision×recall)/(precisionrecall)精确率与召回率的加权平均最好为 1、最差为 0Support每个标签出现的次数Accuracy(TPTN)/(TPTNFPFN)样本中被准确预测的比例Macro Avg各标签指标的无权重均值不考虑类别不平衡Weighted Avg按 support 加权后的均值考虑类别不平衡。第五步ROC 曲线与 AUC 评估评估的最后一步是绘制 ROC 曲线并计算 AUC。课程代码如下from sklearn.metrics import roc_curve, roc_auc_score import matplotlib import matplotlib.pyplot as plt %matplotlib inline y_scores model.predict_proba(X_test) fpr, tpr, thresholds roc_curve(y_test, y_scores[:,1]) fig plt.figure(figsize(6, 6)) plt.plot([0, 1], [0, 1], k--) plt.plot(fpr, tpr) plt.xlabel(False Positive Rate) plt.ylabel(True Positive Rate) plt.title(ROC Curve) plt.show()ROC 曲线以假正率FPR为横轴、真正率TPR为纵轴展示分类器在“真 vs 假正”之间的权衡。曲线越早向上爬升并越过对角线模型判别能力越强。随后用roc_auc_score计算曲线下面积auc roc_auc_score(y_test, y_scores[:,1]) print(auc)课程子集上的结果为0.9749908725812341。AUC 取值范围为 0~1越大越好100% 正确的模型 AUC 为 1这个分数说明课程模型“相当不错”——这也是作业用全量数据重做时的对标基准。扩展到全量数据的实践要点结合作业要求“使用全部数据清洗并标准化”在课程流水线基础上应补充以下动作特征选择扩围把课程中 6 列替换为全量数据的有效特征列剔除高缺失率列Type、Sub Variety、未命名列与标签Color。连续特征标准化全量数据新增Low Price、High Price、Mostly Low、Mostly High等连续字段。这些字段量纲差异大建议用StandardScaler纳入ColumnTransformer例如from sklearn.preprocessing import StandardScaler numeric_features [Low Price, High Price, Mostly Low, Mostly High] numeric_scaler StandardScaler()类别特征扩充Origin、City Name等名义变量的基数可能很高one-hot 后特征维度会显著上升需评估是否对低频率类别做合并或保留。基准对比以课程子集的accuracy 0.92 / AUC 0.975为基线对比全量模型在分类报告与混淆矩阵上的变化分析新增特征带来的增益或噪音。结果呈现作业要求交付“解释充分且性能良好的模型笔记本”因此每个单元格都应保留课程求解笔记本那样的中文/英文注释与关键输出head()、unique()、分类报告、混淆矩阵、ROC 图。验收标准与交付物作业的评分标准见 translations/el/2-Regression/4-Logistic/assignment.md 及英文原版 2-Regression/4-Logistic/assignment.md如下标准优秀Exemplary合格Adequate待改进Needs Improvement交付物提交一个解释充分且性能良好的模型笔记本提交一个性能勉强的模型笔记本提交一个性能不佳或没有模型的笔记本对照本篇文章的流程达到“优秀”档需要满足数据读取自原始文件2-Regression/data/US-pumpkins.csv而不是课程子集缓存完成缺失值处理、特征/标签编码并对数值特征做标准化训练LogisticRegression并输出classification_report、混淆矩阵与 ROC/AUC每个步骤均有清晰注释与可视化佐证能解释模型“为什么好/为什么差”。参考实现与延伸阅读课程完整正文含 Sigmoid 公式、评估指标详解2-Regression/4-Logistic/README.md官方 Python 求解笔记本与本文代码一一对应2-Regression/4-Logistic/solution/notebook.ipynbR 语言版本课程使用 tidyverse / tidymodels / janitor / ggbeeswarm2-Regression/4-Logistic/solution/R/lesson_4.Rmd原始数据集2-Regression/data/US-pumpkins.csv课程中的示例笔记本2-Regression/4-Logistic/notebook.ipynb逻辑回归可挖掘的内容远不止于此但最好的学习方式永远是动手实验——按本作业要求把 6 列子集扩展到全量数据观察清洗、编码与标准化对模型每一项指标的影响就是对这一课最好的巩固。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

ISO/IEC 17025 实验室认可准备:证据架构驱动的测试与校准实验室能力准备指南

ISO/IEC 17025 实验室认可准备:证据架构驱动的测试与校准实验室能力准备指南

ISO/IEC 17025 实验室认可准备:证据架构驱动的测试与校准实验室能力准备指南 【免费下载链接】scientific-agent-skills Turn any AI agent into an AI Scientist. The #1 Agent Skills library for science, used by 190,000 scientists worldwide. 165 ready-to-u…

📅 2026/9/11 20:35:56
openai-agents-python 流式传输完全指南:从原始事件到智能体更新的订阅机制

openai-agents-python 流式传输完全指南:从原始事件到智能体更新的订阅机制

openai-agents-python 流式传输完全指南:从原始事件到智能体更新的订阅机制 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-python …

📅 2026/9/11 20:35:56
Zulip REST API 完全使用指南:从 API 密钥、HTTP 认证到端点全景

Zulip REST API 完全使用指南:从 API 密钥、HTTP 认证到端点全景

Zulip REST API 完全使用指南:从 API 密钥、HTTP 认证到端点全景 【免费下载链接】zulip Zulip server and web application. Open-source team chat that helps teams stay productive and focused. 项目地址: https://gitcode.com/GitHub_Trending/zu/zulip …

📅 2026/9/11 20:35:56
MORE NEWS

更多资讯

📰

Good Example

Good Example 【免费下载链接】awesome-copilot Community-contributed instructions, agents, skills, and configurations to help you make the most of GitHub Copilot. 项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-copilot // Recommended approach…

📰

两数相加链表题详解:从竖式加法到进位处理的完整思路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

连锁门店系统选型:SaaS年费与买断源码的三年成本账

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

千人并发到底算不算大事?从压测到数据库锁全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

美团UV增长策略:从流量获取到用户留存的技术实践

1. 美团UV增长的商业逻辑与行业背景在本地生活服务领域,UV(Unique Visitor)作为衡量平台用户规模的核心指标,其增长直接关系到平台的商业价值。美团作为国内领先的生活服务电商平台,其UV增长背后反映的是平台在流量获取…

📰

电池充电电路中的路径管理:防倒灌、DPPM与低功耗设计

电池充电电路的设计里,大家最关注的往往是充电电流精度、截止电压、充电截止电流这些参数,但真正决定一块电池管理系统“能不能用”的,反而是路径管理。简单说,路径管理解决的不是“怎么把电充进电池”,而是“适配器、…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬