【问题标题】:why are predictions of the multi label model blank?为什么多标签模型的预测是空白的?
【发布时间】:2020-07-22 18:25:36
【问题描述】:

我正在尝试做多标签分类;数据集主要是标题列包含帖子的标题,标签列包含标签。帖子的标签数量不固定。数据集是这样的:

而我写的代码是:

X_train, y_train = train['title'].values, train['tags'].values
X_val, y_val = validation['title'].values, validation['tags'].values
##I did some preprocessing on the data(eg.lowering, removing stop words etc.) then:
tfidf=TfidfVectorizer(ngram_range=(1,2),min_df=2,max_df=.9,token_pattern='(\S+)').fit(X_train)

X_train=tfidf.transform(X_train)
X_test=tfidf.transform(X_test) 
X_val=tfidf.transform(X_val) 
from sklearn.preprocessing import MultiLabelBinarizer
mlb = MultiLabelBinarizer(classes=sorted(tags_counts.keys()))##tags_counts.keys are all the tags contained in the dataset
y_train = mlb.fit_transform(y_train)
y_val = mlb.fit_transform(y_val)
model=OneVsRestClassifier(LogisticRegression(C=10)).fit(X_train_tfidf, y_train) 
y_val_predicted_labels_tfidf = classifier_tfidf.predict(X_val[0])

这个预测给了我一个全零的数组,这意味着它没有预测这个记录中的任何标签,当我使用逆向获取标签时,如下所示:


我得到了预测空白[()]。有什么想法吗?

【问题讨论】:

    标签: python nlp logistic-regression predict multilabel-classification


    【解决方案1】:

    如果您运行y_val_predicted_probabilities_tfidf = classifier_tfidf.predict_proba(X_val),您会看到对于预测标签为空白的数据点,所有标签的预测概率均小于阈值(默认为 0.5)。

    如果你想让分类器预测至少一个标签,你可以自己编写代码输出所有输出概率中最大值对应的标签。 ID 看起来像这样:

    y_val_predicted_probabilities_tfidf = classifier_tfidf.predict_proba(X_val)
    y_val_predicted_labels_tfidf = classifier_tfidf.predict(X_val)
    for i in range(len(X_val)):
        if len(y_val_predicted_labels_tfidf[i])==0:
            max_idx= np.argmax(y_val_predicted_probabilities_tfidf[i])
            y_val_predicted_labels_tfidf[i].append(max_idx)
    

    或者,您也可以尝试将阈值降低到适当的值:

    y_val_predicted_labels_tfidf = np.where(y_val_predicted_probabilities_tfidf > threshold, 1, 0)
    

    【讨论】:

    • 感谢您的评论,但您能告诉我 0.5 的阈值是多少吗?是用于 OneVsRestClassifier 还是逻辑?因为我想尝试交替三分法
    • 您可以简单地写output = np.where(y_val_predicted_probabilities_tfidf > threshold, 1, 0) 并设置您自己的自定义阈值以获得所需的输出。
    猜你喜欢
    • 1970-01-01
    • 2020-01-17
    • 2019-05-29
    • 2016-01-30
    • 2020-07-17
    • 2021-04-15
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多