二分類問題的交叉熵函式和多分類問題的交叉熵函式

2021-08-29 20:52:49 字數 2010 閱讀 8846

在二分類問題中,損失函式為交叉熵損失函式。對於樣本(x,y)來講,x為樣本 y為對應的標籤。在二分類問題中,其取值的集合可能為,我們假設某個樣本的真實標籤為yt,該樣本的yt=1的概率為yp,則該樣本的損失函式為:

如果對於整個資料集上的模型而言:其損失函式就是所有樣本的點的損失函式的平均值。

在多分類問題中,損失函式也是交叉熵損失函式,對於樣本(x,y)來講,y是真實的標籤,**標籤為所有標籤的集合,我們假設有k個標籤值,第i個樣本**為第k個標籤的概率為pi,k,一共有n個樣本,則總的資料集損失函式為:

下面是二分類和多分類問題的**:利用sklearn庫編寫 

from sklearn.metrics import log_loss

from math import log

y_true = [0,0,1,1]

y_pred = [[.9,.1],[.8,.2],[.2,.8],[.3,.7]]

sk_log_loss = log_loss(y_true,y_pred)

print('loss by sklearn: %s.'% sk_log_loss)

loss = 0

for lable,prob in zip(y_true,y_pred)

loss -= (lable * log(prob[0])+(1-lable)*log(1-prob[1]))

loss = loss/len(y_true)

print('loss by equation: %s.'%loss)

from sklearn.metrics import log_loss

from sklearn.preprocessing import labelbinarizer

from math import log

y_true = ['1', '4', '5'] # 樣本的真實標籤

y_pred = [[0.1, 0.6, 0.3, 0, 0, 0, 0, 0, 0, 0],

[0, 0.3, 0.2, 0, 0.5, 0, 0, 0, 0, 0],

[0.6, 0.3, 0, 0, 0, 0.1, 0, 0, 0, 0]] # 樣本的**概率

labels = ['0','1','2','3','4','5','6','7','8','9'] # 所有標籤

# 利用sklearn中的log_loss()函式計算交叉熵

sk_log_loss = log_loss(y_true, y_pred, labels=labels)

print("loss by sklearn is:%s." %sk_log_loss)

# 對樣本的真實標籤進行標籤二值化

lb = labelbinarizer()

print(lb.fit(labels))

transformed_labels = lb.transform(y_true)

print(transformed_labels)#轉化**為矩陣

n = len(y_true) # 樣本個數

k = len(labels) # 標籤個數

eps = 1e-15 # **概率的控制值

loss = 0 # 損失值初始化

for i in range(n):

for k in range(k):

# 控制**概率在[eps, 1-eps]內,避免求對數時出現問題

if y_pred[i][k] < eps:

y_pred[i][k] = eps

if y_pred[i][k] > 1-eps:

y_pred[i][k] = 1-eps

# 多分類問題的交叉熵計算公式

loss -= transformed_labels[i][k]*log(y_pred[i][k])

loss /= n

print("loss by equation is:%s." % loss)

二分類 多分類

怎麼樣把兩類的分類的模型推廣到多類上?答 a.一對多法 one versus rest,簡稱ovr svms 訓練時依次把某個類別的樣本歸為一類,其他剩餘的樣本歸為另一類,這樣k個類別的樣本就構造出了k個svm。分類時將未知樣本分類為具有最大分類函式值的那類。b.一對一法 one versus on...

捋一捋二分類和多分類中的交叉熵損失函式

二分類 用sigmoid函式 1 1 e x 作為啟用函式,將線性變換的輸出值對映到0 1之間。通過矩陣變換,將最後的輸出值定為1維0 1之間的數值,再用bceloss函式 二分類交叉熵損失函式 構建計算圖 多分類 隱藏層用啟用sigmoid函式處理線性變換後的值,最後一層用softmax函式 e ...

二分類實現多分類

很多分類器在數學解釋時都是以二分類為例,其數學推導不適用於多分類,模型本身也只能用於二分類,如svm,adaboost 但是現實中很多問題是多分類的,那這些模型還能用嗎 改變這些模型的原理,重新推導數學公式,然後 實現。這種方法一般不可取,難度大,而且很麻煩 也叫一對其餘法 假設有n個類,每次把乙個...