Как я могу получить оценки каждого прогноза для многоклассовой модели классификации?

Вопрос или проблема

Мне просто любопытно, и я хотел бы знать, возможно ли получить оценки для каждого предсказания в модели многоклассовой классификации. Если это возможно, как я могу реализовать это, чтобы делать предсказания на моих оригинальных наборах данных, а не на test_data, и вывести оценки каждого предсказания в новом столбце.

Я сделал предсказания на моем оригинальном наборе данных, чтобы получить столбцы предсказаний с именем [predictions_final]. Я также хочу сделать предсказания на оригинальном наборе данных, чтобы получить оценки или вероятности, которые будут в другом столбце рядом с предсказанием и моим оригинальным набором данных.

######## НИЖЕ ПРИМЕР КОДА

from sklearn.multiclass import OneVsRestClassifier

from sklearn.ensemble import RandomForestClassifier

from sklearn.metrics import roc_curve, auc

import scikitplot as skplt

import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X3, y1, test_size=0.2, random_state=10)

RFc = OneVsRestClassifier(RandomForestClassifier(max_features=0.2))

RFc.fit(X_train, y_train)

y_pred = RFc.predict(X_test)

pred_prob = RFc.predict_proba(X_test)

skplt.metrics.plot_roc_curve(y_test, pred_prob)
plt.show()

y_pred = RFc.predict(X_test)

from sklearn.metrics import classification_report, confusion_matrix
print(classification_report(y_test, y_pred))

preded = RFc.predict(X_test)

RFc.predict_proba(X_test)

Final = RFc.predict(X3)

X3['predictions_final'] = Final
```

например:

model.fit(x, y, epochs=3, validation_split=0.2)
prediction = model.predict(x_1)

это выведет оценки для каждого класса, если я не ошибаюсь

print(prediction[0])
>>[[0.1, 0.7, 0.2, 0.5]] "если у них 4 класса"
>>np.argmax(prediction[0]) "чтобы получить фактический класс"

я не знаю, отвечает ли это на ваш вопрос

Ответ или решение

Для того чтобы получить вероятность каждого предсказания в многоклассовой классификации с использованием модели, такой как RandomForestClassifier в комбинации с OneVsRestClassifier, вам понадобятся некоторые шаги для обработки ваших данных и вывода результатов. Давайте рассмотрим, как это сделать на конкретном примере с учетом вашего кода.

Шаги для получения вероятностей предсказаний:

  1. Обучение модели: Вы уже обучили свою модель на тренировочных данных, что является хорошим первым шагом.

  2. Предсказание вероятностей: Вместо того чтобы просто использовать метод predict(), который возвращает классы, вы можете использовать метод predict_proba(), который возвращает вероятности для каждого класса для каждого образца. Таким образом, для каждого наблюдения в ваших данных вы получите массив вероятностей, который показывает, насколько вероятно, что это наблюдение относится к каждому классу.

  3. Интеграция предсказаний и вероятностей в ваши данные: Полученные вероятности можно добавить в ваш исходный DataFrame, создавая новый столбец, который будет содержать эти значения.

Вот как это можно сделать, основываясь на вашем примере:

import pandas as pd
from sklearn.multiclass import OneVsRestClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

# Ваши данные
X3 = ...  # Исходные данные, например, DataFrame
y1 = ...  # Целевые переменные

# Разделение данных на тренировочные и тестовые
X_train, X_test, y_train, y_test = train_test_split(X3, y1, test_size=0.2, random_state=10)

# Обучение модели
RF_classifier = OneVsRestClassifier(RandomForestClassifier(max_features=0.2))
RF_classifier.fit(X_train, y_train)

# Предсказание вероятностей для оригинального набора данных
pred_prob = RF_classifier.predict_proba(X3)

# Получение предсказаний классов
final_predictions = RF_classifier.predict(X3)

# Добавление столбцов в ваш исходный DataFrame
X3['predictions_final'] = final_predictions

# Преобразование вероятностей в DataFrame для добавления к X3
prob_df = pd.DataFrame(pred_prob, columns=[f'prob_class_{i}' for i in range(pred_prob.shape[1])])

# Объединение DataFrame с вероятностями в основной DataFrame
X3 = pd.concat([X3, prob_df], axis=1)

# Теперь X3 содержит как предсказания, так и вероятности для каждого класса
print(X3.head())

Объяснение кода:

  • Однократное разделение данных: Мы делим ваши данные для обучения и тестирования, используя train_test_split.
  • Модель Random Forest: Используем OneVsRestClassifier, чтобы справиться с многоклассовой классификацией.
  • Получение вероятностей: Метод predict_proba используется для получения вероятностей для каждого класса.
  • Добавление столбцов: Мы создаем новый DataFrame для вероятностей и объединяем его с исходным DataFrame, чтобы в итоге получить все данные в одном месте.

Заключение

Теперь у вас есть все необходимые инструменты для получения вероятностей для каждой классификации в вашем наборе данных. Этот подход позволит вам эффективно использовать предсказания моделей в практических задачах, таких как анализ качества моделей и дальнейшая интерпретация результатов. Проверьте, чтобы ваши данные были предварительно обработаны, и используйте правильный формат, чтобы избежать сложностей в работе с методами модели.

Оцените материал
Добавить комментарий

Капча загружается...