【问题标题】:scikit-learn predict() new datascikit-learn predict() 新数据
【发布时间】:2021-11-22 10:55:00
【问题描述】:

我对来自scikit-learnpredict() 函数有疑问。我正在尝试通过测试数据来验证我训练有素的分类器,这些数据不在训练数据中并且也有不同的标签。所以我基本上想要分类器的输出是:“新数据是不可预测的”。我该如何实现?

现在,分类器只是试图用完全不同的标签来预测新数据上的训练标签。你能帮帮我吗?!

我的分类器管道:

text_clf_NB = Pipeline([('vect', vects_NB),
 ('tfidf', tf_idf_NB),
 ('clf', classifier('NB')) # choose classifier
])

我的预测:

pred_NB = text_clf_NB.fit(X_train, Y_train).predict(X_others)

X_others 有一个带有未训练标签的新案例,我希望分类器注意到,这是一个与训练案例不相似的案例,而不仅仅是预测训练案例中最可能的标签是什么新案例。

【问题讨论】:

  • 分类器在分类/预测新数据时不看标签。您应该只检查标签是否不在您训练模型的标签列表中
  • 是的,它不在我训练过的模型的标签中。不,我不希望分类器查看标签。但我希望分类器注意到,当一个新案例与训练案例完全不相似时,而不仅仅是试图给它贴上任何标签。
  • 因为它总是试图预测任何经过训练的标签。从来没有,新的案例根本不相似,所以没有合适的标签
  • 能否请您向我们展示您正在尝试使用代码 sn-p 的内容,以便我们可以帮助您更好地解决问题?
  • 我确实添加了一些代码。我认为 predict() 函数不适合我的目的。我只是不知道如何解决我的问题。

标签: python machine-learning scikit-learn predict


【解决方案1】:

好的,现在解决了这样的问题。这是一个合理的方法吗?

# prediction probabilites
pred_NB = text_clf_NB.fit(X_train, Y_train).predict_proba(X_test)

# prediction depending on probs
new_pred =[]
case = 0
for pairs in pred_NB: 
        if max(pairs) >= 0.995:
            pred = text_clf_NB.fit(X_train, Y_train).predict([X_test[case]])
        elif max(pairs) < 0.995:
            pred = (["No sufficient similarity to trained cases"])
        case += 1
        new_pred.extend(pred)
            
new_pred 

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 2020-02-21
    • 2016-09-03
    • 2020-07-25
    • 2020-10-20
    • 2021-06-15
    • 2018-12-31
    • 2015-04-14
    • 2015-04-07
    相关资源
    最近更新 更多