Вопрос или проблема
Мне просто любопытно, и я хотел бы знать, возможно ли получить оценки для каждого предсказания в модели многоклассовой классификации. Если это возможно, как я могу реализовать это, чтобы делать предсказания на моих оригинальных наборах данных, а не на 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, вам понадобятся некоторые шаги для обработки ваших данных и вывода результатов. Давайте рассмотрим, как это сделать на конкретном примере с учетом вашего кода.
Шаги для получения вероятностей предсказаний:
-
Обучение модели: Вы уже обучили свою модель на тренировочных данных, что является хорошим первым шагом.
-
Предсказание вероятностей: Вместо того чтобы просто использовать метод
predict()
, который возвращает классы, вы можете использовать методpredict_proba()
, который возвращает вероятности для каждого класса для каждого образца. Таким образом, для каждого наблюдения в ваших данных вы получите массив вероятностей, который показывает, насколько вероятно, что это наблюдение относится к каждому классу. -
Интеграция предсказаний и вероятностей в ваши данные: Полученные вероятности можно добавить в ваш исходный 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, чтобы в итоге получить все данные в одном месте.
Заключение
Теперь у вас есть все необходимые инструменты для получения вероятностей для каждой классификации в вашем наборе данных. Этот подход позволит вам эффективно использовать предсказания моделей в практических задачах, таких как анализ качества моделей и дальнейшая интерпретация результатов. Проверьте, чтобы ваши данные были предварительно обработаны, и используйте правильный формат, чтобы избежать сложностей в работе с методами модели.