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 部分第 4 课(translations/de/1-Introduction/4-techniques-of-ML/README.md)的技术解读,将为你拆解机器学习背后的完整流程:如何提出一个机器能回答的问题、如何收集与准备数据、如何选择并训练模型、如何评估与调优,最终用新数据做出预测。学完本篇,你将系统掌握数据科学家的"全套手势",为后续的回归、分类、聚类、时间序列与强化学习实战打下方法论基础。
上图对比了"正确模型"(左)与"过拟合模型"(右):右侧的复杂曲线过于紧密地贴合训练数据点,捕捉了数据中的噪声而非真实规律,导致泛化能力下降。
机器学习流程的七个步骤
从高层视角看,创建机器学习流程这门"手艺"由一系列明确的步骤组成:
- 确定问题(Decide on the question):大多数 ML 流程始于一个无法由简单条件程序或基于规则的引擎回答的问题。这类问题往往围绕"基于一组数据做出预测"展开。
- 收集并准备数据(Collect and prepare data):要回答问题必须有数据。数据的质量(有时还有数量)决定了你能多好地回答最初的问题。数据可视化是这一阶段的重要环节;同时还要把数据划分为训练组与测试组,用于构建模型。
- 选择训练方法(Choose a training method):根据问题与数据性质,决定如何训练模型,使其最好地反映数据并做出准确预测。这部分需要特定领域的专业知识,往往还需要大量的实验。
- 训练模型(Train the model):使用训练数据,通过多种算法训练模型以识别数据中的模式。模型内部可能包含可调整的权重,用于对不同部分的数据赋予不同优先级,从而构建更好的模型。
- 评估模型(Evaluate the model):使用收集到的数据集中"从未见过"的数据(测试数据)来检验模型的表现。
- 参数调优(Parameter tuning):基于模型表现,重复流程并更换不同的参数或变量,以控制训练所用算法的行为。
- 预测(Predict):使用全新输入来测试模型的准确性。
这七步构成了一个可迭代的闭环:调优后往往需要重新训练与重新评估,直到模型满足需求。
提出什么样的问题
计算机特别擅长在数据中发现隐藏的模式。这种能力对研究人员极有价值——他们提出的领域问题很难靠编写条件规则引擎来回答。
例如,面对精算任务,数据科学家也许能手工构造"吸烟者 vs 非吸烟者死亡率"的规则;但一旦引入大量其他变量,一个 ML 模型可能更能基于既往健康史高效预测未来死亡率。更轻松的例子是:基于纬度、经度、气候变化、距海洋远近、急流模式等数据,预测某地四月的天气。
✅ 关键在于:当变量众多、模式复杂、规则难以手工枚举时,机器学习模型比条件规则系统更适用。ML-For-Beginners 课程从回归到强化学习的每一个主题,都是在为这类问题寻找答案。
建模前的准备任务
在开始构建模型之前,必须完成若干准备工作:为了检验问题并基于模型预测形成假设,你需要识别并配置多个要素。
数据(Data)
要以一定把握回答你的问题,你需要足够数量、类型正确的数据。此时有两件事要做:
- 收集数据(Collect data):牢记前一课关于数据公平性的讨论,谨慎地收集数据。要意识到数据的来源、可能固有的偏差,并记录其出处。
- 准备数据(Prepare data):数据准备包含多个步骤。若数据来自不同来源,可能需要汇总并归一化;还可以通过多种手段提升数据的质量与数量,例如:
- 将字符串转换为数值(正如聚类课中所做);
- 基于原始数据生成新数据(正如分类课中所做);
- 清洗与编辑数据(正如 Web App 一课之前所做);
- 视训练方法需要,对数据做随机化与混洗(shuffle)。
✅ 收集并处理完数据后,花点时间检查:数据的"形状"是否允许你解决预期的问题?正如聚类课中所发现的,数据很可能并不适合你给定的任务——尽早发现这一点能节省大量时间。
特征与目标(Features and Target)
- 特征(Feature):特征是数据的可测量属性,在许多数据集中表现为列标题,如"日期""大小"或"颜色"。特征变量在代码中通常写作
X,代表用于训练模型的输入变量。 - 目标(Target):目标是你试图预测的东西,在代码中通常写作
y,代表你向数据提出问题的答案。例如:十二月哪种颜色的南瓜最便宜?旧金山哪个街区的房地产价格最好?目标有时也被称为标签属性(label attribute)。
这一X/y约定在课程的所有代码中贯穿始终。例如在回归-工具课中,南瓜价格预测就以特征矩阵X与目标向量y的形态进入后续的训练流程。
选择特征变量:特征选择与特征提取
构建模型时如何决定选用哪个变量?你很可能要经历**特征选择(feature selection)或特征提取(feature extraction)**的过程,为性能最优的模型挑选合适的变量。二者并不相同:
"特征提取是从原始特征的函数中创建新特征,而特征选择是返回特征的子集。"
在课程实践中,这一理念体现在多处:分类课的分类器实战中利用ingredient_indexes.csv将数百种食材特征压缩为索引;聚类课的 K-Means 实验则对特征矩阵做标准化后直接建模。选择正确的特征集合,往往比选择算法本身更能决定模型上限。
可视化数据
数据科学家工具箱中一个重要的能力,是使用 Seaborn 或 MatPlotLib 等优秀库可视化数据。视觉化呈现数据能帮你发现可加以利用的隐藏相关性,也能帮助你发现偏差或不均衡数据——正如分类课中所发现的那样。
例如在聚类可视化课中,课程先用散点图、小提琴图等探索尼日利亚歌曲数据集的分布,再决定聚类方案;在回归-数据课中,则通过箱线图、热力图与散点图直观发现价格与品种、日期的关系。可视化的目的不是"画得好看",而是引导后续的特征工程与模型选择。
划分数据集
训练之前,需要把数据集划分为两个或多个大小不等但仍能良好代表整体数据的部分:
- 训练集(Training):这部分数据用于拟合(fit)模型以训练它,构成原始数据集的主体部分。
- 测试集(Testing):一组独立的数据,通常从原始数据中抽取,用于确认已构建模型的性能。模型在训练阶段从未"见过"这些数据。
- 验证集(Validation):更小的一组独立样本,用于调节模型的超参数或架构以改进模型。根据数据规模与所提问题,你可能不需要构建这第三组数据——正如时间序列预测课中所指出的。
在课程代码中,划分操作的标准写法如下(见回归-工具课示例笔记本):
import sklearn.model_selection as model_selection X_train, X_test, y_train, y_test = model_selection.train_test_split( X, y, test_size=0.33 )其中test_size=0.33表示把 33% 的数据留给测试。不同课程采用不同比例与随机种子,例如线性回归课使用test_size=0.2, random_state=0,random_state固定随机划分以便复现实验结果。
构建模型(Building a model)
利用训练数据,你的目标是通过各种算法训练出一个模型,即数据的统计表示。训练过程让模型暴露在数据中,使其对发现的模式做出假设,并验证、接受或拒绝这些假设。
选择训练方法
根据问题与数据性质,你会选择一种训练方法。翻阅课程使用的 Scikit-learn 文档,可以探索许多训练模型的方式。根据经验,你可能需要尝试若干种不同方法才能构建最佳模型。数据科学家通常会经历这样一个过程:用未见过的数据喂给模型,检查准确率、偏差及其他降低质量的问题,然后为手头任务挑选最合适的训练方法。
以课程分类课 3:分类器实战为例,同一份菜品数据集上先后对比了 Linear SVC、KNN、SVC 等多个分类器:
C = 10 classifiers = { 'Linear SVC': SVC(kernel='linear', C=C, probability=True, random_state=0), 'KNN classifier': KNeighborsClassifier(C), 'SVC': SVC(), }得到的结果(准确率)依次为 Linear SVC 78.6%、KNN 73.8%、SVC 83.2%——这就是"为任务挑选最合适方法"的实证过程:不同算法在同一数据上表现差异明显,需要逐个试验并比较。
训练模型:model.fit
有了训练数据,就可以"拟合"它来创建模型。你会发现许多 ML 库中都有model.fit这行代码——此时你把特征变量作为值数组(通常是X)与目标变量(通常是y)传入。
在回归-工具课示例笔记本中,线性回归模型的训练只有三行:
from sklearn import linear_model model = linear_model.LinearRegression() model.fit(X_train, y_train)在逻辑回归课示例中则是分类版本:
model.fit(X_train, y_train)fit是 scikit-learn 估算器(estimator)的统一接口:传入训练数据后,模型内部调整权重(或系数)以最小化预测误差。所有课程的分类器循环代码(见分类器实战课)也都是classifier.fit(X_train, y_train)加predict的标准模式。
评估模型
训练过程完成后(训练大型模型可能需要许多迭代,即"epochs"),你需要用测试数据评估模型质量。这些数据是原始数据中模型此前未分析过的子集,你可以打印出一张关于模型质量的指标表。
在课程中,评估通常配合classification_report与accuracy_score输出精确率(precision)、召回率(recall)、F1 值等指标(见分类器实战课),回归任务则使用 R²、MAE 等指标。评估的意义在于回答两个问题:模型在未见数据上泛化得如何?是否存在偏差或数据不均衡导致的质量问题?
模型拟合:欠拟合与过拟合
模型拟合(model fitting):在机器学习语境下,指模型底层函数在分析不熟悉的数据时逼近真实规律的准确程度。
**欠拟合(Underfitting)与过拟合(Overfitting)**是损害模型质量的常见问题——模型要么拟合得不够好,要么拟合得过头,导致预测与训练数据"过分贴合"或"过分松散":
- 过拟合模型对训练数据预测得过于准确,因为它把数据中的细节和噪声也一并学到了。它的复杂曲线"缠绕"在每个训练点上(见文首插图右侧),在新数据上表现很差。
- 欠拟合模型不准确,因为它既无法准确分析训练数据,也无法分析尚未"见过"的新数据。
实践中应对策略包括:增加训练数据量、简化模型复杂度、引入正则化(如 SVC 中的C参数控制正则化强度,见分类器实战课)、以及使用交叉验证。
参数调优(Parameter tuning)
首次训练完成后,观察模型质量,并考虑通过调整其**超参数(hyperparameters)**来改进模型。超参数是训练前设定、控制算法行为的外部配置,与训练中自动学习的内部权重不同。
课程中随处可见超参数的身影:SVC(kernel='linear', C=C, probability=True, random_state=0)中的kernel(核函数)、C(正则化系数,调节参数的影响力)、probability(是否输出概率估计)、random_state(随机种子),以及test_size(划分比例)。调参的通用流程是:设定一组候选值 → 重新训练 → 重新评估 → 比较指标,循环往复。
调优既可以是手工的(逐个修改参数重跑),也可以借助网格搜索等系统化手段。核心原则是:调优必须基于验证集或测试集的表现,而不是训练集表现,否则容易滑向过拟合。
预测(Prediction)
这是用全新数据测试模型准确性的时刻。在"应用型" ML 场景中——比如构建 Web 资产把模型用于生产——这个过程可能涉及收集用户输入(例如一次按钮点击)来设置变量,并将其发送给模型做推理(inference)或评估。
课程对此提供了完整范例:Web App 一课把训练好的南瓜价格模型序列化(.pkl文件)后接入 Flask Web 应用,用户填写表单、点击按钮,输入被转换为特征向量X,调用model.predict()返回价格预测。这正是"全栈" ML 工程师的工作方式:从数据、建模到产品化的完整闭环。
动手挑战与延伸学习
- 挑战(Challenge):画一张流程图,反映 ML 实践者的工作步骤。你现在处于流程的哪个位置?预计会在哪里遇到困难?哪些部分看起来容易?(可对照本文开头的七步流程绘制)
- 课后作业(Assignment):采访一位数据科学家——在你的公司、用户组或朋友/同学中,找一位职业数据科学家聊聊,写一篇约 500 字的短文描述他们的日常工作:他们是专精某一领域的专家,还是"全栈"式工作?评估标准包括文章长度合规、注明来源并以
.doc文件呈现。
小结
机器学习的完整流程并非一次性直线,而是一个"提问 → 数据 → 建模 → 评估 → 调优 → 预测"的可迭代循环。本篇所讲的七个步骤,将在 ML-For-Beginners 课程的每一个主题中反复出现:回归课教你用LinearRegression拟合南瓜价格,分类课让你用多种分类器对比菜品识别,聚类课带你在无标签数据中发现群体,时间序列课提醒你何时不需要验证集,而 Web App 课则把模型推向生产。掌握这套方法论,你就掌握了数据科学家的核心手势,为成为"全栈" ML 工程师铺平道路。
【免费下载链接】ML-For-Beginners12 weeks, 26 lessons, 52 quizzes, classic Machine Learning for all项目地址: https://gitcode.com/GitHub_Trending/ml/ML-For-Beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考