使用scikit-learn

时间:2019-02-08 01:54:20

标签: scikit-learn pipeline multilabel-classification

我有一个使用scikit-learn管道的多标签预测。它在内部测试和获取每个标签预测的指标方面均正常工作。但是,我很难获得正确的数据输出结构。当我在看不见/外部的数据上运行代码时,它显然通过了对每个标签的预测,但替换了同一列中的值。所以我只得到一列预测。

此数据集涉及20多个标签(类别),并且是NLP模型的一部分。每个标签都是二进制的(0或1)。我是新手,非常感谢您的帮助。谢谢!

代码的三个部分:(1)管道,(2)用于带有拟合/预测的测试/验证数据循环,以及(3)尝试对外部数据的预测函数进行编码。

1)管道:

SVC_pipeline = Pipeline([
                ('tfidf', 
TfidfVectorizer(tokenizer=LemmaTokenizer(), min_df=8)),
                ('clf', OneVsRestClassifier(LinearSVC(), n_jobs=6)),
            ])

2)For循环:

for category in categories:
    print('processing {}'.format(category))
    # train
    SVC_pipeline.fit(X_train, train[category])
    # test
    prediction = SVC_pipeline.predict(X_test)
    print('Test accuracy is               
{}'.format(accuracy_score(test[category], prediction)))

3)预测外部数据:

doctext = sampdf['doc_text']
pred = SVC_pipeline.predict(doctext)

也尝试过:

for category in categories:
    print('... Processing {}'.format(category))
    svcpredict = SVC_pipeline.predict(testthis)
    np.savetxt("/Users/.../Dropbox/.../svcpredicts.csv", svcpredict)

我还尝试了其他一些其他变体,但是它们都具有相同的结果。这些指标贯穿所有标签,并为我提供了每个类别的不同指标。但是输出只给了我一列预测。

谢谢!

0 个答案:

没有答案