机器学习中的分类(Classification):入门指南

更新于 2026-02-05

Zoumana Keita 2024-08-08

了解机器学习中的分类,包括其定义、应用场景以及一些常见的分类算法示例。

如今,许多行业都在处理各种类型的大规模数据集。手动处理所有这些信息不仅耗时,而且从长远来看可能无法带来显著价值。为了获得更好的投资回报率,人们正在应用从简单自动化到机器学习技术在内的多种策略。本概念性博客将介绍机器学习中最重要的概念之一:分类(Classification)

我们将首先定义机器学习中的分类,然后阐明机器学习中的两种学习器类型,并区分分类与回归之间的差异。接着,我们会探讨一些分类在现实世界中的应用场景。之后,我们将介绍所有不同类型的分类任务,并深入讲解一些分类算法的示例。最后,我们将提供几个算法实现的动手实践。


什么是机器学习中的分类?

分类是一种监督式机器学习方法,模型试图预测给定输入数据的正确标签。在分类任务中,模型使用训练数据进行充分训练,然后在测试数据上进行评估,最终用于对新的、未见过的数据进行预测。

例如,一个算法可以学习预测一封电子邮件是垃圾邮件(spam)还是正常邮件(ham,即非垃圾邮件),如下图所示:

机器学习分类示意图:电子邮件分类

在深入探讨分类概念之前,我们首先需要理解分类中两种学习器的区别:惰性学习器(Lazy Learners)急切学习器(Eager Learners)。然后,我们将澄清分类与回归之间常见的误解。


惰性学习器 vs. 急切学习器

机器学习分类中有两种类型的学习器:

急切学习器(Eager Learners)

急切学习器是指那些先从训练数据集中构建模型,然后再对未来的数据集进行预测的机器学习算法。它们在训练过程中花费更多时间,因为它们“急于”通过学习权重来获得更好的泛化能力,但在预测阶段所需时间较少。

大多数机器学习算法都属于急切学习器,例如:

  • 逻辑回归(Logistic Regression)
  • 支持向量机(Support Vector Machine, SVM)
  • 决策树(Decision Trees)
  • 人工神经网络(Artificial Neural Networks)

惰性学习器(Lazy Learners)

惰性学习器(也称为基于实例的学习器)则不会立即从训练数据中创建模型,“惰性”正源于此。它们只是记住整个训练数据,每次需要进行预测时,都会在整个训练数据中搜索最近邻样本,因此在预测阶段速度非常慢。

这类算法的示例包括:

  • K近邻算法(K-Nearest Neighbor, KNN)
  • 基于案例的推理(Case-based reasoning)

不过,也可以使用一些算法(如 BallTrees 和 KDTree)来改善预测延迟。


机器学习分类 vs. 回归

机器学习算法主要分为四类:监督学习、无监督学习、半监督学习和强化学习

尽管分类和回归都属于监督学习范畴,但它们并不相同:

  • 当目标变量是离散的时,预测任务属于分类。例如,识别一段文本背后的情感倾向。
  • 当目标变量是连续的时,预测任务属于回归。例如,根据一个人的学历、工作经验、地理位置和职级预测其薪资水平。

分类与回归的区别示意图


机器学习分类在现实生活中的应用示例

监督式机器学习分类在我们日常生活的多个领域都有广泛应用。以下是一些示例:

医疗健康(Healthcare)

  • 利用历史患者数据训练机器学习模型,帮助医疗专家更准确地分析诊断结果。
    • 在新冠疫情期间,机器学习模型被用于高效预测某人是否感染了新冠病毒。
    • 研究人员可使用模型预测未来更可能出现的新疾病。

教育(Education)

教育领域处理大量文本、视频和音频数据。借助自然语言处理技术,可以对这些非结构化信息进行分析,完成以下任务:

  • 按类别对文档进行分类。
  • 自动识别学生申请材料所使用的语言。
  • 分析学生对某位教授反馈的情感倾向。

交通运输(Transportation)

交通是许多国家经济发展的关键组成部分。因此,各行业正在使用机器学习和深度学习模型:

  • 预测哪些地理位置的交通流量将上升。
  • 预测特定地点因天气条件可能出现的潜在问题。

可持续农业(Sustainable Agriculture)

农业是人类生存的重要支柱。引入可持续性措施可在不破坏环境的前提下显著提升农民生产力:

  • 使用分类模型预测哪种土地适合种植某种种子。
  • 预测天气,帮助农民采取适当的预防措施。

机器学习中的不同类型分类任务

机器学习中有四种主要的分类任务:二元分类、多类分类、多标签分类和不平衡分类

二元分类(Binary Classification)

在二元分类任务中,目标是将输入数据划分为两个互斥的类别。训练数据以二进制形式标注:true/false、positive/negative、0/1、spam/not spam 等,具体取决于所解决的问题。

例如,我们可能想检测一张图片是卡车还是船。

二元分类任务示意图

逻辑回归和支持向量机算法原生支持二元分类。但其他算法如 K 近邻和决策树也可用于二元分类。

多类分类(Multi-Class Classification)

多类分类包含至少两个互斥的类别标签,目标是预测给定输入样本属于哪个类别。例如,下图中模型正确将图像分类为“飞机”。

3 类分类任务示意图

大多数二元分类算法也可用于多类分类,包括但不限于:

  • 随机森林(Random Forest)
  • 朴素贝叶斯(Naive Bayes)
  • K 近邻(K-Nearest Neighbors)
  • 梯度提升(Gradient Boosting)
  • 支持向量机(SVM)
  • 逻辑回归(Logistic Regression)

疑问:你不是说 SVM 和逻辑回归默认不支持多类分类吗?
:没错。但我们可以通过二元转换策略(如 one-versus-one 和 one-versus-all)将原生二元分类算法适配到多类分类任务中。

One-versus-One(一对一)

该策略为每一对标签训练一个分类器。例如,在 3 类分类中,将有 3 对标签,因此需要 3 个分类器。

一般而言,对于 N 个标签,将有 N×(N−1)/2 个分类器。每个分类器在单一二元数据集上训练,最终类别由所有分类器的多数投票决定。该方法特别适用于 SVM 等基于核的算法。

One-vs-One 示意图

One-versus-Rest(一对多)

该策略将每个标签视为独立类别,其余所有标签合并为一个类别。对于 3 类问题,将训练 3 个分类器。

一般而言,对于 N 个标签,将有 N 个二元分类器。

One-vs-Rest 示意图

多标签分类(Multi-Label Classification)

在多标签分类任务中,我们试图为每个输入样本预测零个或多个类别。此时不存在互斥性,因为一个输入样本可以拥有多个标签。

这种场景常见于:

  • 自然语言处理中的自动打标(auto-tagging):一段文本可能包含多个主题。
  • 计算机视觉:一张图像可能包含多个物体,如下图所示——模型预测图像中包含:飞机、船、卡车和狗。

4 标签分类任务示意图

不能直接使用多类或二元分类模型执行多标签分类。但大多数标准分类算法都有其专门用于多标签分类的变体,例如:

  • 多标签决策树(Multi-label Decision Trees)
  • 多标签梯度提升(Multi-label Gradient Boosting)
  • 多标签随机森林(Multi-label Random Forests)

不平衡分类(Imbalanced Classification)

在不平衡分类中,各类别的样本数量分布不均。例如,在一个 3 类分类场景中,训练数据可能包含:60% 的卡车、25% 的飞机和 15% 的船。

不平衡分类任务示意图

不平衡问题常见于以下场景:

  • 金融行业的欺诈交易检测
  • 罕见疾病诊断
  • 客户流失分析

使用传统预测模型(如决策树、逻辑回归等)处理不平衡数据集效果不佳,因为模型可能偏向预测样本数量最多的类别,而将少数类视为噪声。

那是否意味着这类问题无法解决?
当然不是!我们可以采用多种方法应对数据不平衡问题,最常用的方法包括采样技术代价敏感算法

采样技术(Sampling Techniques)

这些技术旨在通过以下方式平衡原始数据分布:

  • 基于聚类的过采样(Cluster-based Oversampling)
  • 随机欠采样(Random undersampling):随机删除多数类样本。
  • SMOTE 过采样(SMOTE Oversampling):对少数类样本进行合成复制。

代价敏感算法(Cost-Sensitive Algorithms)

这些算法考虑误分类的代价,旨在最小化模型产生的总成本,例如:

  • 代价敏感决策树(Cost-sensitive Decision Trees)
  • 代价敏感逻辑回归(Cost-sensitive Logistic Regression)
  • 代价敏感支持向量机(Cost-sensitive Support Vector Machines)

评估机器学习分类算法的指标

了解不同类型的分类模型后,选择合适的评估指标至关重要。本节将介绍最常用的指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 分数(F1 Score),以及 ROC 曲线下的面积(AUC-ROC)

分类评估指标图示 1 分类评估指标图示 3 分类评估指标图示 7


深入分类算法

现在我们已掌握所需工具,可以开始实现一些算法。本节将介绍四种算法,并在贷款数据集上进行实现,以说明前述概念,特别是针对不平衡数据集二元分类任务。为简化起见,我们仅聚焦于四种算法。

数据集中的贷款分布

查看数据集的前五行:

import pandas as pd
loan_data = pd.read_csv("loan_data.csv")
loan_data.head()

贷款数据集前 5 行

借款人画像

import matplotlib.pyplot as plt

def show_loan_distrib(data):
    count = data["not.fully.paid"].value_counts() if isinstance(data, pd.DataFrame) else data.value_counts()
    count.plot(kind='pie', explode=[0, 0.1], figsize=(6, 6), autopct='%1.1f%%', shadow=True)
    plt.ylabel("Loan: Fully Paid Vs. Not Fully Paid")
    plt.legend(["Fully Paid", "Not Fully Paid"])
    plt.show()

show_loan_distrib(loan_data)

贷款借款人分布图

从图中可见,84% 的借款人已全额还款,仅 16% 未还,数据集严重不平衡。

变量类型

在进一步操作前,需检查变量类型,以便对需要编码的变量进行处理。

我们发现除 purpose 属性外,所有列均为连续变量,需对其进行编码。

image

print(loan_data.dtypes)

image

encoded_loan_data = pd.get_dummies(loan_data, prefix="purpose", drop_first=True)
print(encoded_loan_data.dtypes)

划分训练集与测试集

X = encoded_loan_data.drop('not.fully.paid', axis=1)
y = encoded_loan_data['not.fully.paid']

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, stratify=y, random_state=2022)

应用采样策略

我们将探索两种采样策略:随机欠采样SMOTE 过采样

随机欠采样

对多数类(“已全额还款”,类别 0)进行欠采样:

X_train_cp = X_train.copy()
X_train_cp['not.fully.paid'] = y_train
y_0 = X_train_cp[X_train_cp['not.fully.paid'] == 0]
y_1 = X_train_cp[X_train_cp['not.fully.paid'] == 1]
y_0_undersample = y_0.sample(y_1.shape[0])
loan_data_undersample = pd.concat([y_0_undersample, y_1], axis=0)

show_loan_distrib(loan_data_undersample)

欠采样后的借款人分布

SMOTE 过采样

对少数类进行过采样:

from imblearn.over_sampling import SMOTE
smote = SMOTE(sampling_strategy='minority')
X_train_SMOTE, y_train_SMOTE = smote.fit_resample(X_train, y_train)
show_loan_distrib(y_train_SMOTE)

应用采样策略后,数据集在不同借款人类型间实现了均衡分布。


应用部分机器学习分类算法

本节将在 SMOTE 采样后的数据集上应用以下两种分类算法。同样的训练方法也可用于欠采样数据。

逻辑回归(Logistic Regression)

这是一种可解释性强的算法。它通过 sigmoid 函数建模数据点属于某一类的概率。

X = loan_data_undersample.drop('not.fully.paid', axis=1)
y = loan_data_undersample['not.fully.paid']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, stratify=y, random_state=2022)

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix, classification_report

logistic_classifier = LogisticRegression()
logistic_classifier.fit(X_train, y_train)
y_pred = logistic_classifier.predict(X_test)

print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred))

逻辑回归分类报告

支持向量机(Support Vector Machines, SVM)

该算法可用于分类和回归。它通过最大化间隔原则学习绘制超平面(决策边界),该边界通过两个最近的支持向量确定。

SVM 提供一种称为**核技巧(kernel trick)**的变换策略,可将非线性可分数据投影到高维空间,使其线性可分。

from sklearn.svm import SVC
svc_classifier = SVC(kernel='linear')
svc_classifier.fit(X_train, y_train)

y_pred = svc_classifier.predict(X_test)
print(classification_report(y_test, y_pred))

SVM 在欠采样数据上的分类报告

当然,通过更多特征工程和调参,这些结果还可进一步提升,但已明显优于使用原始不平衡数据的效果。

XGBoost

该算法是梯度提升树(gradient-boosted trees)的扩展,不仅能有效防止过拟合,还在速度和性能方面表现优异。


新兴的分类算法与技术

随着机器学习不断发展,新的分类算法和技术不断涌现,在性能、可扩展性和可解释性方面均有显著提升。以下介绍自 2022 年以来广受欢迎的一些重要进展,包括 Transformer、深度集成方法可解释人工智能(XAI)技术

1. 用于分类的 Transformer

Transformer 最初为自然语言处理任务(如翻译和文本生成)设计,现已广泛应用于跨领域的分类任务。其核心创新在于自注意力机制,使模型能有效衡量输入数据不同部分的重要性。

  • 视觉 Transformer(ViT):通过将图像视为图像块序列(类似文本中的单词),ViT 在图像分类基准上取得了顶尖性能。
  • 表格 Transformer(Tabular Transformers):在结构化数据处理方面也展现出潜力,为表格分类任务提供了随机森林和梯度提升机之外的新选择。

Transformer 擅长处理大规模复杂数据集,已在医疗、金融和电商等行业广泛用于图像识别、欺诈检测和推荐系统等任务。

2. 深度集成方法(Deep Ensemble Methods)

深度集成方法通过结合多个模型的预测结果,提升鲁棒性、准确性和不确定性估计。通过融合不同模型的优势,这些方法在复杂分类任务中常优于单个模型。

  • 堆叠(Stacking)与混合(Blending):传统集成技术,通过元分类器或加权平均组合多个基分类器的预测。最新进展已将深度学习模型融入其中,构建更强大的分类器。
  • 神经网络集成:训练多个具有不同初始化或架构的神经网络,并对其预测结果取平均。该方法在图像和语音分类等挑战性任务中有效减少过拟合并提升泛化能力。
  • 多样性驱动集成:聚焦于最大化个体模型间的多样性,以降低误差相关性。Bagging、Boosting 和输出去相关等技术已被适配用于深度学习模型,为不平衡或含噪数据集提供稳健解决方案。

3. 可解释人工智能(XAI)技术

随着模型日益复杂,对可解释性和透明度的需求不断增长。XAI 技术旨在使分类模型的决策过程更易被人理解,这对于医疗和金融等高风险领域建立对 AI 系统的信任至关重要。

  • SHAP(SHapley Additive exPlanations):通过为每个特征分配贡献值,提供统一的特征重要性度量。该方法适用于各类模型(包括深度学习),有助于理解哪些特征对模型决策影响最大。
  • LIME(Local Interpretable Model-Agnostic Explanations):通过局部近似可解释模型来解释单个预测。该技术特别适用于理解神经网络和梯度提升机等复杂模型。
  • 反事实解释(Counterfactual explanations):寻找能改变分类结果的最小输入变化。例如在信用评分中,可告知用户哪些改变能使其贷款获批。

这些 XAI 技术正越来越多地集成到分类模型中,不仅提升透明度,也满足 GDPR 等法规对自动化决策解释的要求。


结论

本概念性博客涵盖了机器学习分类的主要方面,并提供了其在不同领域的应用示例。最后,我们展示了在应用欠采样SMOTE 过采样策略生成平衡数据集后,如何实现逻辑回归支持向量机算法的训练。