python代碼html
sklearn.metrics.
log_loss
(y_true, y_pred, eps=1e-15, normalize=True, sample_weight=None, labels=None)[source]python
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.htmlgit
import numpy as np from sklearn.metrics import log_loss value=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)
https://blog.csdn.net/laolu1573/article/details/82925747(轉載)github
定義:
−(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表示模型預測爲正樣本的機率。ide
可視化:
下圖展現了lable=1時對數損失值的範圍。當預測機率接近1時,對數損失緩慢降低。但隨着預測機率的下降,對數損失迅速增長。對數損失對兩種類型的錯誤都會進行處罰,尤爲是那些置信度很高的錯誤預測!學習
Code:
def logloss(true_label, predicted_prob):
if true_label == 1:
return -log(predicted_prob)
else:
return -log(1 - predicted_prob)
1
2
3
4
5
一個樣本集里正樣本出現的機率爲p,若是咱們把每一個樣本的預測值都置爲p,那麼logloss是多少呢?spa
很顯然
若p=0.1,logloss=0.325.net
若p=0.2,logloss=0.5003d
若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以上,就說明模型是失敗的。