【问题标题】:Scikit-Learn/Python text classficationScikit-Learn/Python 文本分类
【发布时间】:2018-07-03 07:11:55
【问题描述】:

我正在使用 Scikit-learn 进行文本分类。我使用朴素贝叶斯分类将非结构化文本(下面数据集中的详细信息列)分类为一组标记的目标(类别),我得到了测试数据的准确性,但是有人可以告诉我如何打印,到哪个每个非结构化文本(来自下面数据集中的详细信息列)属于哪个类别?

这是我的示例数据集的样子。

Details                                     |Category
-------------------------------------------------------------                                
Tanishq Jwellery Bangalore                  |jwellery
ODESK***BAL-28APR13                         |Others
AEGON RELIGARE LIFE IN                      |Others
INTERNET PAYMENT #999999                    |Transfer in for Card Payment
WWW.VISTAPRINT.IN                           |Others
Khazana Jwellery                            |jwellery
INTERNET PAYMENT #999999                    |Transfer in for Card Payment
Indian Oil                                  |Fuel
Touch foot wear                             |Clothing

这是我的代码的一部分:

import pandas as pd
import numpy as np
import scipy as sp

from sklearn.model_selection import train_test_split 
u_cols = ['Details','Category'] 
k= pd.read_csv('mydatset.csv', delimiter='\t',usecols = u_cols)
data=k[1:1000]
target_one=data['Category']
from sklearn.cross_validation import train_test_split

def train(classifier, X, y):
    X_train, X_test, y_train, y_test = 
    train_test_split(data.Details.values.astype('U'), target_one, 
    test_size=0.50, random_state=33)

    classifier.fit(X_train, y_train)
    print ("Accuracy: %s" % classifier.score(X_test, y_test))
    return classifier

from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer

trial1 = Pipeline([('vectorizer', TfidfVectorizer()),
                 ('classifier', MultinomialNB())])

train(trial1, data.Details.values.astype('U'), target_one)

【问题讨论】:

  • 请不要将数据样本更改为图像。那我们怎么复制呢?
  • 好的,对不起先生,这是我的第一个问题。

标签: python scikit-learn


【解决方案1】:

您需要将返回的分类器存储到某个对象,然后对其调用 predict()。 像这样的:

trained_clf = train(trial1, data.Details.values.astype('U'), target_one)

predictions = trained_clf.predict(unstructured_data.Details.values.astype('U'))

更新:- 如果您在谈论 train() 函数内部的准确性,那么您可以使用以下内容打印预测类别:

def train(classifier, X, y):
    ...
    ...
    print ("Accuracy: %s" % classifier.score(X_test, y_test))
    print ("Predictions: %s" % classifier.predict(X_test)


    return classifier

【讨论】:

  • 我可以打印准确度,但不能打印每个文本(详细信息列)所属的类别。
  • 非常感谢您的回答,但准确性部分已经开始工作。我的意思是,如果我明确传递一行用于交叉验证详细信息列中的文本属于哪个类别,我将如何检查它?
  • @Vichu 我添加了print ("Predictions: %s" % classifier.predict(X_test) 行,它将打印您的测试数据的预测?有没有其他想要预测的数据,那就按照我上面的原始代码吧。
猜你喜欢
  • 2018-07-14
  • 2018-02-11
  • 2014-12-31
  • 2016-05-16
  • 1970-01-01
  • 2018-01-27
  • 2016-04-24
  • 2019-04-01
  • 2017-08-05
相关资源
最近更新 更多