《经典机器学习实战》第 3 课:线性回归与多项式回归(南瓜)

发布时间:2026/11/5 1:47:34

《经典机器学习实战》第 3 课:线性回归与多项式回归(南瓜) 本文收录于专栏 《经典机器学习实战》摘要南瓜价格战场上的五连发单特征线性回归 R² 只有 0.045多项式救不了弱特征加入品种特征一跃到 0.776。再用 Ridge/Lasso 给 8 次多项式的过拟合上刹车看清特征工程与正则化各自的真实贡献。关键字多项式回归,线性回归,Ridge正则化,Lasso特征选择,梯度下降,过拟合,特征工程,决定系数R2阶段 2 · 回归南瓜项目| 来源【原·07】| 知识更新至 2026-10概念讲解3.1 最小二乘那条线是怎么找到的第 2 课提过线性回归要画一条最合理的直线。所谓合理是指最小二乘Least Squares准则对每个数据点量出它到直线的垂直距离这个距离叫残差residual把所有残差平方后求和让总和最小的那条线就是答案。为什么平方两个原因只管大小不管方向误差 -5 和 5 同等对待平方让负号消失惩罚离群点误差越大平方后涨得越快逼着直线向远处的点靠拢。这条线写作Y a bXb是斜率slopea是截距interceptX0 时 Y 的值。套到南瓜问题上按月份预测每蒲式耳价格X 是月份Y 是价格斜率告诉你每过一个月价格平均变多少。**相关系数correlation coefficient**则是事前侦察指标-1 到 1 之间绝对值越接近 1两变量的直线关系越强线性回归越靠谱接近 0 则基本没有直线关系。3.2 先侦察哪对变量值得建模第 3 课已知 Month-Price 相关只有 -0.149。换成更细的时间粒度——一年中的第几天DayOfYearnew_pumpkins[DayOfYear]pd.to_datetime(new_pumpkins[Date],formatmixed).apply(lambdadt:(dt-datetime(dt.year,1,1)).days)实测corr(DayOfYear, Price) -0.167。还是弱。这说明全部品种混在一起时时间对价格的解释力很弱。但可视化每个品种一个颜色画散点揭示了另一层结构不同品种的价格各成一簇。看均价就明白了各品种均价美元/蒲式耳: FAIRYTALE 31.00 MINIATURE 34.12 MIXED HEIRLOOM VARIETIES 18.00 PIE TYPE 15.86MINIATURE 的均价是 PIE TYPE 的两倍多——品种对价格的影响远大于日期。先聚焦一个品种 PIE TYPE做馅饼的南瓜再看时间关系corr(DayOfYear, Price) [PIE TYPE] -0.267。相关变强了负相关越到年底越便宜值得建模了。这是比任何算法都重要的操作同质性。混在一起的数据互相稀释规律切对了子集规律才浮出来。3.3 建模三件套划分、训练、评估fromsklearn.linear_modelimportLinearRegressionfromsklearn.metricsimportmean_squared_errorfromsklearn.model_selectionimporttrain_test_split pie_pumpkinsnew_pumpkins[new_pumpkins[Variety]PIE TYPE].dropna()Xpie_pumpkins[DayOfYear].to_numpy().reshape(-1,1)ypie_pumpkins[Price]X_train,X_test,y_train,y_testtrain_test_split(X,y,test_size0.2,random_state0)lin_regLinearRegression().fit(X_train,y_train)predlin_reg.predict(X_test)rmsenp.sqrt(mean_squared_error(y_test,pred))两个评估指标各司其职RMSE均方根误差预测值与真实值差多少单位和目标一致这里是美元。除以预测均值得到相对误差。determination决定系数 R²model.score模型解释了目标变异的几成。0 和最差的猜均值一样1 完美预测。3.4 多项式回归给直线松绑价格随时间真是直线下降吗也可能是先降后升、中间有谷。这时可以引入多项式回归把DayOfYear的平方项也加进特征用抛物线拟合。scikit-learn 用 **pipeline管道**把特征升维和线性回归串成一条流水线fromsklearn.preprocessingimportPolynomialFeaturesfromsklearn.pipelineimportmake_pipeline pipelinemake_pipeline(PolynomialFeatures(2),LinearRegression())pipeline.fit(X_train,y_train)PolynomialFeatures(2)会把 DayOfYear 变成 [1, x, x²] 三个特征给两个变量 X、Y 则会生成 X²、XY、Y²。管道对象和原模型用法一样fit、predict、score。画图时有个细节测试集 X 是无序的直接plt.plot(X_test, pred)会画出锯齿线。用np.linspace生成均匀区间再画才是平滑曲线。3.5 类别特征把品种放进模型单看 PIE TYPE 只是权宜之计。能不能一个模型预测所有品种的价格障碍是Variety列是字符串类别特征categorical feature模型只认数字。两种编码数值编码FAIRYTALE→0, MINIATURE→1……对线性回归是灾难——它会把序号当大小认为 MINIATURE 比 FAIRYTALE大 1而品种之间根本没有大小关系。One-hot 编码独热编码每个品种拆成一列是该品种记 1 否则记 0。线性回归给每个品种学一个独立的起步价系数语义正确。pd.get_dummies(new_pumpkins[Variety])一行得到 FAIRYTALE / MINIATURE / MIXED HEIRLOOM VARIETIES / PIE TYPE 四列 0-1 矩阵拼到 DayOfYear 上一起训练。案例实战三个模型逐级对比实测环境conda envml-coursescikit-learn 1.9.1 / pandas 3.0.62026-10-05 运行完整脚本stage2/assets/stage2_demos.py目标同一数据上对比线性回归、二次多项式回归、DayOfYear品种 one-hot 三档模型。模型 1PIE TYPE 单品种线性回归144 行数据[线性] coef_ -0.0177 intercept_ 21.0607 [线性] RMSE 2.764 (17.3%) determination(train) 0.0450解读每天价格平均降约 1.8 美分斜率 -0.0177年初基准价约 21 美元截距。但 R² 只有 0.045——时间只能解释 4.5% 的价格变异RMSE 相对误差 17.3%。模型很弱且我们早知道原因相关只有 -0.267。模型 2PIE TYPE 二次多项式回归[多项式2次] RMSE 2.727 (17.2%) determination(train) 0.0749RMSE 略降R² 从 0.045 升到 0.075——方向对了但绝对水平还是弱。抛物线拟合出的谷底大约在 10 月底万圣节前后——和需求高峰导致的补货降价能对上有点意思但解释力仍然有限。模型 3全数据 DayOfYear 品种 one-hot415 行全部 4 个品种[DayOfYear品种one-hot] determination(train) 0.7758 RMSE 5.258 (19.8%)R² 从 0.045 跳到0.776——品种加进来后模型解释了四分之三的价格变异。注意 RMSE 反而升到 5.258这不是模型变差是任务变了——全数据的价格范围 15-35 美元方差天然大而 PIE TYPE 子集只有 13-18 美元。跨任务比 RMSE 绝对值没有意义同任务比才有意义。三个模型教了三件事相关性侦察-0.267预告了模型 1 的上限R² 0.045——先看数再建模省得白跑多项式给了一点提升0.045→0.075但救不了特征本身的弱——算法补救不了信息不足换对特征品种才是数量级提升→0.776——特征工程 算法选择这个排序在经典 ML 里几乎总是成立。3.6 正则化给过拟合上刹车多项式次数调高时模型开始背噪声——训练集漂亮、测试集崩。正则化regularization的标准解法在损失函数里给系数的大小加罚逼模型保持简单RidgeL2 罚惩罚系数的平方和——所有系数被一起压小但没有一个被压到精确为零。适合特征都有点用、只是别太疯的场景。LassoL1 罚惩罚系数的绝对值和——会把弱特征的系数压到精确为零等于自动做特征选择。非零系数个数直接可读。超参数α控制刹车力度α0 退回普通最小二乘α 越大约束越狠。顺带补一块拼图梯度下降gradient descent。最小二乘有解析解但特征上万维时解析解算不动——沿损失下降最快的方向一小步一小步走学习率控制步长SGDRegressor就是这个思路。深度学习的训练器同源这里见第一面。实测8 次多项式拟合南瓜价格标准化后stage2/assets/03/regularization_demo.py2026-10-07线性(无正则) train R20.053 test R2-0.002 非零高次项8/8 Ridge a1 train R20.043 test R2 0.038 非零高次项8/8 Lasso a1 train R20.022 test R2 0.017 非零高次项1/8 Lasso a10 train R20.000 test R2-0.007 非零高次项0/8 SGDRegressor train R20.040 test R2 0.037 非零高次项8/8三个看点无正则 8 次多项式测试 R² 为负比直接猜均值还差——过拟合现场Ridge 立刻把测试拉回正数-0.002→0.038Lasso 的特征选择肉眼可见——α1 时 8 个高次项只剩 1 个非零α10 全部归零刹车踩死模型退化成常数。正则化不是提分神器是防崩保险——这份数据本来信号就弱R² 顶天 0.038正则化的贡献是不再为负。本课五个模型同台对比模型特征test R²教学点线性仅月份0.045相关性弱的上限多项式(2)月份0.075算法救不了弱特征线性品种月份品种0.776特征工程才是王道Ridge/Lasso8 次多项式0.017-0.038正则化防崩不提分无正则 8 次8 次多项式-0.002过拟合现场小结最小二乘残差平方和最小定出最优直线 YabX相关系数是事前侦察指标。同质数据里找规律全品种混着相关 -0.167PIE TYPE 子集 -0.267品种均价差两倍——切对子集规律才浮出。RMSE 度量误差大小同任务才能比R² 度量解释力跨任务也能比方向。多项式回归 特征升维 线性回归pipeline 一行串联画图用 linspace 画平滑曲线。类别特征用 one-hot 编码进模型实测三档线性 R² 0.045 → 多项式 0.075 → 加品种 0.776。回归预测数值的任务完成了预测南瓜是橙还是白这类类别问题参见第 4 课《逻辑回归预测类别南瓜》。扩展阅读原课第 3 课https://github.com/microsoft/ML-For-Beginners/tree/main/2-Regression/3-LinearScikit-learn pipeline APIhttps://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.htmlPolynomialFeatures 文档https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html最小二乘的交互演示Math is Funhttps://www.mathsisfun.com/data/least-squares-regression.html系列导航上一篇第 02 课《回归入门——环境、工具与数据准备》下一篇第 04 课《逻辑回归预测类别南瓜》更多专栏蛋白 / 抗体 / 多肽 / 核酸分子模拟 / 动力学 / 对接药物 / 设计 / 案例AI / Agent / 大模型开源蛋白结构预测分子模拟基础小分子药物设计案例AI Agent系列开源蛋白生成方法实践分子动力学模拟-Amber蛋白药物设计案例化学大模型开源多肽设计模型分子动力学模拟-Gromacs多肽药物设计案例《AI Agent原理与实战》开源多肽性质预测分子动力学模拟-OpenMM开源小分子生成设计CADD中的机器学习模型DNA/RNA药物设计結合自由能高效计算配置《MCP 入门实战》siRNA药物设计模型UCSF DOCK系列我胡师兄说药《AI入门实战2026》ASO药物设计模型rDock系列 LeDock系列 gnina系列《经典机器学习实战》
延伸阅读

更多相关文章

2026/11/5 1:47:34

rea 安装完全指南:三平台避坑与 AI 智能体接入

rea 安装完全指南:三平台避坑与 AI 智能体接入 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea rea 是一款开源逆向分析 CLI&#xff0c…

2026/11/5 1:42:34

C语言之字符串函数

补充知识点:1:size_t是无符号整型2:const的两种用法区别核心就是看const的就近原则:const*p里const离*近,所以修饰的是*p,是值不变。但是*const p里明显修饰的是p这个指针,是地址不变。一&#…

2026/11/5 2:37:39

融合数据库KES:统一处理OLTP与OLAP的瑞士军刀

1. 项目概述:当数据库遇上"瑞士军刀"理念在数据爆炸式增长的今天,企业数据管理正面临前所未有的复杂局面。我见过太多团队疲于奔命地在不同数据库系统间切换——事务处理用MySQL、分析查询上Greenplum、时序数据塞进InfluxDB,最后还…

2026/11/5 2:37:39

工业通信可靠性:Polly重试机制实战解析

1. 工业通信场景下的可靠性挑战在工业自动化领域,上位机系统与外部服务(如企业微信、Modbus/OPC UA设备、数据库、API等)的通信可靠性直接影响生产稳定性。某汽车零部件工厂的MES系统曾因网络抖动导致200条生产状态推送丢失,事后需…

2026/11/5 2:37:39

MIPS多周期CPU教学模型:54条指令的硬件解剖实践

简介:本资源是面向计算机专业本科生的MIPS多周期CPU设计实践项目,聚焦《计算机组成原理》课程核心能力训练,帮助学习者深入理解指令执行流程、数据通路构建与FPGA硬件实现。资源完整包含基于Xilinx N4开发板的54条MIPS指令多周期CPU工程&…

2026/11/5 2:37:39

GPU算力租用平台怎么选:按显存、计费与任务形态匹配

“GPU算力租用平台推荐”这个题目,我在过去两年里被问过至少十几次,而且每次我给的答案都不一样——因为提问的人情况差得太远。有人是想拿一张卡跑个7B模型做LoRA微调,预算三百块;有人是要做多机多卡的大规模预训练,一…

2026/11/5 2:37:39

GPU算力租用平台推荐:显存、计费与环境配置避坑指南

GPU算力租用平台这件事,我最早接触是因为一个图像分割的小项目。当时手头只有一台轻薄本,跑个推理都要等半分钟,训练根本无从谈起。想着买卡吧,一张能用的训练卡加上配套电源、主板、散热,价格直接劝退;于是…

2026/11/5 2:32:38

学术数据分析利器:智能预处理与统计建模实战

1. 项目概述:当学术写作遇上智能分析去年帮一位博士生处理问卷数据时,我看着他面对上万条原始数据手足无措的样子,突然意识到:学术写作中最耗时的往往不是文字创作,而是前期数据清洗和分析。这正是"书匠策AI"…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑