логистическая регрессия и numpy: ValueError: операнды не могут быть переданы вместе с фигурами - PullRequest
0 голосов
/ 24 февраля 2019

Начинающий машинное обучение здесь.
В Python 3.7 я продолжаю получать эту ошибку при попытке запустить numpy.optimize fmin_tnc.
Я знаю, что этот тип вопроса задавался несколько раз, но, несмотря на проверкумои размеры матрицы и код несколько раз, я не могу найти свою ошибку.

Вот функция:

def compute_cost(theta, X, y, lambda_):
    m = len(y)
    mask = np.eye(len(theta))
    mask[0,0] = 0

    hypo = sigmoid(X @ theta)
    func = y.T @ np.log(hypo) + (1-y.T) @ np.log(1-hypo)
    cost = -1/m * func
    reg_cost = cost + lambda_/(2*m) * (mask@theta).T @ (mask@theta)

    grad = 1/m * X.T@(hypo-y) + lambda_/m * (mask@theta)

    return reg_cost.item(), grad

Вот мои размеры:

X: (118, 3)
y: (118, 1)
theta: (3, 1)

Вызов функции,

initial_theta = np.zeros((3,1))
lambda_ = 1

thetopt, nfeval, rc = opt.fmin_tnc(
    func=compute_cost, 
    x0=initial_theta, 
    args=(X, y, 1)
)

И ошибка.

File "<ipython-input-21-f422f885412a>", line 16, in compute_cost
    grad = 1/m * X.T@(hypo-y) + lambda_/m * (mask@theta)

ValueError: operands could not be broadcast together with shapes (3,118) (3,)

Спасибо за помощь!

1 Ответ

0 голосов
/ 25 февраля 2019

В scipy.optimize.tnc функция fmin_tnc вызывает _minimize_tnc, что, похоже, делает тяжелую работу.В этой функции почти первое, что она делает (строка 348), чтобы сгладить x0:

x0 = asfarray(x0).flatten()

Итак, вам нужно изменить ее в своей функции.Просто добавьте эту строку в начало вашей функции compute_cost:

theta = theta.reshape((3, 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...