首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >skmultiLearn分类器预测总是返回0

skmultiLearn分类器预测总是返回0
EN

Stack Overflow用户
提问于 2019-10-16 15:59:50
回答 1查看 156关注 0票数 2

我是skmultiLearn的新手,现在我用它来对“中文”文档进行多标签分类。训练数据集相当小(大约200个句子),我总共设置了6个类。即使我使用训练数据集中的句子,我也只能得到0,0,0,0,0,0作为预测结果,我能得到一些帮助吗?谢谢!

我的代码:

代码语言:javascript
复制
# Import BinaryRelevance from skmultilearn
from skmultilearn.problem_transform import BinaryRelevance

from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.svm import SVC
from scipy import sparse 
import jieba
import codecs
import numpy as np

from warnings import simplefilter
simplefilter(action='ignore', category=FutureWarning)

Q_list = []
L_list = []

# Read Sentence file
with codecs.open('multi-label-Q.txt',encoding='utf-8') as infile:
    for line in infile:
        Q_list.append(line[:-2])
infile.close()

# Read Label file
with open('multi-label-L.txt') as infile:
    for line in infile:
        tmp_l = line[:-1].split(',')
        L_list.append(tmp_l)
infile.close()

L_list = np.array(L_list)

L_Question_list = []

# Preprocess for Chinese sentences
for line in Q_list:
    seg_list = jieba.lcut(line, cut_all=False)
    q_addSpace = ''
    for w in seg_list:
        q_addSpace = q_addSpace + w + ' '
    L_Question_list.append(q_addSpace[:-1])


cv = CountVectorizer()
cv_fit=cv.fit_transform(L_Question_list)

transformer = TfidfTransformer()
tfidf = transformer.fit_transform(cv_fit)

M = sparse.lil_matrix((len(L_list),6), dtype=int)
for i,row in enumerate(L_list):
    count = 0
    for col in row:
        M[i, count] = col
        count += 1

# Setup the classifier
clf = BinaryRelevance(classifier=SVC())



# Train
clf.fit(tfidf, M)

# A sentence in train dataset
x_test = '偏头痛多发于什么年龄层?'
# Preprocess for Chinese sentence
seg_list = jieba.lcut(x_test, cut_all=False)
q_addSpace = ''
for w in seg_list:
    q_addSpace = q_addSpace + w + ' '
X_test = [q_addSpace]
cv_fit2=cv.transform(X_test)
tfidf2 = transformer.transform(cv_fit2)


# Predict
pred = clf.predict(tfidf2)
print(pred.todense())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-16 16:41:22

现在我明白了,原因是我有太多的单标签数据。

我使用了一些高价值的数据集,并得到了正确的结果。

因此,答案是:完善数据集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58408451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档