Алгоритм градиентного спуска повышает значениеError - PullRequest
0 голосов
/ 31 января 2019

У меня есть этот алгоритм градиентного спуска для многомерной регрессии, но он вызывает

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

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

Пожалуйста, не отмечайте его как дубликат.

У моего x тусклое (140,3), у - (140,1), альфа = 0,0001

def find_mse(x,y,theta):
    return np.sum(np.square(np.matmul(x,theta)-y))*1/len(x)       



def gradientDescent(x,y,theta,alpha,iteration):
    theta=np.zeros(x.shape[1])
    m=len(x)
    gradient_df=pd.DataFrame(columns=['coeffs','mse'])

    for i in range(iteration):
        gradient = (1/m) * np.matmul(x.T, np.matmul(x, theta) - y)
        theta = np.mat(theta) - alpha * gradient
        cost = compute_cost(X, y, theta)
        gradient_df.loc[i] = [theta,cost]

    return gradient_df   

1 Ответ

0 голосов
/ 31 января 2019

Вы умножаете x с формой (140, 3) на theta, чтобы получить результат, который должен иметь форму (140, 1).Для этого ваш theta должен иметь форму (3, 1).Вам нужно инициализировать theta следующим образом

theta = np.zeros((x.shape[1], y.shape[1]))
...