跳转至主要内容

Python编程

一文讲解监督机器学习

Sprite
发表于 2023年10月9日

监督学习是机器学习的一个子领域,通过监督学习从标记数据中构建模型,以便预测未知数据的结果,标记数据集由一组已被“标记”或带有正确输出的示例组成。

例如,我们可以使用监督学习通过学习大量被标记为垃圾邮件或非垃圾邮件(正常邮件)的电子邮件来构建垃圾邮件过滤器。结果的过滤器将比通过手动定义检查电子邮件中不同模式的if-then规则构建的垃圾邮件过滤器更有效和更健壮(这些规则随着时间的推移而变得过时,因为新的垃圾邮件策略不断演变)。

基于监督机器学习的应用涉及我们生活的几乎所有方面,包括:

  • 欺诈检测系统保护银行免受恶意攻击者的侵害。

  • 医学诊断系统可以比皮肤科医生更好地诊断皮肤癌。

  • 语音识别系统可以比人类更准确和更快地将语音翻译为文本。

  • 广告系统学习将正确的广告与正确的上下文匹配。

本文正式定义了监督机器学习问题,描述了构建监督学习模型所涉及的主要步骤,并介绍了监督学习中使用的主要算法和数据集。

定义

在监督机器学习问题中,我们获得一个包含n个标记样本(也称为示例、实例、观察或数据点)的数据集。每个样本是一个对,包含一个包含该样本的特征(或属性)的向量x和其标签(或目标输出)y

基于给定的数据集,我们构建一个模型,学习将每个特征向量映射到其正确的标签:

如果我们用m表示数据集中的特征数,则x是一个m维向量(除非另有说明,我们假设所有向量都是列向量):

例如,在医学诊断应用中,x包含患者的特征,如性别、年龄、血压、各种测试的结果等;而在图像分类任务中,x是一个包含图像的所有原始像素的向量。

大多数机器学习算法要求输入特征是数值型的,因此在应用学习算法之前,必须将性别或血型等分类变量转换为数字。

总体上,我们用D表示给定的数据集:

特征向量通常一起存储在称为设计矩阵(或特征矩阵)的矩阵中,并用X表示:

X中,行表示样本,列表示特征,因此xᵢⱼ是与第i个样本相关联的第j个特征的值。

该矩阵允许学习算法将数据集作为单个实体进行代数运算(例如,解决线性回归问题涉及计算此矩阵的逆)。

回归与分类

我们区分两种类型的监督学习问题:

  1. 回归问题中,标签y是某个范围内的连续值。例如,在房价预测任务中,y∈(0,)表示实际房价的正值。

  2. 分类问题中,标签y是离散的,即它可以取y∈ {1,…,k}中的一个值,表示样本所属的类别。我们进一步区分两种类型的分类问题:(a)在二分类问题中,我们只有两类(k=2)。例如,垃圾邮件检测是一个二分类问题,其中标签可以是y=1(垃圾邮件)或y=0(正常邮件)。(b)在多类分类问题中,有多于两个类别(k>2)。例如,手写数字识别任务是一个多类问题,其中k=10类(每个可能的数字0-9一个类)。

回归和分类任务之间的主要区别在于,在回归中,我们试图找到一个尽可能贴近数据点的函数,而在分类中,我们试图找到类别之间的边界:

模型假设

在监督学习中,我们的目标是构建一个可以预测新的未知样本标签的模型。为此,我们首先需要学习将特征向量映射到标签的函数,y = f(x),基于给定的数据集。

由于我们只有有限数量的样本进行学习,我们只能找到与f(x)的近似值。学习算法分析给定的数据并生成被称为模型的假设的推断函数h(x)

函数h是一些可能函数的空间H的元素,称为假设空间。假设空间由模型的类型确定。例如,在线性回归中,H包含x的所有线性函数,而在决策树中,H包含可以由决策树表示的所有函数。

一个假设很好地概括了从训练数据到未知样本的真实标签的预测ŷ = h(x),与真实标签y = f(x)接近。在这方面,学习可以被看作是在假设空间H中搜索一个可以很好地概括的假设。

模型在未知数据上的预测与真实标签的偏差称为模型的泛化误差。为了估计泛化误差,我们将给定数据集的一部分用于测试(通常为数据集的20%至30%),然后测量模型在测试集上的预测误差。

为了防止数据污染,测试集应与学习过程分开保存。污染是指在学习过程中使用有关测试集的信息,可能导致对模型性能的过于乐观的估计。

损失函数和优化

许多机器学习模型的重要部分是选择适当的损失函数。损失函数L(yŷ)衡量模型对于给定样本ŷ的预测标签和其真实标签y之间的误差。

基于选择的损失函数,我们定义模型的成本作为其在所有训练样本上的平均损失:

请注意,损失函数计算每个样本的误差,而成本函数计算整个数据集上的误差(尽管有时这两个术语可以互换使用)。

许多参数化模型具有一组可学习参数(用wθ表示),这些参数根据训练集进行调整。例如,在线性回归中,参数是回归线的系数,而在神经网络中,参数是网络中神经元之间连接的权重。

在参数化模型中,模型的成本取决于其参数,因此我们用J(w)表示其成本函数。在这种情况下,我们的目标是找到将J(w)最小化的参数集w。这将学习问题转化为优化问题

优化问题包括通过在允许值集合内选择输入值来最大化或最小化函数。

一些优化问题具有闭合形式解,即我们可以通过解决(通常是线性的)方程组直接找到最小化J(w)的参数集。

当没有闭合形式解时,我们可以使用迭代优化方法,该方法生成一系列不断改进的解,以朝向最优解。在机器学习中常用的优化方法包括梯度下降和牛顿法。

典型的工作流程

为了解决一个给定的监督学习问题,一个典型的工作流程包括以下步骤:

  1. 定义问题空间,即问题的输入是什么,期望的输出是什么。例如,在手写邮政编码识别任务中,输入可能是一个数字,整个邮政编码,甚至是包含邮政编码的信封的图像。

  2. 收集训练数据。训练集需要代表问题的真实领域。此外,我们需要为数据收集标签,可以是人工专家提供的标签或者测量得到的标签。更高质量的训练数据通常会获得更准确的模型。

  3. 准备数据进行学习过程。这一步包括对数据的预处理和清理(例如填充缺失值,将分类变量转换为数值变量),以及特征提取和选择(即识别数据集中最重要的特征)。

  4. 将数据分割为训练集和测试集。

  5. 选择适合任务的机器学习模型。

  6. 在训练集上训练模型。

  7. 调整模型的超参数。超参数是学习算法的可配置参数,用于控制其行为(例如神经网络中的学习率)。这些参数通常在称为验证集的训练集子集上进行调整,或者通过交叉验证进行调整。

  8. 评估模型在测试集上的准确性。

  9. 重复步骤3-8,直到获得高质量的解决方案。验证集也可以用于比较不同的学习算法,并确定哪个算法最有效。

下图概述了这个工作流程:

常见监督学习算法

每个算法都有其优点和缺点。根据没有免费午餐定理,没有一种算法适用于所有问题。

根据一个被称为奥卡姆剃刀原理的一般原则,在两个误差率相同的模型中,你应该选择两者中较简单的模型。

最常用的监督学习算法有:

  1. 线性回归

  2. 逻辑回归

  3. K最近邻算法

  4. 朴素贝叶斯算法

  5. 决策树

  6. 支持向量机(SVM)

  7. 神经网络(多层感知器)

中一些算法可以处理回归和分类任务(例如决策树和神经网络),而其他算法只处理一种类型的问题(例如朴素贝叶斯只能处理分类问题)。

集成方法(如bagging、boosting)可以将多个算法组合在一起,创建更强大的模型。流行的集成方法包括随机森林、AdaBoost和XGBoost。

有用的数据集

有许多数据集可用于机器学习研究,并在同行评审的学术期刊中被引用。我们可以使用以下网站之一找到这些数据集:

  1. UCI机器学习库为机器学习社区提供了622个数据集的服务。

  2. OpenML是一个用于共享数据集、算法和实验的开放平台。

  3. Google数据集搜索是一个数据集搜索引擎。

  4. Kaggle数据集

评论已关闭。