尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

ML-For-Beginners 回归作业实战:构建并评估南瓜价格的线性/多项式回归模型

发布时间:2026/9/8 22:14:45

资讯中心
01
ARTICLE

ML-For-Beginners 回归作业实战:构建并评估南瓜价格的线性/多项式回归模型

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 课程回归章节的作业《创建回归模型Create a Regression Model》为主体完整走通选数据集 → 建模型 → 证明精度 → 书面说明的闭环从仓库自带的美国南瓜价格数据出发用 Scikit-learn 依次构建线性回归、多项式回归与 One-Hot 编码的混合特征模型。读完本文你将掌握线性/多项式回归的完整代码管线数据清洗、相关性分析、RMSE 与决定系数评估、评估结果不达标时的归因方法以及按课程评分标准Rubric自查作业质量的清单。一、作业要求原文《创建回归模型》的指令与评分标准本课程的回归作业文档共有两个版本英文原版位于 2-Regression/3-Linear/assignment.md捷克语译文位于 translations/cs/2-Regression/3-Linear/assignment.md该译文文档末尾附有自动翻译声明说明原文档为权威版本。两者内容一致核心要求如下指令Instructions在本课中你学习了如何使用线性回归Linear Regression与多项式回归Polynomial Regression构建模型。基于这些知识请自行找一个数据集或使用 Scikit-learn 的内置数据集从零构建一个新模型。在你的 notebook 中解释为什么选择该技术并展示模型的精度demonstrate your models accuracy。如果模型并不精确请解释原因。评分标准Rubric评分维度优秀Exemplary合格Adequate需改进Needs Improvement解决方案提交完整的 notebook且包含文档完善的解决方案解决方案不完整解决方案有缺陷或存在 bug从这份作业可以看出三个硬性得分点后文将逐一给出可操作的实现路径完整的 notebook数据加载、建模、评估、结论缺一不可文档完善well-documented必须用 Markdown 文字说明为什么用这个技术而不是只贴代码精度证明 失败归因用指标RMSE、决定系数量化精度当模型不达标时要能结合数据特性解释为什么不精确。值得注意的是作业刻意没有指定数据集——南瓜价格只是课程示范用的数据真正的考核目标是把课上展示的建模方法论迁移到任何数据集上。二、数据集准备仓库自带的南瓜价格数据课程默认数据集是 2-Regression/data/US-pumpkins.csv共 1757 行、26 列记录美国各城市南瓜批发市场的报价。原始表头包含City Name、Package、Variety、Date、Low Price、High Price等字段价格单位是每个包装而非每蒲式耳bushel因此需要先做标准化。课程在 2-Regression/3-Linear/notebook.ipynb 中给出了完整的预处理代码该 notebook 中以课程目录为相对路径读取../data/US-pumpkins.csv若在仓库根目录运行请将路径改为2-Regression/data/US-pumpkins.csvimport pandas as pd import matplotlib.pyplot as plt import numpy as np from datetime import datetime pumpkins pd.read_csv(2-Regression/data/US-pumpkins.csv) # 只保留按 bushel 计价的记录 pumpkins pumpkins[pumpkins[Package].str.contains(bushel, caseTrue, regexTrue)] columns_to_select [Package, Variety, City Name, Low Price, High Price, Date] pumpkins pumpkins.loc[:, columns_to_select] # 取高低报价均值作为价格 price (pumpkins[Low Price] pumpkins[High Price]) / 2 # 月份 年内第几天DayOfYear month pd.DatetimeIndex(pumpkins[Date]).month day_of_year pd.to_datetime(pumpkins[Date]).apply( lambda dt: (dt - datetime(dt.year, 1, 1)).days) new_pumpkins pd.DataFrame( {Month: month, DayOfYear: day_of_year, Variety: pumpkins[Variety], City: pumpkins[City Name], Package: pumpkins[Package], Low Price: pumpkins[Low Price], High Price: pumpkins[High Price], Price: price}) # 把不同规格的价格统一折算成每蒲式耳 new_pumpkins.loc[new_pumpkins[Package].str.contains(1 1/9), Price] price / 1.1 new_pumpkins.loc[new_pumpkins[Package].str.contains(1/2), Price] price * 2清洗后得到new_pumpkins数据框约 415 行列为Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price示例行如IDMonthDayOfYearVarietyCityPackagePrice709267PIE TYPEBALTIMORE1 1/9 bushel cartons13.636364719267PIE TYPEBALTIMORE1 1/9 bushel cartons16.3636367410281PIE TYPEBALTIMORE1 1/9 bushel cartons13.636364课程设定了三个业务问题作为建模目标什么时候买南瓜最划算一箱微型南瓜能卖什么价应该买半蒲式耳装还是 1 1/9 蒲式耳纸箱装同时要注意一个数据边界数据只覆盖 8 月到 12 月的月份信息这一限制后面会直接影响模型精度的归因。三、先找相关性决定线性回归到底可不可行作业要求解释为什么选择该技术而相关性分析正是这个论证的第一手证据。课程的 README.md 与 2-Regression/3-Linear/solution/notebook.ipynb 给出了完整的分析路径。第一步用 Pandas 的corr计算候选特征与价格的相关系数print(new_pumpkins[Month].corr(new_pumpkins[Price])) print(new_pumpkins[DayOfYear].corr(new_pumpkins[Price]))仓库 solution notebook 的实际输出为-0.1488按 Month与-0.1667按 DayOfYear——相关性很小单看日期与价格几乎不存在线性关系。第二步按南瓜品种Variety着色重绘散点图立刻能看到价格分成了不同色簇ax None colors [red, blue, green, yellow] for i, var in enumerate(new_pumpkins[Variety].unique()): df new_pumpkins[new_pumpkins[Variety] var] ax df.plot.scatter(DayOfYear, Price, axax, ccolors[i], labelvar)再用分组柱状图确认品种对价格的主导作用new_pumpkins.groupby(Variety)[Price].mean().plot(kindbar)第三步聚焦单一品种PIE TYPE后重新计算相关性pie_pumpkins new_pumpkins[new_pumpkins[Variety] PIE TYPE] print(pie_pumpkins[DayOfYear].corr(pie_pumpkins[Price])) # -0.2669 pie_pumpkins.plot.scatter(DayOfYear, Price)相关系数提升到-0.2669说明在品种固定的前提下日期与价格存在负相关此时训练回归模型才有意义。此外线性回归对缺失值不友好训练前先清洗pie_pumpkins.dropna(inplaceTrue) pie_pumpkins.info()另一种处理缺失值的方案是用对应列的均值填充。这一段分析可以直接写进作业的技术选择说明先证明单一特征与目标存在弱相关性再证明混杂因素品种是主要的价格驱动从而决定后续模型需要引入类别特征。四、简单线性回归两行代码训练RMSE 与决定系数双指标评估Scikit-learn 的训练入口非常简单。注意一个容易踩的坑LinearRegression要求输入是二维数组单特征必须reshape(-1, 1)成 N×1 形状from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split X pie_pumpkins[DayOfYear].to_numpy().reshape(-1, 1) y pie_pumpkins[Price] # 划分训练/测试集random_state0 保证可复现 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state0) lin_reg LinearRegression() lin_reg.fit(X_train, y_train)训练后回归线Y a bX的两个参数直接可读lin_reg.coef_, lin_reg.intercept_ # (array([-0.01751876]), 21.133734359909326)仓库 solution notebook 的输出显示斜率约为-0.0175价格随年内日期推进每天下降约 1.7 美分截距约21.13可理解为年初基价。评估精度用两个指标——RMSE均方根误差和决定系数coefficient of determination, R²pred lin_reg.predict(X_test) rmse np.sqrt(mean_squared_error(y_test, pred)) print(fRMSE: {rmse:3.3} ({rmse / np.mean(pred) * 100:3.3}%)) score lin_reg.score(X_train, y_train) print(Model determination: , score)solution notebook 的实际输出RMSE 2.7717.2%决定系数约0.076。这里正落在作业如果模型不精确请解释为什么的分支上R² 只有 0.076 意味着模型几乎不比直接报均值好多少原因是单一特征 DayOfYear 与价格的相关性太弱-0.27且数据只覆盖 8–12 月、样本约 400 行日期本身并不是价格的强解释变量。这个归因链条相关性弱 → R² 低 → 需要引入更强特征就是作业要求的不精确原因说明的示范写法。还可以用训练好的模型做单点预测仓库 notebook 中的例子是预测程序员节年内第 256 天的价格lin_reg.predict([[256]]) # array([16.64893156])把测试集散点与拟合直线画在一起plt.scatter(X_test, y_test); plt.plot(X_test, pred)就是前文摘要后展示的线性结果图。五、多项式回归PolynomialFeatures Pipeline 处理非线性如果价格随时间呈先降后升的波动直线就拟合不动了。Scikit-learn 的 Pipeline API 把特征变换 模型训练串成一条链from sklearn.preprocessing import PolynomialFeatures from sklearn.pipeline import make_pipeline pipeline make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train, y_train)PolynomialFeatures(2)表示引入二阶多项式特征对单个输入DayOfYear只新增DayOfYear²若输入有 X、Y 两个变量则会新增 X²、XY、Y² 三项更高阶同理把参数调大即可。Pipeline 训练后与LinearRegression对象用法一致fit/predict/score全部通用pred pipeline.predict(X_test) rmse np.sqrt(mean_squared_error(y_test, pred)) print(fRMSE: {rmse:3.3} ({rmse / np.mean(pred) * 100:3.3}%)) score pipeline.score(X_train, y_train) print(Model determination: , score)solution notebook 输出RMSE 2.7317.0%决定系数0.0764。相比线性模型只略有提升——这与课程结论一致光靠日期的弯曲项救不了弱相关性必须引入其他特征。绘制平滑拟合曲线时有一个细节不要直接在无序的测试集上连线会得到锯齿线而是用np.linspace生成均匀输入序列再预测X_range np.linspace(X_test.min(), X_test.max(), 100).reshape(-1, 1) y_range pipeline.predict(X_range) plt.scatter(X_test, y_test) plt.plot(X_range, y_range)从拟合出的抛物线可以看到PIE TYPE 南瓜的最低价出现在 10 月底前后万圣节附近这是一个可以在 notebook 里顺带写出的业务洞察。六、类别特征数值编码为什么不行One-Hot 编码怎么做Variety品种是典型的类别特征——非数值型不能直接喂给线性回归。课程对比了两种编码方式简单数值编码给每种品种分配一个下标0/1/2/3替换名称。问题在于线性回归会把下标当作真实数值参与加权——MINIATURE1、PIE TYPE3之间并不存在与价格对应的数值距离即使人为固定排序也改不了这种虚假的线性假设One-Hot 编码把一个类别列拆成 N 个 0/1 列每列对应一个取值为该取值时取 1否则取 0。线性回归会为每个品种学一个独立系数相当于给每个品种一个基准价。用pd.get_dummies一行完成编码pd.get_dummies(new_pumpkins[Variety])输出是 415 行 × 4 列的矩阵FAIRYTALE、MINIATURE、MIXED HEIRLOOM VARIETIES、PIE TYPE。只用品种作为输入训练线性回归X pd.get_dummies(new_pumpkins[Variety]) y new_pumpkins[Price] X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state0) lin_reg LinearRegression() lin_reg.fit(X_train, y_train) pred lin_reg.predict(X_test) rmse np.sqrt(mean_squared_error(y_test, pred)) print(fRMSE: {rmse:3.3} ({rmse / np.mean(pred) * 100:3.3}%)) print(Model determination: , lin_reg.score(X_train, y_train))solution notebook 输出RMSE 5.2419.7%但决定系数跃升到0.774。这个对比非常有教学价值RMSE 的绝对值变差了因为预测对象从单品种变成了全体品种价格离散度更大但 R² 从 0.076 升到 0.77证明品种才是价格的第一解释变量——这恰好为为什么选择线性回归 One-Hot 编码提供了量化论据。七、汇总混合特征 多项式管线决定系数升到 97%把 One-Hot 类别特征与数值特征合并用join拼成一张大特征表再叠加多项式管线就是课程给出的最终形态完整代码如下# 组装训练数据One-Hot 类别特征 数值特征 X pd.get_dummies(new_pumpkins[Variety]) \ .join(new_pumpkins[Month]) \ .join(pd.get_dummies(new_pumpkins[City])) \ .join(pd.get_dummies(new_pumpkins[Package])) y new_pumpkins[Price] # 划分训练/测试集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state0) # 构建并训练多项式管线 pipeline make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train, y_train) # 对测试集预测 pred pipeline.predict(X_test) # 计算 RMSE 与决定系数 rmse mean_squared_error(y_test, pred, squaredFalse) print(fRMSE: {rmse:3.3} ({rmse / pred.mean() * 100:3.3}%)) score pipeline.score(X_train, y_train) print(Model determination: , score)solution notebook 的最终输出RMSE 2.238.25%决定系数0.9653。课程 README 中汇总的五个模型对比表如下可作为你作业 notebook 中精度展示的参照格式模型RMSE决定系数DayOfYear线性回归2.77 (17.2%)0.07DayOfYear多项式回归2.73 (17.0%)0.08VarietyOne-Hot线性回归5.24 (19.7%)0.77全部特征 线性回归2.84 (10.5%)0.94全部特征 多项式回归2.23 (8.25%)0.97这张表本身就是一份模型演进叙事弱相关单特征R²0.07→ 加入类别特征R²0.77→ 全特征R²0.94→ 全特征 多项式R²0.97。在作业中复现这条演进曲线就是展示模型精度最有力的方式。八、完成作业如何写为什么选该技术与为什么不精确把上面的分析路径转写成作业要求的文档建议 notebook 包含以下 Markdown 章节作业评估的是你自己新建的 notebook与仓库文件无关1. 技术选择论证对应Explain why you chose the technique按证据链组织目标变量是连续数值价格因此属于回归问题而非分类问题 → 选择回归展示corr结果说明所选特征与目标存在相关性如 PIE TYPE 下 DayOfYear 与 Price 的相关系数 -0.27说明线性拟合有意义若散点图显示曲线趋势价格随时间先降后升说明引入PolynomialFeatures的理由若数据含文本列如 Variety、City说明 One-Hot 编码的理由并解释为什么不用简单数值编码。2. 精度展示对应demonstrate your models accuracy固定random_state保证可复现报告测试集 RMSE含相对百分比与训练集决定系数附上测试集散点 拟合线/拟合曲线的图用课程同款汇总表呈现多个模型配置的对比。3. 不精确时的归因对应If it is not accurate, explain why课程数据本身就提供了完整范例常见的归因点包括单一特征与目标相关性太弱R² ≈ 0.076 时模型几乎等同于预测均值数据覆盖范围有限本数据集月份只覆盖 8–12 月样本约 400 行无法刻画全年季节性类别混杂未纳入特征全量数据的 Month/DayOfYear 相关性只有 -0.15/-0.17加入品种特征后才提升价格本身含市场噪声同一日期不同城市、不同包装的报价离散。4. 不使用南瓜数据时的替代路径作业允许使用 Scikit-learn 的内置数据集。Scikit-learn 提供了一批内置数据集接口如sklearn.datasets中的load_diabetes、fetch_california_housing、fetch_openml等任选其一后流程与本文完全同构查看data_frame特征 →corr找相关特征 → 处理缺失值 →train_test_split→LinearRegression或make_pipeline(PolynomialFeatures(2), LinearRegression())→ 报告 RMSE/R²。注意内置数据集中的类别型列如字符串城市名同样需要先做 One-Hot 编码。5. 对照 Rubric 自查notebook 能从头到尾连续运行无未定义变量、无缺图对应complete notebook每段代码前有 Markdown 解释动机关键数字相关系数、系数、RMSE、R²在正文中被引用对应well-documented结论部分明确回答精度如何 为什么避免只贴指标不解释。课程 README 末尾还给出了进阶挑战Challenge在本 notebook 上测试多个不同变量观察相关系数与模型精度的对应关系自我学习部分建议继续了解 Stepwise、Ridge、Lasso 与 Elasticnet 等回归技术它们都是线性回归在特征选择与正则化方向上的延伸。九、参考文件清单文件说明translations/cs/2-Regression/3-Linear/assignment.md本文主体捷克语版作业含 Rubric2-Regression/3-Linear/assignment.md英文原版作业2-Regression/3-Linear/README.md课程正文线性/多项式回归、相关性、类别特征讲解与模型汇总表2-Regression/3-Linear/notebook.ipynb学生版 notebook数据加载与清洗代码2-Regression/3-Linear/solution/notebook.ipynb参考答案 notebook含各模型 RMSE、R² 与系数实际输出2-Regression/3-Linear/solution/R/lesson_3-R.ipynbR 语言版参考实现2-Regression/data/US-pumpkins.csv美国南瓜价格数据集1757 行【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。