0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

详细解析scikit-learn进行文本分类

lviY_AI_shequ 2017-12-27 08:36 次阅读

使用scikit-learn进行文本分类

多标签分类格式

对于多标签分类问题而言,一个样本可能同时属于多个类别。如一个新闻属于多个话题。这种情况下,因变量yy需要使用一个矩阵表达出来。

而多类别分类指的是y的可能取值大于2,但是y所属类别是唯一的。它与多标签分类问题是有严格区别的。所有的scikit-learn分类器都是默认支持多类别分类的。但是,当你需要自己修改算法的时候,也是可以使用scikit-learn实现多类别分类的前期数据准备的。

多类别或多标签分类问题,有两种构建分类器的策略:One-vs-All及One-vs-One。下面,通过一些例子进行演示如何实现这两类策略。
详细解析scikit-learn进行文本分类

#from sklearn.preprocessing import MultiLabelBinarizery = [[2,3,4],[2],[0,1,3],[0,1,2,3,4],[0,1,2]]MultiLabelBinarizer().fit_transform(y)array([[0, 0, 1, 1, 1], [0, 0, 1, 0, 0], [1, 1, 0, 1, 0], [1, 1, 1, 1, 1], [1, 1, 1, 0, 0]])One-Vs-The-Rest策略

这个策略同时也称为One-vs-all策略,即通过构造K个判别式(K为类别的个数),第ii个判别式将样本归为第ii个类别或非第ii个类别。这种分类方法虽然比较耗时间,但是能够通过每个类别对应的判别式获得关于该类别的直观理解(如文本分类中每个话题可以通过只属于该类别的高频特征词区分)。

多类别分类学习

from sklearn import datasetsfrom sklearn.multiclass import OneVsRestClassifierfrom sklearn.svm import LinearSVCiris = datasets.load_iris()X,y = iris.data,iris.targetOneVsRestClassifier(LinearSVC(random_state = 0)).fit(X,y).predict(X)array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])

多标签分类学习

Kaggle上有一个关于多标签分类问题的竞赛:Multi-label classification of printed media articles to topics(地址:https://www.kaggle.com/c/wise-2014)。

关于该竞赛的介绍如下:

This is a multi-label classification competition for articles coming from Greek printed media. Raw data comes from the scanning of print media, article segmentation, and optical character segmentation, and therefore is quite noisy. Each article is examined by a human annotator and categorized to one or more of the topics being monitored. Topics range from specific persons, products, and companies that can be easily categorized based on keywords, to more general semantic concepts, such as environment or economy. Building multi-label classifiers for the automated annotation of articles into topics can support the work of human annotators by suggesting a list of all topics by order of relevance, or even automate the annotation process for media and/or categories that are easier to predict. This saves valuable time and allows a media monitoring company to expand the portfolio of media being monitored.

我们从该网站下载相应的数据,作为多标签分类的案例学习。

数据描述

这个文本数据集已经用词袋模型进行形式化表示,共201561个特征词,每个文本对应一个或多个标签,共203个分类标签。该网站提供了两种数据格式:ARFF和LIBSVM,ARFF格式的数据主要适用于weka,而LIBSVM格式适用于matlab中的LIBSVM模块。这里,我们采用LIBSVM格式的数据。

数据的每一行以逗号分隔的整数序列开头,代表类别标签。紧接着是以\t分隔的id:value对。其中,id为特征词的ID,value为特征词在该文档中的TF-IDF值。

形式如下。

58,152 833:0.032582 1123:0.003157 1629:0.038548 ...

数据载入

# load modulesimport os import sysimport numpy as npfrom sklearn.datasets import load_svmlight_filefrom sklearn.preprocessing import LabelBinarizerfrom sklearn.preprocessing import MultiLabelBinarizerfrom sklearn.linear_model import LogisticRegressionfrom sklearn.multiclass import OneVsRestClassifierfrom sklearn import metrics# set working directoryos.chdir("D:\\my_python_workfile\\Thesis\\kaggle_multilabel_classification")# read filesX_train,y_train = load_svmlight_file("./data/wise2014-train.libsvm",dtype=np.float64,multilabel=True)X_test,y_test = load_svmlight_file("./data/wise2014-test.libsvm",dtype = np.float64,multilabel=True)

模型拟合及预测

# transform y into a matrixmb = MultiLabelBinarizer()y_train = mb.fit_transform(y_train)# fit the model and predictclf = OneVsRestClassifier(LogisticRegression(),n_jobs=-1)clf.fit(X_train,y_train)pred_y = clf.predict(X_test)

模型评估

由于没有关于测试集的真实标签,这里看看训练集的预测情况。

# training set resulty_predicted = clf.predict(X_train)#report #print(metrics.classification_report(y_train,y_predicted))import numpy as npnp.mean(y_predicted == y_train)0.99604661023482433

保存结果

# write the outputout_file = open("pred.csv","w")out_file.write("ArticleId,Labels\n")id = 64858for i in xrange(pred_y.shape[0]): label = list(mb.classes_[np.where(pred_y[i,:]==1)[0]].astype("int")) label = " ".join(map(str,label)) if label == "": # if the label is empty label = "103" out_file.write(str(id+i)+","+label+"\n")out_file.close()One-Vs-One策略

One-Vs-One策略即是两两类别之间建立一个判别式,这样,总共需要K(K−1)/2K(K−1)/2个判别式,最后通过投票的方式确定样本所属类别。

多类别分类学习

from sklearn import datasetsfrom sklearn.multiclass import OneVsOneClassifierfrom sklearn.svm import LinearSVCiris = datasets.load_iris()X,y = iris.data,iris.targetOneVsOneClassifier(LinearSVC(random_state = 0)).fit(X,y).predict(X)array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])参考文献

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 文本分类
    +关注

    关注

    0

    文章

    18

    浏览量

    7259

原文标题:使用scikit-learn实现多类别及多标签分类算法

文章出处:【微信号:AI_shequ,微信公众号:人工智能爱好者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Python机器学习库谈Scikit-learn技术

    Scikit-learn API内置了各种toy和real-world数据集[1]。这些可以便捷地通过一行代码访问,如果你正在学习或只是想快速尝试新功能,这会非常有用。
    的头像 发表于 08-27 17:34 2877次阅读
    Python机器学习库谈<b class='flag-5'>Scikit-learn</b>技术

    pyhanlp文本分类与情感分析

    得到一个分类器,利用该分类器,我们就可以进行文本分类了。IClassifier classifier = new NaiveBayesClassifier(model);目前分类器接口
    发表于 02-20 15:37

    通用Python机器学习库scikit-learn

    《利用Python进行数据分析》 134 scikit-learn介绍
    发表于 10-25 07:58

    TensorFlow的CNN文本分类

    在TensorFlow中实现CNN进行文本分类(译)
    发表于 10-31 09:27

    NLPIR平台在文本分类方面的技术解析

    一下NLPIR大数据语义智能分析系统是怎样实现文本分类的。NLPIR大数据语义智能分析平台的文本分类有两种模式:专家规则分类与机器学习分类。专家规则
    发表于 11-18 17:46

    基于Python的scikit-learn编程实例

    scikit-learn 是机器学习领域非常热门的一个开源库,基于Python 语言写成。可以免费使用。 网址: 上面有很多的教程,编程实例。而且还做了很好的总结,下面这张图基本概括了传统机器学习
    发表于 11-15 19:39 1522次阅读

    scikit-learn K近邻法类库使用的经验总结

    本文对scikit-learn中KNN相关的类库使用做了一个总结,主要关注于类库调参时的一个经验总结,且非常详细地介绍了类库的参数含义。
    的头像 发表于 01-13 11:49 2929次阅读
    <b class='flag-5'>scikit-learn</b> K近邻法类库使用的经验总结

    textCNN论文与原理——短文本分类

    包是处理图片的torchvision,而处理文本的少有提及,快速处理文本数据的包也是有的,那就是torchtext[1]。下面还是结合上一个案例:【深度学习】textCNN论文与原理——短文本分类(基于pytorch)[2],使
    的头像 发表于 12-31 10:08 2249次阅读
    textCNN论文与原理——短<b class='flag-5'>文本分类</b>

    基于Python的scikit-learn包实现机器学习

    基于Python的scikit-learn包实现机器学习。
    发表于 03-26 09:42 11次下载
    基于Python的<b class='flag-5'>scikit-learn</b>包实现机器学习

    基于双通道词向量的卷积胶囊网络文本分类算法

    的词向量与基于特定文本分类任务扩展的语境词向量作为神经网络的2个输入通道,并采用具有动态路由机制的卷积胶囊网络模型进行文本分类。在多个英文数据集上的实验结果表明,双通道的词向量训练方式优于单通道策略,与LSTM、RAE、 M
    发表于 05-24 15:07 6次下载

    基于LSTM的表示学习-文本分类模型

    文本表示和分类是自然语言理解领域的研究热点。目前已有很多文本分类方法,包括卷积网络、递归网络、自注意力机制以及它们的结合。但是,复杂的网络并不能从根本上提高文本分类的性能,好的
    发表于 06-15 16:17 18次下载

    基于新型文本块分割法的简历解析

    近些年,基于神经网络的文本分类器和词嵌入在自然语言处理中被广泛应用。然而,传统的简历解析器采用基于关键字的模糊匹配或正则表达式来进行文本块分割。文中提岀了一种基于神经网络文本分类器和词
    发表于 06-16 11:47 17次下载

    Scikit-learn机器学习库的概念及工作原理

    作为一个适用于 Python 编程语言的机器学习 (ML) 库,Scikit-learn 拥有大量算法,可供程序员和数据科学家在机器学习模型中轻松部署。
    的头像 发表于 09-30 11:00 1068次阅读

    深度学习——如何用LSTM进行文本分类

    简介 主要内容包括 如何将文本处理为Tensorflow LSTM的输入 如何定义LSTM 用训练好的LSTM进行文本分类 代码 导入相关库 #coding=utf-8 import
    的头像 发表于 10-21 09:57 1097次阅读

    NLP中的迁移学习:利用预训练模型进行文本分类

    迁移学习彻底改变了自然语言处理(NLP)领域,允许从业者利用预先训练的模型来完成自己的任务,从而大大减少了训练时间和计算资源。在本文中,我们将讨论迁移学习的概念,探索一些流行的预训练模型,并通过实际示例演示如何使用这些模型进行文本分类。我们将使用拥抱面转换器库来实现。
    发表于 06-14 09:30 311次阅读