行业资讯
📅 2026/9/6 19:10:20
ML-For-Beginners 回归实战指南:用 Scikit-learn 对 Linnerud 数据集做单变量回归并绘图
ML-For-Beginners 回归实战指南用 Scikit-learn 对 Linnerud 数据集做单变量回归并绘图【免费下载链接】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 课程「回归Regression」模块第 1 课的工具类作业 assignment.md 展开以 Scikit-learn 内置的 Linnerud 数据集为对象完整演示如何创建回归模型并绘制腰围 vs 仰卧起坐次数等特征与生理指标之间的关系图。读完后你可以独立复现课程作业的全部技术步骤掌握数据集加载、训练/测试集划分、线性回归拟合、预测与可视化的标准工作流并能将该流程推广到数据集中的所有特征-目标组合。作业原文与考核标准在动手之前先完整理解作业要求。该作业位于 2-Regression/1-Tools/assignment.md标题为 Regression with Scikit-learn原文要求如下查看 Scikit-learn 中的 Linnerud 数据集。该数据集包含多个 target目标变量It consists of three exercise (data) and three physiological (target) variables collected from twenty middle-aged men in a fitness club它由 20 名健身俱乐部中年男性的 3 个运动类数据变量和 3 个生理类目标变量组成。用你自己的语言描述如何创建一个回归模型绘制腰围waistline与完成的仰卧起坐数量situps之间的关系。对该数据集中的其他数据点做同样的事情。作业的评分标准Rubric原文为CriteriaExemplary优秀Adequate合格Needs Improvement待改进Submit a descriptive paragraph提交一段描述Well-written paragraph is submitted提交了撰写良好的段落A few sentences are submitted只提交了几句话No description is supplied未提供描述由此可见作业考核的核心产出是一段你自己撰写的描述性文字说明如何为每一组运动量-生理指标关系建立回归模型并绘图。下面从数据、代码两个层面把这段话写出来、跑出来。课程背景本作业在回归模块中的位置该作业是 2-Regression/1-Tools/README.md 所授工具与上手一课的课后练习。这一课的目标是配置本地机器学习开发环境Python、虚拟环境、Visual Studio Code使用 Jupyter Notebook.ipynb文件进行交互式建模安装并上手 Scikit-learn通过动手练习完成第一个线性回归实验课程以内置 diabetes 数据集为例完成了 BMI 与疾病进展指标的回归绘图。课程提供的练习骨架是 2-Regression/1-Tools/notebook.ipynb空白笔记本参考答案见 solution/notebook.ipynb。本作业则把同样的工作流迁移到另一个更小的内置数据集 Linnerud 上——样本更少、目标变量有多个因此对多目标回归的表述要求更高。上图是课程主实验diabetes 数据集BMI 对疾病进展的运行结果截图出自 README 中 your first Scikit-learn notebook 练习黑色散点为测试集数据蓝色粗线为LinearRegression模型对测试集输入的预测值连线。Linnerud 作业的绘图逻辑与此完全一致只是数据换成 20 名受试者的运动与生理指标。Linnerud 数据集结构与 Scikit-learn 加载方式Scikit-learn 提供sklearn.datasets.load_linnerud()加载该数据集。根据作业引用与 Scikit-learn 官方文档的说明其结构为样本量20 个样本20 名健身俱乐部的中年男性特征data3 列3 个运动类变量——仰卧起坐次数situps、纵跳/跳跃jumps、折返跑quests目标target3 列3 个生理类变量——腰围waist英寸、脉搏pulses次/分钟、胆固醇cholesterolmg/dl。加载代码import matplotlib.pyplot as plt from sklearn import datasets, linear_model, model_selection linnerud datasets.load_linnerud() X linnerud.data # 形状 (20, 3)situps, quests, jumps y linnerud.target # 形状 (20, 3)waist, pulses, cholesterol print(X.shape) # (20, 3) print(y.shape) # (20, 3)与课程主实验中load_diabetes(return_X_yTrue)返回二维数值矩阵不同Linnerud 的target本身就是一组并列的 3 个回归目标。这正是作业要求描述如何对每一个数据点组合建模的原因你需要为 3 个运动特征 × 3 个生理目标组成的多组关系分别建立单变量回归模型。核心实操绘制腰围 vs 仰卧起坐的回归关系下面按照课程 solution 笔记本 中演示的标准五步加载 → 拆分 → 拟合 → 预测 → 绘图实现作业要求的主图。1. 选出腰围与仰卧起坐两列腰围是 target 的第 0 列仰卧起坐是 data 的第 0 列。注意 Scikit-learn 的回归器要求输入 X 为二维数组因此需要用reshape(-1, 1)把一维向量还原为列向量课程 README 中对 diabetes 数据集选取第 3 列时使用了同样的技巧X X[:, 2]加X.reshape((-1,1))X_situps linnerud.data[:, 0].reshape(-1, 1) # (20, 1) y_waist linnerud.target[:, 0] # (20,)2. 划分训练集与测试集沿用课程中的model_selection.train_test_split参考 solution 笔记本中的调用train_test_split(X, y, test_size0.33)X_train, X_test, y_train, y_test model_selection.train_test_split( X_situps, y_waist, test_size0.33)从源码用法看test_size0.33表示约三分之一样本划入测试集。Linnerud 只有 20 个样本划出 33% 后测试集约 7 个样本、训练集约 13 个样本——样本极少这直接决定了该模型只能用于教学演示层面的关系观察而非严谨的统计推断这一点建议在作业描述中如实写出。3. 拟合线性回归模型model linear_model.LinearRegression() model.fit(X_train, y_train)model.fit()是 Scikit-learn以及 TensorFlow 等库通用的训练入口solution 笔记本中执行该调用后返回的估计器表示即为LinearRegression()。4. 对测试集做预测y_pred model.predict(X_test)5. 散点 预测线绘图完全复用课程 diabetes 实验的绘图模式plt.scatter(X_test, y_test, colorblack) plt.plot(X_test, y_pred, colorblue, linewidth3) plt.xlabel(Sit-ups (number)) plt.ylabel(Waist (inches)) plt.title(Linnerud: Waist vs. Sit-ups) plt.show()黑色散点是测试集真实数据蓝色直线是模型对同一批 X 的预测值连成的拟合线。作业要求你用自己的语言解释这张图例如直线穿过了散点云给定一个新样本的仰卧起坐次数把它的横坐标代入这条直线就能读出模型预测的腰围数值。推广到其余数据点覆盖全部 3 × 3 组合作业的后半句是对该数据集中的其他数据点做同样的事情即还要覆盖 quests、jumps 与 pulses、cholesterol 等组合。可以用双重循环把上述流程推广到全部组合feature_names [situps, quests, jumps] target_names [waist, pulses, cholesterol] for fi, fname in enumerate(feature_names): for ti, tname in enumerate(target_names): X_f linnerud.data[:, fi].reshape(-1, 1) y_t linnerud.target[:, ti] X_train, X_test, y_train, y_test model_selection.train_test_split( X_f, y_t, test_size0.33) model linear_model.LinearRegression() model.fit(X_train, y_train) y_pred model.predict(X_test) plt.figure() plt.scatter(X_test, y_test, colorblack) plt.plot(X_test, y_pred, colorblue, linewidth3) plt.xlabel(fname) plt.ylabel(tname) plt.title(fLinnerud: {tname} vs. {fname}) plt.show()对每一组作业描述段落中应说明三件事选列方式data[:, i]取第 i 个运动特征、target[:, j]取第 j 个生理目标并用reshape(-1, 1)保证二维输入建模流程train_test_splittest_size0.33→LinearRegression().fit(X_train, y_train)→predict(X_test)→plt.scatterplt.plot结果解读直线斜率方向正相关/负相关反映该运动量与生理指标的直观关系但 20 个样本、约 7 个测试点意味着拟合线对单点波动敏感结论只宜作定性观察。如果你愿意多走一步LinearRegression拟合后还可以读取model.coef_与model.intercept_属性把每组关系的斜率与截距写进描述段落让用自己的语言描述有具体数字支撑注意不要在作业中虚构未运行的数值以实际运行为准。环境要求与运行前提需要 Python 3并已安装 Scikit-learn、matplotlib课程 README 建议在虚拟环境中安装M1 Mac 有专门的安装说明指引作业在本课程文件夹的 notebook.ipynb 中完成用 Visual Studio Code 打开后 Jupyter 内核会自动启动代码块点播放图标即可执行md图标可添加 markdown 说明课程同时提供 R 语言的对照版本见 solution/R/lesson_1.html可作为跨语言对照阅读。自检清单提交作业前的核对是否用一句话说明了 Linnerud 数据集的来源与结构20 名中年男性、3 运动特征、3 生理目标是否完整给出选列 → 拆分test_size0.33→fit→predict→ 散点直线绘图的代码流程并至少展示了 waist vs situps 一张图是否用循环或分步说明覆盖了其余特征-目标组合而不是只画了一张图描述段落是否达到 Rubric 中 Exemplary 档一段撰写良好的完整描述而非零散几句话并如实注明小样本下的解释边界对照课程 diabetes 实验 与 solution 笔记本 确认fit、predict、train_test_split的调用方式与课程一致。完成以上步骤即同时满足了作业的两层要求可运行的回归建模代码以及一段能讲清如何为 Linnerud 数据集每一组关系创建回归模型并绘图的描述性文字。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考