scipy Python中的Softmax和Hinge函数

2j4z5cfb  于 2022-11-10  发布在  Python
关注(0)|答案(2)|浏览(201)

我试图用Python实现Hinge loss函数,但遇到了一些误导。
在我以前读过的一些资料中(例如,Luca Massoron下的“Python中的回归分析“)指出,Hinge有时会作为Softmax函数调用。
但对我来说这有点奇怪,因为,铰链:

而Softmax是指数函数,如下所示:

我在Python中(针对Softmax)以如下方式创建了该函数:

def softmax(x):
   e_x = np.exp(x - np.max(x))
   return e_x/e_x.sum(axis=0)

有两个问题:
1.我可以将softmax函数用作铰链函数的等效函数吗?
1.如果没有,如何在Python中实现铰链?

  • 谢谢-谢谢
krugob8w

krugob8w1#

我可以将softmax函数用作铰链函数的等效函数吗?
否-它们不等同。
铰链函数是损失函数,并且不提供良好校准的概率,而SoftMax是Map函数(将一组分数Map到分布中的函数,求和为1的函数)。
如果没有,如何在Python中实现铰链?
下面的片段捕获了铰链损耗函数的本质:

import numpy as np
import matplotlib.pyplot as plt

xmin, xmax = -1, 2
xx = np.linspace(xmin, xmax, 100)
plt.plot(xx, np.where(xx < 1, 1 - xx, 0), label="Hinge loss")
mbyulnm0

mbyulnm02#

您也可以在纯Python中实现softmax函数:)

import numpy as np
import math as math

def sofyMax(data):
    # pure python 
    # math:: $rezult(powe,sumColumn) = \dfrac{powe(data)}{sumColumn(powe(data))}$

    def powe(data):
        outp = [[] for _ in range(len(data))]
        for column in range(len(data[0])):
            r = 0 
            for row in data:
                outp[r]+=[math.exp(row[column])]
                r+=1
        return outp

    def sumColumn(data):
        outps = []
        for column in range(len(data[0])):
            total = 0
            for row in data:
                total+=row[column]
            outps += [total]
        return outps

    def rezult(data,sumcolumn):
        outp = [[] for _ in range(len(data))]
        l = 0
        for row in data:
            for c,s in zip(row,sumcolumn) :
                outp[l] += [c/s]
            l+=1
        return outp

    et1 = powe(data)        
    et2 = sumColumn(et1)
    return rezult(et1,et2)
data = np.random.randn(10,5)

(np.exp(data)/np.sum(np.exp(data),axis=0)) == (np.array(sofyMax(data)))

相关问题