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 课程第 1 周机器学习技巧Techniques of Machine Learning一课展开。机器学习模型的构建、使用与维护与大多数开发工作流截然不同本指南将原文档的七步工作流程、特征与目标变量划分、数据集切分、过拟合与欠拟合等核心概念逐一拆解并结合仓库中的实战 Notebook 代码训练/测试切分、model.fit、Flask 推理服务补充源码级佐证。读完后你将掌握一条从提出可预测的问题到上线推理的完整可复现路径。为什么 ML 工作流不同于普通开发传统开发是人写规则、程序执行规则而机器学习是人准备数据、算法从数据中归纳规则。这意味着工作流的重心从编写逻辑转移到了选对问题、备对数据、选对训练方法、量化模型质量、持续调参。本课对应课程侧边栏中的 Techniques of ML的目标就是把这条流程去神秘化让你理解支撑机器学习的几个高层过程以及模型models预测predictions训练数据training data等基础概念。总览创建机器学习流程的七个步骤原文档将创建 ML 流程craft of creating ML processes概括为如下七步这也是后文各节的组织线索确定问题Decide on the question。大多数 ML 流程始于提出一个无法用简单条件程序或基于规则的引擎回答的问题。这类问题通常围绕基于一组数据做预测展开。收集与准备数据Collect and prepare data。要回答问题就需要数据数据的质量有时也包括数量决定了你回答初始问题的上限。数据可视化是这一阶段的重要组成本阶段还包括把数据切分为训练集与测试集。选择训练方法Choose a training method。根据问题与数据特性决定如何训练模型才能最好地反映数据并做出准确预测。这是 ML 流程中最需要专门经验、也往往需要大量实验的环节。训练模型Train the model。使用训练数据借助各种算法让模型识别数据中的模式。模型可能利用内部权重internal weights通过调整权重让某些数据部分比另一些更重要从而构建更好的模型。评估模型Evaluate the model。使用从未见过的数据测试数据检验模型表现。参数调优Parameter tuning。根据模型表现换用不同的参数控制训练算法行为的变量重跑流程。预测Predict。用全新输入检验模型精度。该问什么问题规则引擎失效的地方计算机特别擅长发现数据中的隐藏模式。这一能力对研究者价值很大——当某个领域的问题无法通过搭建条件式规则引擎轻松回答时ML 就登场了。原文档给出的两个典型例子精算保险场景数据科学家也许能手工构造吸烟者 vs 非吸烟者的死亡率规则但当更多变量进入公式后基于既往健康史预测未来死亡率的 ML 模型可能比人工规则更高效。气象预测场景为某地预测 4 月天气输入可包括纬度、经度、气候变化、距海远近、急流模式等。变量多到无法穷举人工规则时模型学模式比人写规则更实际。从这两个例子可以提炼出一条选问题准则可预测、有历史数据、且变量关系复杂到规则引擎难以维护才值得动用 ML。建模前的任务在动手建模之前需要先完成若干任务来验证问题、并基于模型预测形成假设。原文档列出了四类必须识别并配置好的要素数据、特征与目标、特征变量选择、数据可视化以及数据集切分。数据收集与准备要带着某种确定性回答问题需要足够多且类型正确的数据。这一步包含两个动作收集数据Collect data。课程前一课专门讲了数据分析中的公平性见 ML and Fairness收集数据时要牢记该课内容留意数据来源、数据中可能存在的固有偏见并记录其出处provenance。准备数据Prepare data。数据准备包含若干典型动作若数据来自多个不同来源可能需要汇总collate并做归一化normalize通过多种手段提升数据质量与数量例如把字符串转换为数值——聚类的可视化一课中正是这么做的基于原始数据派生新数据——分类入门课中演示了这种方法清理与编辑数据——在 Web App 课之前会做一次这样的预处理最后视训练方法而定还可能需要对数据随机化并打乱shuffle。原文档还特别提醒收集并处理完数据后花一点时间检查数据的形状结构、分布、字段是否真的支撑你要回答的问题——数据本身可能就不适合你的任务这一点在聚类课中会被再次验证。特征与目标X 和 y这是本课最核心的概念划分特征feature数据中可度量的属性。在很多数据集里特征就是某个列名如date、size、color。特征变量在代码中通常记为X是用于训练模型的输入变量。目标target你想要预测的东西代码中通常记为y。它对应你向数据提出的问题本身。原文档举了两个问题句式12 月时什么颜色的南瓜最便宜——目标是颜色在旧金山哪些街区的房产价格最好——目标是价格。目标有时也被称为标签属性label attribute。仓库中的回归 Notebook 正是这一约定的落地。以线性回归示例 Notebook为例南瓜价格数据集被切分后X是特征矩阵、y是价格标签随后直接喂给模型from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state0) lin_reg.fit(X_train, y_train) # 训练发送 X特征与 y目标 pred lin_reg.predict(X_test) # 在测试集上评估其中random_state0固定随机种子保证切分结果可复现——这正是参数控制算法行为在切分环节的体现。特征选择与特征提取两件事不是一件事 构建模型时如何知道该选哪些变量你通常会经历**特征选择feature selection或特征提取feature extraction**流程为模型挑出表现最佳的变量组合。原文档引用了二者定义上的关键区别Feature extraction creates new features from functions of the original features, whereas feature selection returns a subset of the features.特征提取从原始特征的函数中创建新特征而特征选择返回特征的子集。仓库源码里能观察到这两类操作的不同形态线性回归 Notebook中使用make_pipeline(PolynomialFeatures(2), LinearRegression())构建流水线——PolynomialFeatures(2)从原始特征生成交互与平方项属于提取式做法从原始特征构造新特征而只从已有列中挑列、丢弃无关列则属于选择式做法。可视化你的数据数据科学家工具箱中重要的一环是用 Seaborn、MatPlotLib 等库把数据画出来。可视化可能帮你发现可以加以利用的隐藏相关性发现偏见或数据不平衡——这一点在分类器第一课中会被具体演示类别样本量不均会直接影响评估指标的可信度。切分数据集训练 / 测试 / 验证训练之前需要把数据集切分为两个或多个大小不等、但都能良好代表数据的部分训练集Training用于拟合fit模型的那部分数据通常构成原始数据集的多数。测试集Testing独立的一组数据常从原始数据中划出用于确认已构建模型的性能。评估时模型不能见过它。验证集Validating更小的一组独立样本用于调优模型的超参数或架构以提升模型。视数据规模与问题而定这个第三集合有时可以省略时间序列预测入门一文中提到时序场景对切分方式另有讲究。仓库里两种切分比例都出现过工具课 Notebook使用test_size0.33约三分之一的留出比例而线性回归与逻辑回归示例统一使用test_size0.2, random_state0。这说明留出 20%–33% 做测试都是课程认可的常规做法具体比例可按数据规模调整。构建模型使用训练数据你的目标是用各种算法对一个模型或称数据的统计表示进行训练train。训练让模型接触数据允许它对所感知的模式做出假设、验证然后接受或拒绝这些假设。决定训练方法根据你的问题与数据特性选择训练方法。课程使用 Scikit-learn从其用户指南可以探索多种训练方式。有经验者也可能需要尝试多种方法才能建出最好的模型——典型的迭代过程是用未见过的数据喂给模型检查准确率、偏见以及其他降低质量的问题然后选定最适合当前任务的训练方法。从源码结构看同一份切分数据在线性回归 Notebook中被先后用于朴素LinearRegression()与make_pipeline(PolynomialFeatures(2), LinearRegression())两条训练路径正是尝试多种方法并对比的实操样例from sklearn.pipeline import make_pipeline from sklearn.preprocessing import PolynomialFeatures pipeline make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train, y_train) pred pipeline.predict(X_test)训练模型model.fit拿到训练数据后就可以fit拟合出模型。原文档指出在多数 ML 库中你都会看到model.fit这个调用——正是在这一步你发送特征变量通常是X一个值数组和目标变量通常是y。上文线性回归示例中的lin_reg.fit(X_train, y_train)就是这个动作的直接实例。评估模型以及拟合度的两个陷阱训练完成后训练大模型可能需要很多轮迭代即epoch轮数你可以用测试数据衡量模型质量——测试数据是模型此前从未分析过的原始数据子集可以打印一张模型质量指标表。 原文档在此给出了两个关键概念模型拟合Model fitting在 ML 语境下指模型底层函数在尝试分析其不熟悉的数据时的准确性。欠拟合Underfitting与过拟合Overfitting这是两种常见的模型质量问题——模型要么拟合得不够好要么拟合得过头过拟合模型预测训练数据好得反常因为它把数据的细节乃至噪声都学进去了。欠拟合模型不准确既无法准确分析训练数据也无法分析它尚未见过的数据。课程为这一节配了一张对比信息图上方文章头图来源为 Jen Looper 的信息图原图见 overfitting.png对同一组数据低阶函数欠拟合、适度函数拟合良好、高阶函数则记住噪声而过拟合。判断落在哪一档靠的就是测试集上的指标与可视化对比。参数调优超参数初始训练完成后观察模型质量并考虑通过调整**超参数hyperparameters**来改进。超参数是训练前设定、控制算法行为的旋钮如正则化强度、多项式阶数、树的深度等与模型自己从数据中学到的内部权重不同。仓库的流水线示例提供了一个最小例PolynomialFeatures(2)中的2就是一个超参数把它调成 3 或 4 会直接改变模型的复杂度与测试集表现——调参过程就是围绕这类旋钮反复实验的过程。预测把模型送进应用场景这是用完全全新的数据检验模型精度的时刻。在应用型 ML 场景为生产环境构建 Web 资产中预测流程通常包括收集用户输入例如一次按钮点击→ 将其设为变量 → 发送给模型进行推理inference或评估。仓库中 Web App 示例的 Flask 服务 把这条链完整实现了服务启动时加载训练好的 pickle 模型/predict路由从表单取值、转成数值数组调用model.predict得到国家预测结果app.route(/predict, methods[POST]) def predict(): int_features [int(x) for x in request.form.values()] final_features [np.array(int_features)] prediction model.predict(final_features) output prediction[0] countries [Australia, Canada, Germany, UK, US] return render_template(index.html, prediction_textLikely country: {}.format(countries[output]))对照七步流程可以看到用户点击预测按钮收集输入→ 组装特征数组X的运行时形态→model.predict完成推理。这正是原文档所说的在应用环境中把变量发送给模型做评估的最小闭环配套的 UFO 数据集与模型工件见 ufo-model.pkl。挑战与练习原文档为本课布置的实践任务 挑战画一张流程图反映 ML 从业者的完整步骤。你在流程中处于哪一步预计哪里会困难哪些部分对你来说看起来简单课后测验课程配套的课前/课后测验Pre/Post-lecture quiz可在课程站点完成。作业采访一位数据科学家——在公司、用户社群或同学中找一位以数据科学家为职业的人写一篇约 500 词的文章描述其日常任务他是领域专精型还是全栈Full Stack型小结本课把 ML 工作流压缩为可操作的清单提出规则引擎答不了的问题 → 谨慎收集与准备数据 → 明确 X/y → 选择并可视化特征 → 切分训练/测试/验证集 → 用model.fit训练 → 用测试集评估并警惕过拟合/欠拟合 → 调超参数 → 用新数据预测。仓库中后续的回归、分类、聚类、Web 应用与时间序列课程都会在这张清单的某几步上展开实战理解本节的七步框架是读懂这些实战代码的前提。【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考