我正在尝试从https://arxiv.org/abs/1411.0347第12页实施'迭代hessian Sketch'算法。但是,我正在努力完成第二步,这需要最小化矩阵向量函数。
导入和基本数据生成功能
S
为了最小化矩阵向量函数,我尝试实现一个函数来计算我想要最小化的量:
def grad_f2min(x, data, target, offset):
A = data
y = target
S = np.eye(A.shape[0])
xt = np.ravel(offset)
S_A = S@A
grad = (1/S.shape[0])*S_A.T@S_A@(x-xt) - A.T@(y-A@xt)
return grad
x0 = np.zeros((X.shape[0],1))
xt = np.zeros((2,1))
x_new = np.zeros((2,1))
for it in range(1):
result = minimize(f2min, x0=xt,args=(X,y,x_new),
method='CG', jac=False )
print(result)
x_new = result.x
我最终希望用一些可以减少问题维数的随机矩阵替换 fun: 0.0
jac: array([ 0.00745058, 0.00774882])
message: 'Desired error not necessarily achieved due to precision loss.'
nfev: 416
nit: 0
njev: 101
status: 2
success: False
x: array([ 0., 0.])
,但是,首先我需要确信这种优化方法是有效的。
filter
我认为这个循环根本不正确,因为在进入下一步之前至少应该有一些局部收敛。输出是:
ind_list[:][1]
有没有人知道:
(1)为什么我没有在每一步实现收敛
(2)我能以更好的方式实施第2步吗?