我有一个我想尝试和最小化的损失函数:
def lossfunction(X,b,lambs):
B = b.reshape(X.shape)
penalty = np.linalg.norm(B, axis = 1)**(0.5)
return np.linalg.norm(np.dot(X,B)-X) + lambs*penalty.sum()
梯度下降或类似方法可能有用。我无法通过分析方法计算出这个函数的梯度,所以我想知道如何在数值上计算这个损失函数的梯度,以便实现下降法。
Numpy有一个gradient
函数,但它要求我在预定点传递标量字段。
答案 0 :(得分:0)
你可以用central difference数字估算导数:
fruit
fruit_name color
apple red
apple green
banana yellow
并像这样使用它:
def derivative(fun, X, b, lambs, h):
return (fun(X + 0.5*h,b,lambs) - fun(X - 0.5*h,b,lambs))/h
上面的代码对dimX = 1有效,需要进行一些修改以考虑多维向量X:
# assign values to X, b, lambs
# set the value of h
h = 0.001
print derivative(lossfunction, X, b, lambs, h)
原谅代码的天真,我几乎不知道怎么写一些python: - )
答案 1 :(得分:0)
你可以尝试scipy.optimize.minimize 对于您的情况,示例调用将是:
import scipy.optimize.minimize
scipy.optimize.minimize(lossfunction, args=(b, lambs), method='Nelder-mead')