第1部分:多标签分类概述:
多标签分类起源于对文本分类问题的调查,其中每个文档可能同时属于多个预定义主题。
文本数据的多标签分类是机器学习中一个重要的问题。范例从新闻文章到电子邮件。例如,这可以用于基于其情节的总结来找到电影所属的类型。
图1:根据情节汇总查找流派的多标签分类
或基于电影海报的流派的多标签分类。(这进入了计算机视觉领域。)
图2:多标签分类根据电影海报查找流派
多类分类和多标签分类之间的区别在于,在多类问题中,类是相互排斥的,而对于多标签问题,每个标签表示不同的分类任务,但是任务有某种相关性。
例如,多类分类假设每个样品都被分配到一个且仅有一个标签:水果可以是苹果或梨,但不能同时存在。然而,多标签分类的一个例子可能是文本可能是关于宗教,政治,金融或教育的任何一个,或者都不是这些。
第2部分:问题定义和评估指标:
问题定义:
恶意评论分类是具有高度不平衡数据集的多标签文本分类问题。
我们面临着构建多标签模型的挑战,该模型能够检测威胁,淫秽,侮辱和身份仇恨等不同类型的恶意。我们需要创建一个模型来预测每个评论的每种恶意的可能性。
可以在这里找到Kaggle链接到这个问题(https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge)。
评估指标:注意:最初Kaggle挑战中的评估指标是Log-Loss,后来更改为AUC。但是在这篇文章中,我们也会对其他评估指标进行评估。
单标签的评估措施通常与多标签不同。在单标签分类中,我们使用简单的度量标准,如精度,召回率,准确度等。比如,在单标签分类中,准确度只是:
图-3:单标签分类的准确度
在多标签分类中,错误分类不再是一个严重的错误或正确的分类。包含实际类别的子集的预测应该被认为比不包含它们的预测更好,即,正确地预测三个标签中的两个,这比完全不预测标签更好。
微平均和宏平均(基于标签的度量):
为了测量多类分类器,我们必须以某种方式平均分类。有两种不同的方法称为微平均和宏平均。
在微平均所有TP中,总结每个类的TN,FP和FN,然后取平均值。
Fig-4: Micro-Averaging
在微平均法中,您可以总结系统对于不同集合的个体真实肯定,误报和误报,并应用它们。而微平均F1分数将仅仅是上述两个方程的调和平均值。
宏平均是直截了当的。我们只是将系统的精度和召回的平均值放在不同的集合上。
图-5:宏平均
当您想知道系统如何在整个数据集上执行整体操作时,可以使用宏平均方法。你不应该拿这个平均数作出任何具体的决定。另一方面,当数据集大小不一时,微平均可能是一个有用的衡量指标。
Hamming-Loss(基于实例的度量):
用最简单的术语来说,Hamming-Loss是错误预测的标签部分,即错误标签的一小部分与标签总数的比例。
完全匹配率(子集精度):
它是最严格的度量标准,指示标签分类正确的样本的百分比。
的缺点是多类分类问题有部分正确的可能性,但在这里我们忽略了那些部分正确的匹配。
scikit-learn中有一个实现子集精度的函数,称为precision_score 。
第3部分:探索性数据分析(EDA):
探索性数据分析是数据分析过程中的重要步骤之一。在这里,重点是掌握手中的数据 - 诸如制定正确的问题以询问数据集,如何操作数据源以获取所需的答案等。
首先让我们导入必要的库。import os
import csv
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
接下来,我们将来自csv文件的数据加载到pandas dataframe中并检查其属性。data_path = "/Users/kartik/Desktop/AAIC/Projects/jigsaw-toxic-comment-classification-challenge/data/train.csv"
data_raw = pd.read_csv(data_path)
print("Number of rows in data =",data_raw.shape[0])
print("Number of columns in data =",data_raw.shape[1])
print("\n")
print("**Sample data:**")
data_raw.head()