我正在使用一个测试列表和一个预测列表,其中包含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,对我来说似乎不对。我使用该函数的方式错误还是应该使用其他实现?
答案 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))
我仍然是机器学习的新手,所以要加一点盐。