(博主亲自录制视频)
python代码
sklearn.metrics.
log_loss
(y_true, y_pred, eps=1e-15, normalize=True, sample_weight=None, labels=None)
import numpy as npfrom sklearn.metrics import log_lossvalue=log_loss(["spam", "ham", "ham", "spam"],[[.1, .9], [.9, .1], [.8, .2], [.35, .65]])print("value:",value)def logloss(true_label, predicted_prob): if true_label == 1: return -np.log(predicted_prob) else: return -np.log(1 - predicted_prob)
(转载)
定义:
−(ylog(p)+(1−y)log(1−p)) -{(y\log(p) + (1 - y)\log(1 - p))}−(ylog(p)+(1−y)log(1−p))y yy表示样本的真实标签(1或-1),p pp表示模型预测为正样本的概率。
可视化:
下图展示了lable=1时对数损失值的范围。当预测概率接近1时,对数损失缓慢下降。但随着预测概率的降低,对数损失迅速增加。对数损失对两种类型的错误都会进行处罚,尤其是那些置信度很高的错误预测! Code:def logloss(true_label, predicted_prob): if true_label == 1: return -log(predicted_prob) else: return -log(1 - predicted_prob)12345一个样本集里正样本出现的概率为p,如果我们把每个样本的预测值都置为p,那么logloss是多少呢?很显然
若p=0.1,logloss=0.325若p=0.2,logloss=0.500
若p=0.3,logloss=0.611
若p=0.4,logloss=0.673
若p=0.5,logloss=0.693
若p=0.6,logloss=0.673
若p=0.7,logloss=0.611
若p=0.8,logloss=0.500
若p=0.9,logloss=0.325
所以最差的情况就是,正好是一半正样本一半负样本,此时你乱猜出的logloss是0.693。
所以只要loglss是在0.693以上,就说明模型是失败的。
欢迎关注博主主页,学习python视频资源