Moez Ali 2022-08-22
引言
监督式机器学习(Supervised Machine Learning)是机器学习的一种类型,它学习输入与输出之间的关系。输入通常被称为特征(Features)或“X变量”,而输出一般称为目标(Target)或“y变量”。同时包含特征和目标的数据类型被称为带标签数据(labeled data)。这是监督式学习与无监督式学习(unsupervised machine learning)之间的关键区别,后者是机器学习的另外一种主要类型。
在本教程中,你将学习以下内容:
- 什么是监督式机器学习
- 监督式 vs. 无监督式机器学习
- 半监督式机器学习
- 常见的监督式机器学习算法:
- 线性回归(Linear Regression)
- 决策树(Decision Tree)
- K近邻(K Nearest Neighbors)
- 随机森林(Random Forest)
- 朴素贝叶斯(Naive Bayes)
- 监督式机器学习的Python代码示例
什么是监督式机器学习?
监督式机器学习通过学习输入数据与输出数据之间的模式和关系来进行预测。它的核心在于使用带标签数据。所谓带标签数据,是指一个数据集中包含大量“特征”和“目标”的样本。监督式学习使用特定算法从这些数据中学习特征与目标之间的关系。这一过程被称为训练(Training)或拟合(Fitting)。
监督式学习算法主要分为两类:
- 分类(Classification)
- 回归(Regression)
分类(Classification)
分类是一种监督式机器学习任务,其算法从已有数据中学习,以预测未来某个结果或事件。例如:
一家银行可能拥有一个客户数据集,其中包含客户的信用历史、贷款记录、投资详情等信息,并希望判断某位客户是否会违约。在历史数据中,我们将拥有特征和目标:
- 特征:客户的属性,如信用历史、贷款、投资等。
- 目标:表示该客户过去是否违约(通常用1或0 / True或False / Yes或No表示)。
分类算法用于预测离散型结果。如果结果只有两种可能值(如True/False、Default/No Default、Yes/No),则称为二元分类(Binary Classification);如果结果包含两个以上的可能值,则称为多类别分类(Multiclass Classification)。
可用于分类任务的常见机器学习算法包括:
- 逻辑回归(Logistic Regression)
- 决策树分类器(Decision Tree Classifier)
- K近邻分类器(K Nearest Neighbor Classifier)
- 随机森林分类器(Random Forest Classifier)
- 神经网络(Neural Networks)

回归(Regression)
回归是另一种监督式机器学习任务,其算法从数据中学习,以预测连续值,如销售额、薪资、体重或温度等。例如:
一个包含房屋特征(如地块面积、卧室数量、浴室数量、所在社区等)以及房屋价格的数据集,可以用来训练一个回归算法,使其学习这些特征与房价之间的关系。
可用于回归任务的常见机器学习算法包括:
- 线性回归(Linear Regression)
- 决策树回归器(Decision Tree Regressor)
- K近邻回归器(K Nearest Neighbor Regressor)
- 随机森林回归器(Random Forest Regressor)
- 神经网络(Neural Networks)
监督式 vs. 无监督式学习
数据类型
监督式与无监督式机器学习的主要区别在于:监督式学习使用带标签数据。带标签数据是指同时包含特征(X变量)和目标(y变量)的数据。
在使用监督式学习时,算法会迭代地学习如何根据特征预测目标变量,并不断调整自身以对训练数据做出正确响应。这个过程即为训练或拟合。监督式学习模型通常比无监督式学习模型更准确,但它们在初始阶段需要人工参与来正确标注数据。如果数据标签不准确,监督式算法就会学到错误的信息。
相比之下,无监督式学习模型以自主方式识别未标注数据中的内在结构。需要注意的是,即使如此,验证输出变量仍然需要一定程度的人工介入。例如,一个无监督学习模型可能会发现网上购物的顾客倾向于同时购买同一类别的多个商品,但人类分析师仍需判断将商品X与商品Y配对推荐是否合理。
应用场景
监督式学习主要有两大应用场景:分类和回归。在这两类任务中,监督式算法都从训练数据中学习以进行预测:
- 如果预测变量是离散型(如“Yes”或“No”、1或0、“欺诈”或“非欺诈”),则应使用分类算法。
- 如果预测变量是连续型(如销售额、成本、薪资、温度等),则应使用回归算法。
无监督式学习的两个主要应用场景是聚类(Clustering)和异常检测(Anomaly Detection)。若想深入了解聚类,可参阅相关文章;若希望深入学习无监督式机器学习,可参考DataCamp提供的课程,你将学习如何使用scikit-learn和scipy对未标注数据集进行聚类、转换、可视化并提取洞察。
目标
- 监督式学习的目标:基于从带标签训练数据中学到的模型,对未来的新数据进行预测。预测结果的形式在训练前就已通过标签明确。
- 无监督式学习的目标:从未标注的海量数据中提取洞察。虽然无监督算法也从训练数据中学习,但训练数据中不含任何标签。
复杂度
相对于无监督式学习,监督式机器学习更为直接简单。无监督学习模型通常需要非常大的训练集才能获得理想结果,因此计算复杂度更高。
半监督式机器学习(Semi-Supervised Machine Learning)
半监督式学习是一种相对较新且不太常见的机器学习类型,它在训练过程中结合少量带标签数据与大量未标注数据。它介于监督式学习(使用带标签训练数据)和无监督式学习(使用未标注训练数据)之间。
半监督式学习在现实世界中有许多应用。在许多领域中,带标签数据十分稀缺——因为获取标签可能需要人工标注员、专用设备或耗时且昂贵的研究。
半监督式学习可分为两类:
- 转导学习(Transductive Learning)
- 归纳学习(Inductive Learning)
常见的监督式机器学习算法
本节将介绍一些常用的监督式机器学习算法:
线性回归(Linear Regression)
线性回归是最简单的机器学习算法之一,用于根据训练数据中的特征(自变量)预测连续值(因变量)。因变量(代表结果)的值受自变量(代表原因)变化的影响。
如果你还记得学生时代学过的“最佳拟合直线”,那么线性回归正是这个概念。例如,根据一个人的身高预测其体重就是一个典型的线性回归问题。
| 优点 | 缺点 |
|---|---|
| 简单、易于理解和解释 | 容易过拟合 |
| 对线性可分数据表现极佳 | 假设特征与目标变量之间存在线性关系 |
逻辑回归(Logistic Regression)
逻辑回归是线性回归的一种特殊形式,其目标变量(y)是离散型/分类变量,如1或0、True或False、Yes或No、Default或No Default。它使用对数几率(log of the odds)作为因变量,并通过logit函数预测某一二元事件发生的概率。

| 优点 | 缺点 |
|---|---|
| 简单、易于理解和解释 | 容易过拟合 |
| 输出概率校准良好 | 难以捕捉复杂关系 |
决策树(Decision Tree)
决策树算法是一种类似概率树的结构化模型,通过连续分割数据来分类或进行预测,其每一步都基于前一个问题的结果。该模型分析数据并回答一系列问题,帮助用户做出更明智的决策。
例如,你可以使用决策树,根据鸟类的羽毛、是否会飞或游泳、喙的类型等特征,通过“是/否”回答来识别特定鸟种。
| 优点 | 缺点 |
|---|---|
| 非常直观,易于解释 | 不稳定——训练数据微小变化可能导致预测结果大幅不同 |
| 不像某些线性模型那样需要大量数据预处理 | 容易过拟合 |
K近邻(K-Nearest Neighbors, KNN)
K近邻是一种统计方法,通过评估一个数据点与其他数据点的**距离(proximity)**来判断它们是否属于同一类别。数据点之间的距离越近,说明它们越相似。
例如,假设图中有两组彼此靠近的数据点,分别标记为A组和B组。当加入一个新的数据点时,它会被分配到与其距离最近的那一组。
| 优点 | 缺点 |
|---|---|
| 对数据无先验假设 | 训练时间较长(注:实际KNN无显式训练阶段,但预测阶段计算量大) |
| 直观且简单 | 在特征数量较少时效果好,但随着特征数量增加,预测准确性下降(维度灾难) |
随机森林(Random Forest)
随机森林也是一种基于树的算法,类似于决策树。但与仅使用单棵树的决策树不同,随机森林使用多棵决策树进行决策,形成“森林”。
它通过组合多个模型的预测结果来进行最终预测,既可用于分类,也可用于回归。
| 优点 | 缺点 |
|---|---|
| 能轻松处理数据中的非线性关系 | 因包含多棵树而难以解释 |
| 隐式执行特征选择 | 对大型数据集计算开销较大 |
朴素贝叶斯(Naive Bayes)
朴素贝叶斯基于贝叶斯定理——一个用于计算条件概率的数学公式。条件概率是指在某一事件已经发生的情况下,另一事件发生的概率。
该算法预测每个类别属于某一特定类的概率,并将概率最高的类别视为最可能的结果。
| 优点 | 缺点 |
|---|---|
| 算法速度非常快 | 假设所有特征相互独立(“朴素”假设) |
| 简单且易于实现 | 存在“零频率问题”:若训练集中某类别未出现,算法会赋予其零概率 |
监督式机器学习 Python 代码示例
本部分将使用Python中的scikit-learn库,在一个模拟数据集上训练一个逻辑回归(分类)模型。完整Notebook可在此处查看。
# 创建一个包含1000行、10个特征的模拟二元分类数据集
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=1000, n_features=10, n_classes=2)
# 检查X和y的形状
X.shape, y.shape
# 划分训练集和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
# 导入并初始化逻辑回归模型
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression()
# 拟合逻辑回归模型
lr.fit(X_train, y_train)
# 在测试集上生成硬预测(hard predictions)
y_pred = lr.predict(X_test)
y_pred
# 评估模型的准确率
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_pred)
结论
近年来,机器学习彻底改变了我们的商业运作方式。与传统基于规则的自动化策略不同,机器学习的核心创新在于:无需显式编程规则,而是让机器从数据中自动学习解决问题的方法。借助监督式机器学习技术,工程师可以利用历史数据训练模型,而无需手动指定解决路径。
在监督式机器学习中,虽然未来数据的确切答案未知,但在历史数据中已有记录。监督式学习算法的任务就是从这些历史数据中学习特征与目标之间的关系,从而对未来的结果、事件或数值进行预测。
本文为你建立了对监督式学习的基本理解,并阐明了其与无监督式学习的区别,还回顾了几种常见的监督式学习算法。然而,仍有许多重要内容未涉及,例如模型评估(Model Evaluation)、交叉验证(Cross-Validation)和超参数调优(Hyperparameter Tuning)。这些进阶主题值得进一步探索。