#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. Есть идеи, как отсортировать массив в алфавитном порядке по имени метки?