sklearn中的損失函數


 

python機器學習-乳腺癌細胞挖掘(博主親自錄制視頻)

 

https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campaign=commission&utm_source=cp-400000000398149&utm_medium=share

 

 

原文鏈接

https://www.cnblogs.com/nolonely/p/7008952.html

各種損失函數

損失函數或代價函數來度量給定的模型(一次)預測不一致的程度

損失函數的一般形式:

風險函數:度量平均意義下模型預測結果的好壞

損失函數分類:

Zero-one Loss,Square Loss,Hinge Loss,Logistic Loss,Log Loss或Cross-entropy Loss,hamming_loss

分類器中常用的損失函數:

Zero-One Loss

該函數計算nsamples個樣本上的0-1分類損失(L0-1)的和或者平均值。默認情況下,返回的是所以樣本上的損失的平均損失,把參數normalize設置為False,就可以返回損失值和

在多標簽分類問題中,如果預測的標簽子集和真實的標簽子集嚴格匹配,zero_one_loss函數給出得分為1,如果沒有任何的誤差,得分為0

from sklearn.metrics import zero_one_loss
import numpy as np
#二分類問題
y_pred=[1,2,3,4]
y_true=[2,2,3,4]
print(zero_one_loss(y_true,y_pred))
print(zero_one_loss(y_true,y_pred,normalize=False))
#多分類標簽問題
print(zero_one_loss(np.array([[0,1],[1,1]]),np.ones((2,2))))
print(zero_one_loss(np.array([[0,1],[1,1]]),np.ones((2,2)),normalize=False))

#結果:
#0.25
#1
#0.5
#1

Hinge Loss

該損失函數通常被用於最大間隔分類器,比如假定類標簽+1和-1,y:是真正的類標簽,w是decision_function輸出的預測到的決策,這樣,hinge loss 的定義如下:

如果標簽個數多於2個,hinge_loss函數依據如下方法計算:如果y_w是對真是類標簽的預測,並且y_t是對所有其他類標簽的預測里邊的最大值,multiclass hinge loss定義如下:

下面的代碼展示了用hinge_loss函數度量SVM分類器在二元分類問題中的使用方法:

from sklearn import svm
from sklearn.metrics import hinge_loss
X=[[0],[1]]
y=[-1,1]
est=svm.LinearSVC(random_state=0)
print(est.fit(X,y))
pred_decision=est.decision_function([[-2],[3],[0.5]])
print(pred_decision)
print(hinge_loss([-1,1,1],pred_decision))

#結果
#LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
     intercept_scaling=1, loss='squared_hinge', max_iter=1000,
     multi_class='ovr', penalty='l2', random_state=0, tol=0.0001,
     verbose=0)
#[-2.18177262  2.36361684  0.09092211]
#0.303025963688

Log Loss(對數損失)或者Cross-entropy Loss(交叉熵損失)

在二分類時,真是標簽集合為{0,1},而分類器預測得到的概率分布為p=Pr(y=1)

每一個樣本的對數損失就是在給定真是樣本標簽的條件下,分類器的負對數思然函數,如下所示:

當某個樣本的真實標簽y=1時,Loss=-log(p),所以分類器的預測概率p=Pr(y=1)的概率越大,則損失越小;如果p=Pr(y=1)的概率越小,則分類損失就越大,對於真是標簽y=0,Loss=-log(1-p),所以分類器的預測概率p=Pr(y=1)的概率越大,則損失越大

多分類跟這個類似,不在重復

  

#Log Loss
from sklearn.metrics import log_loss
y_true=[0,0,1,1]
y_pred=[[0.9,0.1],[0.8,0.2],[0.3,0.7],[0.01,0.99]]
print(log_loss(y_true,y_pred))

#0.173807336691

Hamming Loss,計算兩個樣本集合之間的平均漢明距離

 

#hamming_loss
from sklearn.metrics import hamming_loss
y_pred=[1,2,3,4]
y_true=[2,2,3,4]
print(hamming_loss(y_true,y_pred))

#0.25

 

 https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 歡迎關注博主主頁,學習python視頻資源,還有大量免費python經典文章)


  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM