我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:刘伯温论坛 > 二元语法 >

文本分类又来了用 Scikit-Learn 解决多类文本分类问题

归档日期:04-19       文本归类:二元语法      文章编辑:爱尚语录

  原标题:文本分类又来了,用 Scikit-Learn 解决多类文本分类问题

  在商业领域有很多文本分类的应用,比如新闻故事通常由主题来分类;内容或产品常常被打上标签;基于如何在线谈论产品或品牌,用户被分成支持者等等。

  然而大部分的文本分类文章和网上教程是二进制的文本分类,像垃圾邮件过滤(spam vs. ham)、情感分析(积极的和消极的)。在大量实例中,我们现实世界的问题要比这些复杂的多。因此,这是我们今天要做的:将消费者的财务投诉分成12个预定义的类。这些数据可以从 data.gov 下载。

  我们的问题是有监督的文本分类问题,目标是调查哪一种有监督的机器学习方法最适于解决该问题。

  鉴于新的投诉的到来,我们想将它归到12个分类目录中。分类器使得每个新投诉被归类到一个仅且一个类别中。这是一个多类文本分类问题。我已经迫不及待地想看下我们完成的结果。

  在投入训练机器学习模型前,我们应当先看一些实例以及每个类别中投诉的数量:

  实例:“在我的信用报告上有过时的信息,我之前对该信用报告有争议,该项信息记录应该被删除,该信息是7年多之前的并且不符合信用报告的要求。”

  我们将在消费者投诉陈述栏删除无赋值的,并且增加一栏编译该产品作为一个整数值,因为通常分类属性变量用整数比用字符串代表要好。

  我们看到每个产品的投诉数值不平衡。消费者的投诉多针对索回债款、信用报告和房屋抵押贷款。

  当我们遇到问题时,我们会用标准算法解决这些问题。传统的算法常常倾向于大多数的分类,并不会将数据分布考虑进去。最糟的情况,少数的分类被当做异常值被忽略了。在一些例子中,像欺诈侦测和癌症预测,我们将仔细设置我们的模型或人工平衡数据集,比如通过欠采样和过采样每个类。

  然而,在我们的学习不均衡的数据的例子中,我们会将兴趣点放在占少数的的分类上。在大多数分类上具有高准确率的分类器是令人满意的。然而针对占少数的分类也应当保持合理的准确度。就这样吧。

  分类器和学习算法不能以他们原来的形式直接处理文本文件,他们大多数需要有固定大小的数字特征向量而不是带有变量长度的原来的文本文件。因此,在预处理的阶段文本将被转成更好处理的表达方式。

  一个从文本中提取特征的常用方法是使用词汇模型袋:一种给每个文件,在我们的例子中的投诉陈述,词汇的呈现(通常是频率)将被考虑进去,但这些词汇出现的顺序是被忽略的。

  尤其是我们数据集的每个术语,我们将计算一种被称为术语频率的测量方法。逆文档频率,缩写成tf-idf。我们将使用 sklearn.feature_extraction.text.TfidfVectorizer 给每个消费者投诉陈述计算一个 tf-idf 向量:

  现在,每 4569 个消费者投诉陈述由12633个特征表示,代表不同的一元和二元语法的 tf-idf 分数。

  上述所有这些数据转化后,现在我们有了所有的特征和标签,是时候来训练分类器了。针对这种类型的问题,许多算法可供我们使用。

  我们现在可以用不同的机器学习模型来做测试了,评估他们的准确度和寻找任一潜在问题的源头。

  线性支持向量机和逻辑回归比其他两种分类器表现更好,线性支持向量机有一个小优势,它具备 82% 左右的准确率。

  继续我们最好的模型(线性支持向量机),我们看下混淆矩阵,展示下预测的和实际的标签之间的差异。

  大多数的预测最终呈现的是对角线(预测的标签 = 实际的标签),正是我们想要的。然而,还是有许多的误分类,看看他们是由什么引起的也许蛮有意思的:

  你可以看到,一些误分类的投诉是一些跟不止一个主题相关的投诉(比如,包括信用卡和信用报告的投诉)。这种错误将一直发生。

  然后我们使用 chi-squared test 来寻找与每个目录最相关的术语:

本文链接:http://19721112.com/eryuanyufa/93.html