在二分類問題中,損失函式為交叉熵損失函式。對於樣本(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個類,每次把乙個...