尝试在Python中实现Logistic回归:

以下是成本函数:

def costFunction(theta_array):
   m = len(X1)
   theta_matrix = np.transpose(np.mat(theta_array))

   H_x = 1 / (1 + np.exp(-X_matrix * theta_matrix))
   J_theta = ((sum(np.multiply((-Y_matrix), np.log(H_x)) - np.multiply((1 - Y_matrix), np.log(1 - H_x)))) / m )[0, 0]

   return J_theta


以下是渐变函数:

def gradientDesc(theta_tuple):
   theta_matrix = np.transpose(np.mat(theta_tuple))

   H_x = 1 / (1 + np.exp(-X_matrix * theta_matrix))
   G_theta0 = (sum(np.multiply(H_x - Y_matrix, X_matrix[:, 0])) / m)[0, 0]
   G_theta1 = (sum(np.multiply(H_x - Y_matrix, X_matrix[:, 1])) / m)[0, 0]
   G_theta2 = (sum(np.multiply(H_x - Y_matrix, X_matrix[:, 2])) / m)[0, 0]


   return np.array((G_theta0, G_theta1, G_theta2))


然后我运行optimize.fmin_bfgs函数,如下所示:

initial_theta = np.zeros((3, 1))
theta_tuple = (0, 0, 0)

theta_optimize = op.fmin_bfgs(costFunction, initial_theta, gradientDesc, args = (theta_tuple))


然后我得到下面的错误:

**TypeError: gradientDesc() takes exactly 1 argument (4 given)**


谁能告诉我如何解决? :) 谢谢!

最佳答案

对于args参数,应指定带有逗号的单项元组(也称为singleton)。否则,括号只不过是将表达式分组而已。

更改:

theta_optimize = op.fmin_bfgs(costFunction, initial_theta, gradientDesc, args = (theta_tuple))


至:

theta_optimize = op.fmin_bfgs(costFunction, initial_theta, gradientDesc, args = (theta_tuple,))


同样,您的gradientDesc应该根据documentation接受一个附加参数。

更改:

def gradientDesc(theta_tuple):


至:

def gradientDesc(x, theta_tuple):

关于python - TypeError:gradientDesc()恰好接受1个参数(给定4个),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52639150/

10-10 18:07
查看更多