gpt4 book ai didi

python-3.x - optimize.fmin_tnc 没有在 scipy.optimize 中给出正确的答案?

转载 作者:行者123 更新时间:2023-11-30 09:15:40 25 4
gpt4 key购买 nike

我正在用 python 实现 Andrew ng 的机器学习类(class)。在编程练习 2 中,关于第一个问题,我得到了成本函数和梯度的书面答案,但是当计算优化 theta 时,我得到了一个灾难性的答案!

我已经尽力了,但找不到错误

def sigmoid(x):
return 1 / (1 + np.exp(-x))

def cost_compute( theta,x, y):
J = (-1/m) * np.sum(np.multiply(Y, np.log(sigmoid(X @ theta)))
+ np.multiply((1-Y), np.log(1 - sigmoid(X @ theta))))
return J

[m, n] = X.shape
X = np.hstack( (np.ones((m,1)) , X) )
Y = Y[:, np.newaxis]
theta = np.zeros((n+1,1))

def grad( theta, X, Y):
temp = (1/m) * X.T @ (sigmoid(X @ theta) - Y)
return temp

temp = opt.fmin_tnc(func = cost_compute, x0 = theta.flatten() , fprime = grad , args = (X, Y.flatten()))

print(temp)

预期成本是 0.693,我明白了。预期的成绩也与实际答案完全相同。但我得到的优化 theta 是 array([4.42735730e-05, 5.31690927e-03, 4.98646266e-03],给我的新成本约为 60!(而不是 0.203)

最佳答案

我通过改变数组的形状、展平它、 reshape 它做了一些测试,但没有任何效果。

由于我们通过展平 theta 在 fmin_tnc 中输入一维 theta,所以我考虑更改梯度函数,假设它将接收单维 theta 而不是 3*1。

之前是

def grad( theta, X, Y):
temp = (1/m) * X.T @ (sigmoid(X @ theta) - Y)
return temp

现在是

def grad( theta, X, Y):
temp = (1/m) * (X.T @ (sigmoid(X @ theta[:,np.newaxis]) - Y))
return temp

现在可以了!

关于python-3.x - optimize.fmin_tnc 没有在 scipy.optimize 中给出正确的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56579947/

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