0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳細(xì)解析scikit-learn進(jìn)行文本分類

lviY_AI_shequ ? 2017-12-27 08:36 ? 次閱讀

使用scikit-learn進(jìn)行文本分類

多標(biāo)簽分類格式

對(duì)于多標(biāo)簽分類問(wèn)題而言,一個(gè)樣本可能同時(shí)屬于多個(gè)類別。如一個(gè)新聞屬于多個(gè)話題。這種情況下,因變量yy需要使用一個(gè)矩陣表達(dá)出來(lái)。

而多類別分類指的是y的可能取值大于2,但是y所屬類別是唯一的。它與多標(biāo)簽分類問(wèn)題是有嚴(yán)格區(qū)別的。所有的scikit-learn分類器都是默認(rèn)支持多類別分類的。但是,當(dāng)你需要自己修改算法的時(shí)候,也是可以使用scikit-learn實(shí)現(xiàn)多類別分類的前期數(shù)據(jù)準(zhǔn)備的。

多類別或多標(biāo)簽分類問(wèn)題,有兩種構(gòu)建分類器的策略:One-vs-All及One-vs-One。下面,通過(guò)一些例子進(jìn)行演示如何實(shí)現(xiàn)這兩類策略。
詳細(xì)解析scikit-learn進(jìn)行文本分類

#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策略

這個(gè)策略同時(shí)也稱為One-vs-all策略,即通過(guò)構(gòu)造K個(gè)判別式(K為類別的個(gè)數(shù)),第ii個(gè)判別式將樣本歸為第ii個(gè)類別或非第ii個(gè)類別。這種分類方法雖然比較耗時(shí)間,但是能夠通過(guò)每個(gè)類別對(duì)應(yīng)的判別式獲得關(guān)于該類別的直觀理解(如文本分類中每個(gè)話題可以通過(guò)只屬于該類別的高頻特征詞區(qū)分)。

多類別分類學(xué)習(xí)

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])

多標(biāo)簽分類學(xué)習(xí)

Kaggle上有一個(gè)關(guān)于多標(biāo)簽分類問(wèn)題的競(jìng)賽:Multi-label classification of printed media articles to topics(地址:https://www.kaggle.com/c/wise-2014)。

關(guān)于該競(jìng)賽的介紹如下:

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.

我們從該網(wǎng)站下載相應(yīng)的數(shù)據(jù),作為多標(biāo)簽分類的案例學(xué)習(xí)。

數(shù)據(jù)描述

這個(gè)文本數(shù)據(jù)集已經(jīng)用詞袋模型進(jìn)行形式化表示,共201561個(gè)特征詞,每個(gè)文本對(duì)應(yīng)一個(gè)或多個(gè)標(biāo)簽,共203個(gè)分類標(biāo)簽。該網(wǎng)站提供了兩種數(shù)據(jù)格式:ARFF和LIBSVM,ARFF格式的數(shù)據(jù)主要適用于weka,而LIBSVM格式適用于matlab中的LIBSVM模塊。這里,我們采用LIBSVM格式的數(shù)據(jù)。

數(shù)據(jù)的每一行以逗號(hào)分隔的整數(shù)序列開(kāi)頭,代表類別標(biāo)簽。緊接著是以\t分隔的id:value對(duì)。其中,id為特征詞的ID,value為特征詞在該文檔中的TF-IDF值。

形式如下。

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

數(shù)據(jù)載入

# 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)

模型擬合及預(yù)測(cè)

# 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)

模型評(píng)估

由于沒(méi)有關(guān)于測(cè)試集的真實(shí)標(biāo)簽,這里看看訓(xùn)練集的預(yù)測(cè)情況。

# 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

保存結(jié)果

# 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策略即是兩兩類別之間建立一個(gè)判別式,這樣,總共需要K(K?1)/2K(K?1)/2個(gè)判別式,最后通過(guò)投票的方式確定樣本所屬類別。

多類別分類學(xué)習(xí)

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])參考文獻(xiàn)

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 文本分類
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    7331

原文標(biāo)題:使用scikit-learn實(shí)現(xiàn)多類別及多標(biāo)簽分類算法

文章出處:【微信號(hào):AI_shequ,微信公眾號(hào):人工智能愛(ài)好者社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Python機(jī)器學(xué)習(xí)庫(kù)談Scikit-learn技術(shù)

    Scikit-learn API內(nèi)置了各種toy和real-world數(shù)據(jù)集[1]。這些可以便捷地通過(guò)一行代碼訪問(wèn),如果你正在學(xué)習(xí)或只是想快速嘗試新功能,這會(huì)非常有用。
    的頭像 發(fā)表于 08-27 17:34 ?3159次閱讀
    Python機(jī)器學(xué)習(xí)庫(kù)談<b class='flag-5'>Scikit-learn</b>技術(shù)

    通用Python機(jī)器學(xué)習(xí)庫(kù)scikit-learn

    《利用Python進(jìn)行數(shù)據(jù)分析》 134 scikit-learn介紹
    發(fā)表于 10-25 07:58

    TensorFlow的CNN文本分類

    在TensorFlow中實(shí)現(xiàn)CNN進(jìn)行文本分類(譯)
    發(fā)表于 10-31 09:27

    NLPIR平臺(tái)在文本分類方面的技術(shù)解析

    一下NLPIR大數(shù)據(jù)語(yǔ)義智能分析系統(tǒng)是怎樣實(shí)現(xiàn)文本分類的。NLPIR大數(shù)據(jù)語(yǔ)義智能分析平臺(tái)的文本分類有兩種模式:專家規(guī)則分類與機(jī)器學(xué)習(xí)分類。專家規(guī)則
    發(fā)表于 11-18 17:46

    基于Python的scikit-learn編程實(shí)例

    scikit-learn 是機(jī)器學(xué)習(xí)領(lǐng)域非常熱門(mén)的一個(gè)開(kāi)源庫(kù),基于Python 語(yǔ)言寫(xiě)成??梢悦赓M(fèi)使用。 網(wǎng)址: 上面有很多的教程,編程實(shí)例。而且還做了很好的總結(jié),下面這張圖基本概括了傳統(tǒng)機(jī)器學(xué)習(xí)
    發(fā)表于 11-15 19:39 ?1691次閱讀

    scikit-learn K近鄰法類庫(kù)使用的經(jīng)驗(yàn)總結(jié)

    本文對(duì)scikit-learn中KNN相關(guān)的類庫(kù)使用做了一個(gè)總結(jié),主要關(guān)注于類庫(kù)調(diào)參時(shí)的一個(gè)經(jīng)驗(yàn)總結(jié),且非常詳細(xì)地介紹了類庫(kù)的參數(shù)含義。
    的頭像 發(fā)表于 01-13 11:49 ?3256次閱讀
    <b class='flag-5'>scikit-learn</b> K近鄰法類庫(kù)使用的經(jīng)驗(yàn)總結(jié)

    textCNN論文與原理——短文本分類

    是處理圖片的torchvision,而處理文本的少有提及,快速處理文本數(shù)據(jù)的包也是有的,那就是torchtext[1]。下面還是結(jié)合上一個(gè)案例:【深度學(xué)習(xí)】textCNN論文與原理——短文本分類(基于pytorch)[2],使用
    的頭像 發(fā)表于 12-31 10:08 ?2545次閱讀
    textCNN論文與原理——短<b class='flag-5'>文本分類</b>

    基于Python的scikit-learn包實(shí)現(xiàn)機(jī)器學(xué)習(xí)

    基于Python的scikit-learn包實(shí)現(xiàn)機(jī)器學(xué)習(xí)。
    發(fā)表于 03-26 09:42 ?11次下載
    基于Python的<b class='flag-5'>scikit-learn</b>包實(shí)現(xiàn)機(jī)器學(xué)習(xí)

    基于雙通道詞向量的卷積膠囊網(wǎng)絡(luò)文本分類算法

    的詞向量與基于特定文本分類任務(wù)擴(kuò)展的語(yǔ)境詞向量作為神經(jīng)網(wǎng)絡(luò)的2個(gè)輸入通道,并采用具有動(dòng)態(tài)路由機(jī)制的卷積膠囊網(wǎng)絡(luò)模型進(jìn)行文本分類。在多個(gè)英文數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明,雙通道的詞向量訓(xùn)練方式優(yōu)于單通道策略,與LSTM、RAE、 M
    發(fā)表于 05-24 15:07 ?6次下載

    基于LSTM的表示學(xué)習(xí)-文本分類模型

    文本表示和分類是自然語(yǔ)言理解領(lǐng)域的研究熱點(diǎn)。目前已有很多文本分類方法,包括卷積網(wǎng)絡(luò)、遞歸網(wǎng)絡(luò)、自注意力機(jī)制以及它們的結(jié)合。但是,復(fù)雜的網(wǎng)絡(luò)并不能從根本上提高文本分類的性能,好的
    發(fā)表于 06-15 16:17 ?18次下載

    Scikit-learn機(jī)器學(xué)習(xí)庫(kù)的概念及工作原理

    作為一個(gè)適用于 Python 編程語(yǔ)言的機(jī)器學(xué)習(xí) (ML) 庫(kù),Scikit-learn 擁有大量算法,可供程序員和數(shù)據(jù)科學(xué)家在機(jī)器學(xué)習(xí)模型中輕松部署。
    的頭像 發(fā)表于 09-30 11:00 ?1486次閱讀

    深度學(xué)習(xí)——如何用LSTM進(jìn)行文本分類

    簡(jiǎn)介 主要內(nèi)容包括 如何將文本處理為T(mén)ensorflow LSTM的輸入 如何定義LSTM 用訓(xùn)練好的LSTM進(jìn)行文本分類 代碼 導(dǎo)入相關(guān)庫(kù) #coding=utf-8 import
    的頭像 發(fā)表于 10-21 09:57 ?1628次閱讀

    PyTorch文本分類任務(wù)的基本流程

    文本分類是NLP領(lǐng)域的較為容易的入門(mén)問(wèn)題,本文記錄文本分類任務(wù)的基本流程,大部分操作使用了**torch**和**torchtext**兩個(gè)庫(kù)。 ## 1. 文本數(shù)據(jù)預(yù)處理
    的頭像 發(fā)表于 02-22 14:23 ?1131次閱讀

    NLP中的遷移學(xué)習(xí):利用預(yù)訓(xùn)練模型進(jìn)行文本分類

    遷移學(xué)習(xí)徹底改變了自然語(yǔ)言處理(NLP)領(lǐng)域,允許從業(yè)者利用預(yù)先訓(xùn)練的模型來(lái)完成自己的任務(wù),從而大大減少了訓(xùn)練時(shí)間和計(jì)算資源。在本文中,我們將討論遷移學(xué)習(xí)的概念,探索一些流行的預(yù)訓(xùn)練模型,并通過(guò)實(shí)際示例演示如何使用這些模型進(jìn)行文本分類。我們將使用擁抱面轉(zhuǎn)換器庫(kù)來(lái)實(shí)現(xiàn)。
    發(fā)表于 06-14 09:30 ?459次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)在文本分類領(lǐng)域的應(yīng)用

    顯著成就后,也逐漸被引入到文本分類任務(wù)中。卷積神經(jīng)網(wǎng)絡(luò)通過(guò)模擬人類視覺(jué)系統(tǒng)的信息處理方式,能夠有效地提取文本中的局部特征,進(jìn)而實(shí)現(xiàn)高精度的文本分類。本文將對(duì)卷積神經(jīng)網(wǎng)絡(luò)在文本分類領(lǐng)域的
    的頭像 發(fā)表于 07-01 16:25 ?769次閱讀