Как добавить вероятности в вывод model.predict?

#python #machine-learning #classification #text-classification

#python #машинное обучение #классификация #текст-классификация

Вопрос:

Я построил функционирующую модель классификации, следуя этому руководству.

В руководстве выводятся только предсказанные имена категорий. Я хочу, чтобы он выводил название категории и ее вероятность, и я хочу выводить категории только с определенной вероятностью. Например, я хочу, чтобы категории превышали .5

Это функция, используемая для доступа к модели:

 import pickle
import numpy as np
category_model_path="categorymodel.pkl"
category_transformer_path="categorytransformer.pkl"
sentiment_model_path="sentimentmodel.pkl"
sentiment_transformer_path="sentimenttransformer.pkl"

def get_top_k_predictions(model,X_test,k):
    
    # get probabilities instead of predicted labels, since we want to collect top 3
    np.set_printoptions(suppress=True)
    probs = model.predict_proba(X_test)

    # GET TOP K PREDICTIONS BY PROB - note these are just index
    best_n = np.argsort(probs, axis=1)[:,-k:]
    
    # GET CATEGORY OF PREDICTIONS
    preds=[[model.classes_[predicted_cat] for predicted_cat in prediction] for prediction in best_n]
    
    preds=[ item[::-1] for item in preds]
    
    return preds

category_loaded_model = pickle.load(open(category_model_path, 'rb'))
category_loaded_transformer = pickle.load(open(category_transformer_path, 'rb'))

sentiment_loaded_model = pickle.load(open(sentiment_model_path, 'rb'))
sentiment_loaded_transformer = pickle.load(open(sentiment_transformer_path, 'rb'))
 

Затем этот код используется для вызова функции:

 category_test_features=category_loaded_transformer.transform(["I absolutley loved the organization "])
get_top_k_predictions(category_loaded_model,category_test_features,2)
 

Это текущий вывод:

 [['Course Structure', 'Learning Materials']]
 

Вероятности вычисляются в функции для probs переменной. Я не знаю, как получить только те, которые превышают .5, и добавить их к preds выводу.

Ответ №1:

best_n Массив содержит индексы к массиву вероятностей probs . Вы можете использовать его так же, как и для получения меток. Вы можете получить кортежи с вероятностью метки следующим образом:

 preds = [
    [(model.classes_[predicted_cat], distribution[predicted_cat])
     for predicted_cat in prediction]
    for distribution, prediction in zip(probs, best_n)]
 

Если вы не хотите возвращать вероятности и хотите только их отфильтровать, вы можете сделать что-то вроде:

 preds=[
    [model.classes_[predicted_cat]
     for predicted_cat in prediction if distribution[predicted_cat] > 0.5]
    for distribution, prediction in zip(probs, best_n)]
 

Комментарии:

1. Есть идеи, как отсортировать массив в алфавитном порядке по имени метки?