ML | 使用 Scikit-Learn 的虚拟分类器2025年6月24日 | 阅读 7 分钟 引言一个稳健的基线对于评估机器学习模型的整体性能至关重要。对于分类问题,Scikit-Learn 的虚拟分类器提供了一个可靠的、基于规则的基准。虚拟分类器使用预设的算法生成预测,而无需考虑输入特征,与从数据中学习的真实模型形成对比。 在构建机器学习管道时,这些分类器至关重要,因为它们有助于确定更复杂的模型是否真正有益,还是仅仅过度拟合了噪音。通过与虚拟基线进行比较,我们可以确定一个模型是否产生了有用的预测。 Scikit-Learn 的 DummyClassifier 支持多种技术,包括猜测最常见的类别、随机分配标签或始终预测一个保持不变的值。这些技术在处理不平衡数据集和计算分类器的最坏情况准确性等各种情况下都很有用。 尽管虚拟分类器不适用于实际应用,但它们对于实验验证至关重要。如果一个神经网络模型仅略微优于一个虚拟模型,那么它可能需要改进的特征工程或数据处理。 什么是虚拟分类器?虚拟分类器是一个基础的 Scikit-Learn 模型,它不从数据中学习,而是基于基本规则生成预测。它的主要目的是作为评估更复杂的机器学习模型的一个标准。 虚拟分类器通过遵循预先确定的算法来生成预测,而真实的分类器则从数据中学习模式和相关性。这些技术包括: - 最频繁:始终预测训练集中的最常见类别。
- 分层:根据训练集中的类别分布生成预测。
- 均匀:以相同的概率随机分配标签。
- 常量:每次都预测用户定义的标签。
虚拟分类器的主要功能是充当参考点。如果一个训练有素的模型仅略微优于一个虚拟模型,那么它可能在识别数据中的重要特征方面遇到困难。 尽管虚拟分类器不用于实际应用,但它们在实验设置中很有用,特别是在处理不平衡数据集、评估基线准确性以及确认模型的性能是否值得关注时。 如何使用 Scikit-Learn 的虚拟分类器- 导入和安装依赖项
在开始之前,请确保您的环境中安装了 Scikit-Learn。您需要导入必要的库,例如 `sklearn.datasets` 中的 `make_classification`、`sklearn.metrics` 中的 `accuracy_score`、`sklearn.model_selection` 中的 `train_test_split` 以及 `sklearn.dummy` 中的 `DummyClassifier` 等。通过这些导入,您可以生成数据集,将其分为训练集和测试集,应用虚拟分类器,并评估其性能。 - 构建一个数据集样本
Scikit-Learn 中的 `make_classification` 函数可用于创建模拟真实分类问题的合成数据集。此函数可以生成具有预定样本数量、特征和标签的数据集。数据集生成后,使用 `train_test_split` 将其分割为训练集和测试集。分类器使用训练集进行拟合,并使用测试集对其性能进行分类。 - 设置虚拟分类器
下一步是使用 `DummyClassifier()` 初始化虚拟分类器。为此,必须指定一种决定预测生成方式的策略。例如,如果采用“most_frequent”策略,分类器将始终预测其训练数据集中的最常见类别。其他可用的策略包括“stratified”、“uniform”和“constant”,每种策略都有不同的基本目的。 - 训练虚拟分类器
初始化后,使用 `fit()` 函数训练虚拟分类器。虚拟分类器不像真实的机器学习模型那样从数据模式中学习。相反,它会记住所选策略提供的可信规则,并将其用于生成预测。为了使分类算法与提供的数据集对齐并准备进行评估,需要进行训练阶段。 - 生成预测
一旦训练完成,`predict()` 函数允许虚拟分类器生成预测。这些预测不考虑任何输入特征,它们完全基于预设的策略。然后,通过将预测与数据集的真实标签进行比较,可以评估虚拟分类器作为基线模型的性能。 - 评估性能
使用准确率等指标将预测与真实标签进行比较,以评估虚拟分类器的性能。`accuracy_score()` 函数确定了正确预测标签的百分比。这个基线准确性有助于确定一个更复杂的模型是显著优于随机或朴素预测器,还是仅仅略有优势。 - 与真实模型进行比较
最后一步是训练一个真实的神经网络分类器,例如逻辑回归,然后将其准确率与虚拟分类器的准确率进行比较。如果真实模型仅略微优于虚拟模型,则数据集可能存在问题,例如缺乏有用的特征或类别不平衡。此比较有助于确认是否需要更多的特征工程和数据处理,或者机器学习框架是否真的在学习相关模式。
DummyClassifier 策略- “分层”策略
此策略通过在保留与训练数据所示相同的类别分布的情况下随机分配类别标签来生成预测。它确保了指导集和预测中每个类别的比例是相似的。这种方法提供了一个无偏但考虑分布的基线,对于在不平衡数据集上测试模型很有用。 - “most_frequent”策略
使用此策略时,分类器始终预测初始数据集中的最常见类别。当一个类别在不平衡分类问题中占主导地位时,它非常有益。尽管它通常能为失衡数据集产生极高的准确率,但它完全排除了少数类别,这阻止了它提供有见地的统计数据。 - “prior”策略
“prior”策略与“most_frequent”一样,每次都预测多数类别。为了与 Scikit-Learn 的先前版本兼容,它被保留了下来。在构建 DummyClassifier 的上下文中,“most_frequent”和“prior”是可互换的。 - “uniform”策略
使用此策略,类别标签被随机预测,每个类别都有相同的机会。对于平衡数据集(其中每个类别出现的次数大致相等)来说,它是一个有用的基线。相比之下,“stratified”认为所有类别都有相同的机会,并且忽略了类别分布。 - “constant”策略
借助“constant”策略,分类器可以始终预测用户定义的类别标签。在某些需要使用固定预测进行测试的情况下,例如在每个输出都属于单个类别的场景下验证模型行为时,它很有用。分类器必须使用选择的类别标签进行初始化。
虚拟分类器的缺点- 无数据驱动的学习
虚拟分类器不分析数据集中的联系和模式。由于它们基于简单的规则进行预测,因此不适用于需要深刻见解的实际应用。 - 对复杂问题不可靠
由于无法从特征中学习,虚拟分类器无法理解数据中的复杂模式。对于具有复杂关系的应用(如情感分析或图像识别),虚拟分类器无法产生有用的结果。 - 不利于模型部署
虚拟分类器仅用于基准测试。由于它们除了充当基线或无法有效泛化到新数据外,不提供有用的预测,因此不能在生产环境中使用。 - 在平衡数据集上的结果不佳
虚拟算法之一(例如“most_frequent”)可能在类别分布均匀的数据集上表现不佳。在某些情况下,使用“uniform”的随机猜测可能与真实模型的性能差异不大。 - 在回归任务中的有限用途
与分类问题相比,它们的回归等效项 `DummyRegressor` 通常提供的信息很少,而在分类问题中,虚拟策略可能相对有用。对于复杂的数值预测,预测均值、中位数或恒定值可能不是一个有用的基线。
DummyClassifier 与真实模型的比较- 学习能力
DummyClassifier 不使用输入特征进行训练。它只使用一种策略,例如选择最常见的类别或随机分配标签。相反,像随机森林或逻辑回归这样的真实模型会检查数据模式以提供有根据的预测。 - 性能指标
由于缺乏学习能力,虚拟分类器的准确率通常较低,尤其是在平衡数据集上。预计真实模型在 F1 分数、召回率、准确率和精确率等关键评估指标上会优于虚拟分类器。如果真实分类器的性能仅略高于虚拟模型,则可能表明它未捕获到重要的模式。 - 处理不平衡数据
通过始终识别主导类别,使用“most_frequent”策略的 DummyClassifier 可能会为不平衡数据集提供过高的基线准确率。这应该通过一个经过充分训练以识别少数类实例的真实分类器来改进。此外,性能评估应使用准确率以外的指标,例如 AUC-ROC 或精确率-召回率曲线。 - 模型验证
通过与 DummyClassifier 进行比较,可以验证机器学习模型超越随机的可能性。如果真实分类器的性能与虚假模型相似,则可能是功能选择不当、缺乏训练数据或模型设计效率低下。 - 比较示例
假设您有一个包含 80% 类别“A”和 20% 类别“B”的数据集。这是二元分类的一个例子。使用“most_frequent”的 DummyClassifier 可能会以 80% 的准确率持续预测“A”。一个能够至少正确分类一些“B”实例的真实模型应该优于此。这表明,如果仅达到 81-82% 的准确率,那么预期结果并没有比基本基线高出多少。
|