OneVsRestClassifier

2025年3月17日 | 阅读 7 分钟

根据实例的属性识别其类别标签是机器学习分类任务中的一个常见挑战。多类别分类将类区分的思想应用于有两个以上潜在类的情况,而二元分类只处理二元分类。一种流行的多类别分类方法是 OneVsRestClassifier,它为处理此类任务提供了一种直接而有效的方法。

OneVsRestClassifier,有时也称为 One-vs-All (OvA),是一种将多类别分类问题分解为多个二元分类问题的方法。它将问题分解为多个二元分类任务,将每个类别视为一个单独的二元分类问题,而不是直接从多个选项中预测类别标签。简单地说,它将每个类别视为正类,将其他类别视为负类,为每个类别训练一个不同的二元分类器。

OneVsRestClassifier 的优点

以下是 OneVsRestClassifier 的一些优点:

  • 集成学习的应用:OneVsRestClassifier 方法结合了多个二元分类器的预测,从而通过设计利用了集成学习的概念。通过利用每个分类器捕获的多种视角,这种分类器集成可以产生更可靠和准确的预测。
  • 特征重要性和正则化的重要性:OneVsRestClassifier 允许独立地为每个二元分类任务使用正则化技术和特征重要性分析。通过减少过拟合和识别每个类别的关键特征,可以提高泛化性能。
  • 易于灵活性:OneVsRestClassifier 允许为每个类别的决策标准进行单独设置,从而具有灵活性。这使得实践者可以根据特定的应用程序需求或领域专业知识来调整判断阈值,或改变精确率和召回率之间的权衡。
  • 类别平衡的便捷性:类别不平衡,即某些类别可能比其他类别拥有的实例少得多,这是现实世界数据集中一个常见的问题。通过将每个类别视为一个独特的二元分类问题,OneVsRestClassifier 可以帮助解决类别不平衡问题。通过这样做,分类器可以专注于将少数类与其他类区分开来,这可能会提高整体性能。
  • 易于理解:OneVsRestClassifier 能够有效地处理复杂的多类别分类问题。由于它独立训练多个二元分类器,将计算工作分配给多个分类器,因此它可以扩展到具有许多类别或特征的数据集。
  • 通用性:任何支持二元分类的分类技术,例如决策树、逻辑回归和支持向量机 (SVM),都可以与 OneVsRestClassifier 一起使用。由于其适应性,实践者可以根据数据集的具体情况和当前情况使用各种分类器。

OneVsRestClassifier 的缺点

OneVsRestClassifier 有许多优点,但也存在一些局限性。以下是 OneVsRestClassifier 的一些优点:

  • 复杂性:OneVsRestClassifier 将多类别分类问题分解为多个二元分类任务,这简化了问题,但它也可能产生复杂性,特别是在处理大量类别时。多个二元分类器可能难以管理和理解,并且在模型的验证和评估过程中,这样做可能需要更多的时间和精力。
  • 类关系丢失:OneVsRestClassifier 会独立处理每个类别,而忽略它们之间可能存在的任何依赖关系或联系。在类别不相互排斥的情况下,这种方法可能无法充分捕捉数据中看到的复杂分层结构或类间交互,从而导致性能不理想。
  • 无法捕捉类别相关性:当类别之间存在依赖关系或相关性时,OneVsRestClassifier 可能无法充分表示它们之间的关系。分类任务的二元特性可能导致对底层类别相关性的过度简化,从而削弱预测性能并提供区分度较低的模型。
  • 过拟合:当独立训练多个二元分类器时,过拟合的可能性更大,特别是当特征数量相对于样本数量较多时。由于训练集特有的噪声或不相关模式,二元分类器泛化到新数据的能力可能会受到阻碍。

代码

使用此方法为每个类别训练一个分类器。每个类别都与每个其他类别进行分类。这种技术具有可解释性以及计算经济性(只需要 n_classes 个分类器)。检查关联的分类器可以提供有关该类别的见解,因为每个类别都由单个分类器表示。这是一个合理的默认选项,也是最广泛使用的方法之一。

数据集

BBC 新闻文章数据集以预处理的矩阵格式提供,仅供非商业和学术用途。

  • 它包括来自 BBC 新闻网站的 2225 篇论文,涉及 2004 年至 2005 年期间的五类主题文章。
  • 五类标签(科技、体育、政治、娱乐和商业)

导入库

输出

OneVsRestClassifier

读取数据集

我们现在将加载数据集。

输出

OneVsRestClassifier

EDA

让我们看一下数据的组成。

输出

OneVsRestClassifier

数据准备

我们将创建一个 DataPreparation 类,并在其中使用输入数据(news_data)创建一个名为 data_prep 的实例。然后调用 preprocess 方法执行预处理步骤,从而得到包含预处理文本数据的 cleanse_df DataFrame。

这种方法提高了代码的可重用性、可读性和可维护性,使得为各种 NLP 任务预处理文本数据更加容易。此外,类结构允许根据需要定制和扩展预处理功能。

输出

OneVsRestClassifier

特征工程

我们现在将使用指定的计数向量器 (CountVectorizer) 和 TF-IDF 向量器 (TF-IDF Vectorizer) 对文本数据进行向量化。

输出

OneVsRestClassifier

输出

OneVsRestClassifier

我们需要将 TF-IDF 向量(train_tfidf 和 valid_tfidf)的维度减少到 2000 维,用于训练集和验证集。

模型

输出

OneVsRestClassifier

求值

我们现在将查看用于模型评估的各种指标。

输出

OneVsRestClassifier

从准确率来看,它似乎相当不错。