Как рассчитать двоичную перекрестную энтропию между предсказанным и тестовым набором в Python? - PullRequest
0 голосов
/ 16 января 2019

Я использую тестовый список и список прогнозирования, который содержит 4000 элементов, как в этом примере

      test_list=[1,0,0,1,0,.....]
prediction_list=[1,1,0,1,0......]

Как найти двоичную кросс-энтропию между этими двумя списками в терминах кода Python? Я попытался использовать функцию log_loss из sklearn:

log_loss(test_list,prediction_list)

но вывод функции потерь был как 10.5, что мне показалось не таким. Я неправильно использую функцию или мне нужно использовать другую реализацию?

Ответы [ 3 ]

0 голосов
/ 16 января 2019

Привет, для функции log_loss вы должны ввести вероятности предсказания 1 или 0, а не предсказанной метки. Потеря перекрестной энтропии не определена для вероятностей 0 и 1., поэтому ваш список прогнозов должен также: prediction_list = [0.8,0.4,0.3...] Предполагается, что вероятности для положительной метки. или это должно prediction_list = [[0.8,0.2],[0.4,0.6], [0.3,0.7] ...] Результат, который вы видите из-за eps в реализации scikit.

Я предполагаю, что ваш предикат_элемента является списком меток, потому что редко можно увидеть модель для прогнозирования вероятностей 0 и 1.

0 голосов
/ 16 января 2019

Я предполагаю, что у вас уже есть данные и лабораторные работы, и вы разделили их на обучающие и тестовые данные и метки, и вы получили список прогнозирования, используя следующий метод. Затем вам нужно получить вероятности из модели, позвонив по номеру clf.predict_proba(data_test), как показано ниже.

import numpy as np
from sklearn.metrics import log_loss
from sklearn.linear_model import LogisticRegression

#test_list = [1,0,0,1,0,.....]
#prediction_list = [1,1,0,1,0......]

# Model learning and prediction
clf = LogisticRegression()
prediction_list = clf.predict(data_test)
pred_probabilities = clf.predict_proba(data_test)

# Evaluation of the prediction
print("The binary cross entropy loss is : %f" % log_loss(labels_test, pred_probabilities))

Я все еще новичок в машинном обучении, поэтому возьмите это с крошкой соли.

0 голосов
/ 16 января 2019

Вы используете это правильно. Значения бинарной кроссентропии не ограничены - колеблются от 0 до бесконечности. См. https://ml -cheatsheet.readthedocs.io / en / latest / loss_functions.html

...