gpt4 book ai didi

python - Scipy `fmin_cg` 参数与我的函数参数不匹配

转载 作者:行者123 更新时间:2023-12-01 08:55:14 25 4
gpt4 key购买 nike

我正在尝试构建线性回归模型并使用 fmin_cg 优化器找到最佳值。
我的这项工作有两个职能。第一个 linear_reg_cost 是成本函数,第二个 linear_reg_grad 是成本函数的梯度。这两个函数都有相同的参数。

def hypothesis(x,theta):
return np.dot(x,theta)

成本函数:

def linear_reg_cost(x_flatten, y, theta_flatten, lambda_, num_of_features,num_of_samples):
x = x_flatten.reshape(num_of_samples, num_of_features)
theta = theta_flatten.reshape(n,1)
loss = hypothesis(x,theta)-y
regularizer = lambda_*np.sum(theta[1:,:]**2)/(2*m)
j = np.sum(loss ** 2)/(2*m)
return j

梯度函数:

def linear_reg_grad(x_flatten, y, theta_flatten, lambda_, num_of_features,num_of_samples):
x = x_flatten.reshape(num_of_samples, num_of_features)
m,n = x.shape
theta = theta_flatten.reshape(n,1)
new_theta = np.zeros(shape=(theta.shape))
loss = hypothesis(x,theta)-y
gradient = np.dot(x.T,loss)
new_theta[0:,:] = gradient/m
new_theta[1:,:] = gradient[1:,:]/m + lambda_*(theta[1:,]/m)
return new_theta

fmin_cg:

theta = np.ones(n)

from scipy.optimize import fmin_cg
new_theta = fmin_cg(f=linear_reg_cost, x0=theta, fprime=linear_reg_grad,args=(x.flatten(), y, lambda_, m,n))

注意:我将 x 展平为输入,并在成本和梯度函数中检索为矩阵。

输出错误:

<ipython-input-98-b29c1b8f6e58> in linear_reg_grad(x_flatten, y, theta_flatten, lambda_, num_of_features, num_of_samples)
1 def linear_reg_grad(x_flatten, y, theta_flatten, lambda_,num_of_features, num_of_samples):
----> 2 x = x_flatten.reshape(num_of_samples, num_of_features)
3 m,n = x.shape
4 theta = theta_flatten.reshape(n,1)
5 new_theta = np.zeros(shape=(theta.shape))

ValueError: cannot reshape array of size 2 into shape (2,12)

注意:x.shape = (12,2)y.shape = (12,1)theta.shape = (2,) 。因此 num_of_features =2num_of_samples=12。但错误显示我的输入 x 正在解析而不是 theta。为什么即使我在 fmin_cg 中显式分配 args 也会发生这种情况?我该如何解决这个问题?

感谢您的建议

最佳答案

您的所有实现都是正确的,但有一点错误。
请注意为您的两个函数传递参数。
您的问题是 num_of_featurenum_of_samples 的顺序。您可以在 Linear_reg_grad 或 Linear_reg_cost 中相互替换它们的位置。当然,您应该在 scipy.optimize.fmin_cgargs 参数中更改此顺序。

第二个重要的事情是,x 作为 fmin_cg 中的第一个参数是您每次想要更新并找到最佳变量的变量。因此,在您的解决方案中,fmin_cg 中的 x 必须是 theta,而不是您的输入 x

关于python - Scipy `fmin_cg` 参数与我的函数参数不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52811342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com