微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python中双铰链损失函数的梯度下降

如何解决python中双铰链损失函数的梯度下降

我正在尝试使用双铰链损失来解决训练目标变量为 {-1,1} 的二元分类问题。

我试图解决的优化问题如下:

enter image description here

哪里

enter image description here

我的代码如下:

import sklearn
from sklearn.datasets import load_breast_cancer
from sklearn import linear_model,metrics
import numpy as np
import matplotlib.pyplot as plt

data = load_breast_cancer()
x = data.data
x = sklearn.preprocessing.scale(x)
y = np.sign(data.target.reshape(x.shape[0],1) - 0.5)

c = 10
rho = 0.5
eta = 0.5
grad_tol = 1e-1

def l_h(z):
    return np.maximum(0,1 - z)

def dl2_h(z):
    return -2 * l_h(z)

def obj(w,b,y,x):
    return (1/2) * np.linalg.norm(w)**2 + c * np.sum(l_h(y * (x@w+b))**2) 

def grad_w(w,x):
    return w + c * ((np.transpose(y) * np.transpose(x)) @ (dl2_h(y * (x@w+b))))
                    

然而,当我尝试使用以下代码测试我的梯度时,我得到了两个不同的答案:

w = np.random.normal(0,1,x.shape[1])
w = w.reshape((x.shape[1],1))
b = np.random.normal(0,1)

epsilon = np.zeros((x.shape[1],1)
epsilon[0] = 0.0001    
grad_estiamt = (obj(w + epsilon,x) - obj(w,x))/epsilon[0]
//compare grad_estimate with grad_w(w,x)[0]. They are not the same!!!

如果梯度正确,上面两个表达式的值应该非常接近,但事实并非如此。有人可以告诉我我在哪里犯了错误吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。