我有一个使用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)
我还尝试了其他一些其他变体,但是它们都具有相同的结果。这些指标贯穿所有标签,并为我提供了每个类别的不同指标。但是输出只给了我一列预测。
谢谢!