如何在python中预测和测试集之间计算二进制交叉熵?

时间:2019-01-15 22:39:43

标签: python machine-learning cross-entropy

我正在使用一个测试列表和一个预测列表,其中包含4000个元素(如本例中所示)

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

如何用python代码找到这2个列表之间的二进制交叉熵?我尝试使用sklearn的log_loss函数:

log_loss(test_list,prediction_list)

但是损失函数的输出就像10.5,对我来说似乎不对。我使用该函数的方式错误还是应该使用其他实现?

3 个答案:

答案 0 :(得分:0)

您正在正确使用它。二进制交叉熵的值是无界的-范围从0到无穷大。参见https://ml-cheatsheet.readthedocs.io/en/latest/loss_functions.html

答案 1 :(得分:0)

嘿,对于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] ...] 由于scikit实现中的eps,您看到的结果。

我假设您的projection_list是标签列表,因为很少会看到模型来预测0和1的概率。

答案 2 :(得分:0)

我假设您已经有了数据和标签,并且已将其分为训练和测试数据以及标签,并且可以使用以下方法获得预测列表。然后,您需要通过调用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))

我仍然是机器学习的新手,所以要加一点盐。