fmin_cg 出现意外错误
fmin_cg giving nexpected error
刚刚学习了梯度描述。算法和我试图实现它,输入是二维平面上的一组坐标,目的是预测通过大多数给定输入点的线。
使用 python,我写道:
def cost( theta, data ):
X, y = data[:, 0], data[:, 1]
m = shape(X)[0]
y = y.reshape(m, 1)
X = c_[ones((m, 1)), X]
J = X.dot(theta) - y
J = J.T.dot(J) / (m)
# print(J[0, 0])
return J
def gradDesc(theta, data):
X = data[:, 0]
y = data[:, 1]
m = shape(X)[0]
X = c_[ones((m, 1)), X]
y = y.reshape(m, 1)
hypo = X.dot(theta)
grad = X.T.dot(hypo - y)/m
# print(grad)
return grad
def run(theta, data ):
result = scipy.optimize.fmin_cg( f = cost, fprime=gradDesc, x0=theta, \
args = (data), maxiter=50, disp=False, full_output=True )
theta = result[0]
minCost = result[1]
return theta, minCost
def main():
data = genfromtxt('in.txt', delimiter=',')
theta = zeros((2, 1))
# plot_samples(data)
run(theta, data)
我尝试使用 fmin_cg() 来最小化成本,但它的参数之一 'args' 导致错误:
第 282 行,在 function_wrapper
return 函数(*(wrapper_args + 参数))
TypeError:gradDesc() 接受 2 个位置参数,但给出了 5 个
我在文档中读到 args 是传递给 f 和 fprime 的参数列表,而不是要更改以最小化 f 的参数列表,这里是数据。需要帮助知道我哪里出错了..
额外的参数必须是一个元组。如果您想要一个名为 data
的参数,则需要构造一个单元素元组 (data,)
—— 请注意逗号。这与 (data)
不同,后者实际上忽略了括号。
示例:
>>> def f(x, data):
... return (x - data.sum())**2
...
>>> import numpy as np
>>> data = np.asarray([1., 2., 3.])
>>> fmin_cg(f, x0=11., args=(data,))
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 2
Function evaluations: 15
Gradient evaluations: 5
array([ 6.])
刚刚学习了梯度描述。算法和我试图实现它,输入是二维平面上的一组坐标,目的是预测通过大多数给定输入点的线。 使用 python,我写道:
def cost( theta, data ):
X, y = data[:, 0], data[:, 1]
m = shape(X)[0]
y = y.reshape(m, 1)
X = c_[ones((m, 1)), X]
J = X.dot(theta) - y
J = J.T.dot(J) / (m)
# print(J[0, 0])
return J
def gradDesc(theta, data):
X = data[:, 0]
y = data[:, 1]
m = shape(X)[0]
X = c_[ones((m, 1)), X]
y = y.reshape(m, 1)
hypo = X.dot(theta)
grad = X.T.dot(hypo - y)/m
# print(grad)
return grad
def run(theta, data ):
result = scipy.optimize.fmin_cg( f = cost, fprime=gradDesc, x0=theta, \
args = (data), maxiter=50, disp=False, full_output=True )
theta = result[0]
minCost = result[1]
return theta, minCost
def main():
data = genfromtxt('in.txt', delimiter=',')
theta = zeros((2, 1))
# plot_samples(data)
run(theta, data)
我尝试使用 fmin_cg() 来最小化成本,但它的参数之一 'args' 导致错误: 第 282 行,在 function_wrapper return 函数(*(wrapper_args + 参数)) TypeError:gradDesc() 接受 2 个位置参数,但给出了 5 个
我在文档中读到 args 是传递给 f 和 fprime 的参数列表,而不是要更改以最小化 f 的参数列表,这里是数据。需要帮助知道我哪里出错了..
额外的参数必须是一个元组。如果您想要一个名为 data
的参数,则需要构造一个单元素元组 (data,)
—— 请注意逗号。这与 (data)
不同,后者实际上忽略了括号。
示例:
>>> def f(x, data):
... return (x - data.sum())**2
...
>>> import numpy as np
>>> data = np.asarray([1., 2., 3.])
>>> fmin_cg(f, x0=11., args=(data,))
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 2
Function evaluations: 15
Gradient evaluations: 5
array([ 6.])