人工智能中的许多任务并不是让机器只面对一批没有明确答案的数据而是先给它一批已经标注好目标结果的样本让它从这些样本中学习输入与输出之间的对应关系。等这种关系学到一定程度之后再把新的输入交给模型由模型给出预测结果。例如给模型一批房屋样本每套房屋都记录了面积、房间数量、地段、房龄等信息同时也给出了对应房价或者给模型一批邮件样本每封邮件都已经标明“正常邮件”或“垃圾邮件”。这时机器要做的不是凭空思考而是从这些“带答案的例子”中归纳规律再把规律应用到新样本上。这种学习方式就是监督学习Supervised Learning。监督学习是机器学习中最基础、最常见、也最容易落地的一类方法。无论是房价预测、考试成绩预测、手写数字识别还是商品分类、疾病辅助判断、文本情感分析其背后往往都可以归结为监督学习问题。一、从一个任务开始根据已知样本进行预测假设现在有这样一个问题我们收集了一批学生的数据每位学生都有如下信息• 平时作业平均分• 课堂测验平均分• 出勤率同时我们也知道这些学生最后的考试成绩。现在的问题是如果再来一位新学生我们只知道他的平时表现能否让机器预测他的期末成绩这类问题的核心特征是历史样本中已经给出了正确答案。也就是说机器不是自己去探索“什么有趣”而是在学习“输入和答案之间是什么关系”。例如可以把几位学生的数据简单写成import numpy as np X np.array([ [80, 78, 90], [85, 82, 95], [60, 65, 70], [90, 88, 98], [70, 72, 80]]) y np.array([81, 86, 66, 92, 73])这里可以这样理解• X 表示输入数据• y 表示对应的正确结果• X 中每一行是一个学生样本每一列是一个特征• y 中每个值是该学生对应的考试成绩这正是监督学习最基本的数据组织方式。从直观上看监督学习就像老师拿着一批“已经批改好的练习题”去教机器题目是什么答案是什么机器通过这些成对出现的样本逐步学会一种从题目到答案的映射关系。二、什么是监督学习监督学习这个名字里“监督”二字并不是说有人实时盯着机器操作而是说训练数据中带有明确的目标信息可以对机器的学习过程形成指导。图 1监督学习的基本思想更准确地说监督学习的基本结构是• 输入样本的特征表示通常记为 X• 输出样本对应的目标结果通常记为 y也常称为目标变量或标签机器的任务是根据大量已经配对好的 (X, y) 样本学习一种从输入到输出的映射函数。用数学形式可以写作也可以写成其中• x 表示某一个具体样本的输入• f 表示模型学习到的映射关系•ŷ表示模型给出的预测结果这里要特别注意监督学习真正依赖的不是“数据很多”这件事本身而是“数据中包含可用于学习的目标结果”这件事。例如• 如果我们知道房屋特征也知道真实房价那么可以做监督学习• 如果我们知道邮件内容也知道每封邮件是不是垃圾邮件那么可以做监督学习如果只有一堆数据却没有对应答案那么通常不属于监督学习而更接近无监督学习。因此监督学习的本质不是让机器自己随意摸索而是让它在已有答案的约束下学习一种预测规则。延伸阅读《ML规则驱动与数据驱动——两种问题求解思路》三、监督学习中的基本对象样本、特征与标签要真正理解监督学习必须先把其中最基础的三个概念分清楚样本、特征与标签。图 2样本、特征与标签1、样本样本Sample指的是一条独立的观测记录也就是一个具体对象在数据中的一次表示。例如• 在学生成绩预测问题中一位学生可以看作一个样本• 在房价预测问题中一套房屋可以看作一个样本• 在邮件分类问题中一封邮件可以看作一个样本• 在手写数字识别问题中一张手写数字图片可以看作一个样本样本是监督学习中最基本的观察单位。模型学习规律时并不是直接面对抽象的“学生”“房屋”或“邮件”而是面对一条条已经被整理成数据形式的样本记录。2、特征特征Feature是用于描述样本的信息。机器并不直接理解现实对象本身而是通过一组可计算的特征来认识它们。例如学生样本可以用以下特征表示• 作业平均分• 测验平均分• 出勤率• 课堂参与度• 学习时长房屋样本也可以用以下特征表示• 面积• 房间数• 房龄• 地段• 到市中心的距离因此特征本质上是样本在计算机中的可计算表示。特征设计得是否合理会直接影响模型能否学到有效规律。3、标签标签Label是样本对应的目标结果也就是监督学习中“标准答案”的角色。例如• 在房价预测中标签可能是具体价格• 在成绩预测中标签可能是期末分数• 在邮件分类中标签可能是“垃圾邮件”或“正常邮件”• 在数字识别中标签可能是 0 到 9 之间的某个数字从结构上看• 特征决定了“输入是什么”• 标签决定了“希望预测什么”只有当样本同时具有特征和标签时监督学习才能建立起来。延伸阅读《Scikit-learn特征矩阵与目标变量》四、监督学习在学什么很多初学者容易把监督学习理解成“机器把数据背下来”。这种理解并不准确。监督学习真正要做的是从已有样本中学习一种输入与输出之间的映射关系。模型并不是去记住每个样本而是试图总结出一种可推广到新样本上的规律。图 3监督学习在学什么例如在学生成绩预测问题中模型可能逐步学会• 作业分数高期末成绩通常也偏高• 测验成绩能够反映阶段性学习效果• 出勤率较低时成绩可能受到影响多个特征共同作用最终决定预测结果。如果使用线性形式描述输入与输出的关系可以写成其中•x₁, x₂, …, xₙ表示各个输入特征•w₁, w₂, …, wₙ表示对应特征的权重• b 表示偏置项•ŷ表示模型预测结果这个公式并不是说所有监督学习都必须是线性的而是帮助我们建立一个最基础的理解模型会根据训练数据学习不同特征与目标结果之间的关系。在训练过程中模型会不断比较“预测结果”和“真实标签”之间的差异。这个差异通常由损失函数Loss Function刻画。模型训练的基本目标就是让这种差异尽可能小。对于回归任务常见的损失函数之一是均方误差Mean Squared ErrorMSE其中• n 表示样本数量•yᵢ表示第 i 个样本的真实值•ŷᵢ表示第 i 个样本的预测值•yᵢ − ŷᵢ表示预测误差更一般地说监督学习就是在寻找一个函数使它对已知样本的预测尽量接近真实标签并且对新样本也具有较好的预测能力。延伸阅读《ML机器学习的主要任务》五、监督学习的两大任务回归与分类虽然监督学习任务很多但从输出结果的性质来看最常见的可以分成两大类回归与分类。图 4回归与分类的区别1、回归预测连续数值如果标签是一个连续变化的数值那么这类监督学习任务通常称为“回归”Regression。例如• 预测房价• 预测商品销量• 预测考试成绩• 预测气温或能耗• 预测用户未来消费金额这些任务的共同点在于输出结果不是固定类别而是可以在某个数值范围内连续变化。例如预测学生成绩时输出可能是 81.5 分、86 分、73 分而不是“优”“良”“中”这类有限类别。回归任务的核心是建立特征与连续数值目标之间的关系。线性回归、多项式回归和岭回归分别代表了基础线性建模、非线性扩展和正则化控制三种常见思路。延伸阅读《ML线性回归的基本原理与实现》《ML多项式回归的基本原理与实现》《ML岭回归的基本原理与实现》2、分类预测离散类别如果标签属于有限个类别之一那么这类监督学习任务通常称为“分类”Classification。例如• 判断邮件是否为垃圾邮件• 判断图像中是猫还是狗• 判断一朵鸢尾花属于哪一种品种• 判断一条评论是正面还是负面• 判断用户是否会流失这些任务的共同点在于模型输出的不是连续数值而是某种类别标签。分类任务还可以继续分为二分类与多分类。二分类Binary Classification只有两个类别。例如• 垃圾邮件 / 正常邮件• 患病 / 未患病• 会流失 / 不会流失多分类Multiclass Classification有三个或更多类别。例如• 手写数字识别中的 0 到 9• 鸢尾花分类中的不同品种• 新闻文本分类中的不同主题逻辑回归虽然名字中带有“回归”但常用于二分类任务是理解分类模型的重要基础。延伸阅读《ML逻辑回归的基本原理与实现》3、回归与分类的根本区别回归与分类的根本区别不在于使用的数据量多少也不在于模型复杂不复杂而在于预测目标的性质不同。可以用一个简洁方式概括• 若目标 y 是连续数值通常属于回归• 若目标 y 是离散类别通常属于分类例如• “这套房大约值多少钱”是回归问题• “这封邮件是不是垃圾邮件”是分类问题• “这名学生期末成绩大约是多少分”是回归问题• “这名学生属于优秀、良好还是及格”是分类问题监督学习之所以常常先分为这两大类是因为它们在目标形式、评价指标和常用模型上都有明显区别。有些监督学习方法既可以用于分类也可以用于回归区别主要取决于目标变量 y 是离散类别还是连续数值。K 近邻、决策树、随机森林和支持向量机就是这类典型方法。延伸阅读《MLK 近邻KNN的基本原理与实现》《ML决策树的基本原理与实现》《ML随机森林的基本原理与实现》《ML支持向量机的基本原理与实现》六、机器是怎样学的训练、预测与评估监督学习通常不是“一步得到答案”而是由几个连续环节组成。图 5监督学习的训练、预测与评估流程1、训练训练Training就是把带标签的样本交给模型让模型根据这些样本学习内部参数。在这个阶段模型看到的是“有答案的数据”。例如对于学生成绩预测任务训练数据中既有学生的作业分、测验分、出勤率也有对应的期末成绩。模型要做的就是从这些数据中学习哪些特征与成绩之间存在关系。2、预测预测Prediction就是把新的、未见过的样本交给模型由模型给出结果。在这个阶段模型不能再依赖人工给出的标签而要用自己学到的规律进行判断。例如新来一位学生我们只知道他的作业分、测验分和出勤率并不知道他的期末成绩。模型需要根据已有经验给出一个预测分数。3、评估评估Evaluation是指把模型预测结果与真实结果进行比较从而判断模型表现如何。在回归任务中可以比较预测值与真实值相差多少。在分类任务中除了准确率还常用精确率、召回率、F1 值和混淆矩阵等指标尤其适合处理类别不平衡或错误代价不同的场景。延伸阅读《Scikit-learn从问题到模型——监督学习的最小闭环》七、泛化能力才是关键监督学习中一个很重要的问题是模型在训练数据上表现好是否就说明它真的学得好答案并不一定。因为模型可能只是把训练样本记得很熟但这种“熟悉”并不代表它面对新样本时仍然有效。机器学习真正关心的不是模型对旧数据记得多牢而是它对新数据是否仍能给出合理判断。这种能力通常称为“泛化能力”Generalization。为了检验这一点常见做法是把数据划分为• 训练集用于让模型学习• 测试集用于检验模型在未见样本上的表现也就是说• 模型在训练集上学习规律• 模型在测试集上接受检验只有当模型不仅在训练集上表现较好而且在测试集上也有较合理的结果时才更有可能说明它真正学到了一般规律而不是只是“记住了答案”。在更完整的建模流程中还可能进一步划分验证集用于模型选择、超参数调整和训练过程中的效果比较。与泛化能力密切相关的两个概念是欠拟合与过拟合。图 6泛化能力欠拟合、合适拟合与过拟合欠拟合Underfitting是指模型过于简单连训练数据中的基本规律也没有学好。过拟合Overfitting是指模型过于依赖训练数据中的细节导致面对新数据时表现变差。从监督学习的角度看泛化能力比单纯的训练准确率更重要因为现实中的预测任务面对的往往正是“未来的新样本”。延伸阅读《ML数据集、训练集与测试集》八、综合示例用监督学习完成一次学生成绩预测下面用一个简单示例把监督学习中的几个核心环节串起来。任务是根据学生的平时作业分、测验分和出勤率预测其期末成绩。图 7学习成绩预测中的监督学习闭环需要注意的是下面的数据量很小只适合教学演示。真实建模时通常需要更多样本、更严格的数据清洗、更合理的特征设计和更充分的评估。import numpy as np # 数值计算from sklearn.model_selection import train_test_split # 数据集划分from sklearn.linear_model import LinearRegression # 线性回归模型from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score # 评估指标 # 每一行表示一个学生样本[作业平均分, 测验平均分, 出勤率]X np.array([ [80, 78, 90], [85, 82, 95], [60, 65, 70], [90, 88, 98], [70, 72, 80], [88, 85, 96], [75, 74, 85], [92, 90, 99], [68, 70, 78], [95, 94, 100], [58, 62, 68], [82, 80, 92]]) # 期末成绩目标变量y np.array([81, 86, 66, 92, 73, 89, 76, 94, 71, 96, 63, 84]) # 划分训练集和测试集测试集占25%X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.25, random_state42) # 创建线性回归模型model LinearRegression() # 训练模型拟合训练数据model.fit(X_train, y_train) # 在测试集上预测y_pred model.predict(X_test) # 评价模型mae mean_absolute_error(y_test, y_pred) # 平均绝对误差rmse np.sqrt(mean_squared_error(y_test, y_pred)) # 均方根误差# 如果使用 Scikit-learn 1.4 及以上版本也可以直接使用 root_mean_squared_error()r2 r2_score(y_test, y_pred) # 决定系数 print(测试集真实值, y_test)print(测试集预测值, y_pred)print(平均绝对误差 MAE, mae)print(均方根误差 RMSE, rmse)print(决定系数 R², r2) # 对新学生进行预测作业86、测验84、出勤94new_student np.array([[86, 84, 94]])pred_score model.predict(new_student) print(新学生预测成绩, pred_score[0])这个例子中已经体现出监督学习的基本结构• 有输入特征 X• 有目标标签 y• 用训练集训练模型• 用测试集检验模型• 用评价指标衡量预测效果• 对新样本执行预测其中LinearRegression 会根据训练数据学习输入特征与期末成绩之间的线性关系predict() 方法则根据学到的关系对测试样本或新学生进行预测。在回归任务中常见评价指标包括• MAE平均绝对误差表示预测值与真实值平均相差多少• RMSE均方根误差对较大的预测错误更敏感• R²决定系数用来衡量模型对目标变量变化的解释程度由于本例中测试集样本很少R² 等指标只用于理解流程不宜作为模型性能的严肃判断依据。如果把这个例子换成“预测房价”总体流程仍然成立如果把它换成“判断邮件类型”任务类型会从回归变成分类但“准备数据、训练模型、预测结果、评估效果”的基本思路仍然相通。延伸阅读《人工智能通识课Scikit-learn 机器学习工具库》九、监督学习的意义与局限监督学习之所以应用广泛是因为很多现实任务本身就具有“历史数据 已知答案”的结构。只要样本积累到一定程度机器就有可能从中提取出有效规律。它的重要意义主要体现在以下几个方面• 能把经验判断转化为可计算模型• 能处理规模较大的预测与分类任务• 能在相似场景中重复使用• 能为许多实际人工智能系统提供基础能力• 能与数据预处理、特征工程、模型评估等方法结合成完整工作流但监督学习也并不是没有前提。它通常依赖以下条件• 需要较明确的标签数据• 样本质量会直接影响学习效果• 特征表示会影响模型能够学到什么• 模型学到的是数据中的统计规律不等于真正理解现实世界• 如果训练数据存在偏差模型结果也可能随之偏差• 如果应用场景发生变化原来训练好的模型可能不再可靠因此监督学习虽然强大但它并不是“万能判断器”而是一种建立在数据表示、标签质量、模型假设和评估机制之上的方法。学习监督学习时最重要的不是死记某个算法名称而是理解它背后的基本问题• 输入是什么• 标签是什么• 模型要预测什么• 用什么数据训练• 用什么数据评估• 评价指标是否符合任务目标• 模型能否推广到新样本能够回答这些问题才算真正进入了监督学习的基本思维方式。 小结监督学习是在带标签样本上学习输入与输出关系的方法。它以样本、特征、标签为基础主要包括回归与分类两类任务并通过训练、预测、评估和泛化检验形成完整流程。理解监督学习是进入机器学习应用世界的重要起点。“点赞有美意赞赏是鼓励”