ValueError: формы (4100) и (3,1) не выровнены: 100 (тусклый 1)! = 3 (тусклый 0 - PullRequest
0 голосов
/ 04 октября 2019

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

import pandas as pd
data = pd.read_csv('data/assg-03-data.csv', names=['exam1', 'exam2', 'admitted'])
x = data[['exam1', 'exam2']].as_matrix()
y = data.admitted.as_matrix()
m = y.size
print(x.shape)
print(y.shape)
print(m)

data.head(5)

Результат равен (100, 2) (100,) 100

enter image description here

Код

def sigmoid(z):
    new_val = 1 / (1 + np.exp(-z))
    return new_val 

def h(theta,x):
    return sigmoid(np.dot(x,theta))

def compute_logistic_cost(theta, X, y):
    m = y.size
    #h = g(theta.T, np.dot (x))

    J = (1/m) * np.sum((-y * np.log(h(theta,X))) - ((1-y)*np.log(1-h(theta,x))))
    return J 

def compute_logistic_cost_gradients(theta, X, y):
    m = y.size
    h = sigmoid(X.dot(theta.reshape(-1,1)))
    grad =(1/m)*X.T.dot(h-y)
    return(grad)

X = np.ones( (3, m) )
print(X)

X[1:,:] = x.T
print(X)

Код

theta = np.zeros( (3, 1) )
print(compute_logistic_cost(theta, X, y))

theta = np.array([[1.0],
              [1.0],
              [1.0]])

print(theta)
print(compute_logistic_cost(theta, X, y))

theta = np.array([[0.1],
              [0.1],
              [0.1]])
print(theta)
print(compute_logistic_cost(theta, X, y))
#---------------------------------------------------------

theta = np.zeros( (3, 1) )
print(compute_logistic_cost_gradients(theta, X, y))

theta = np.array([[1.0],
              [1.0],
              [1.0]])
print(compute_logistic_cost_gradients(theta, X, y))

theta = np.array([[0.1],
              [0.1],
              [0.1]])
print(compute_logistic_cost_gradients(theta, X, y))

Ошибка

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-13-f9e664174896> in <module>
      1 theta = np.zeros( (3, 1) )
----> 2 print(compute_logistic_cost(theta, X, y))
      3 
      4 
      5 theta = np.array([[1.0],

<ipython-input-9-4b23d2fb9ba9> in compute_logistic_cost(theta, x, y)
     10     #h = g(theta.T, np.dot (x))
     11 
---> 12     J = (1/m) * np.sum((-y * np.log(h(theta,X))) - ((1-y)*np.log(1-h(theta,x))))
     13     return J
     14 

<ipython-input-9-4b23d2fb9ba9> in h(theta, x)
      4 
      5 def h(theta,x):
----> 6     return sigmoid(np.dot(x,theta))
      7 
      8 def compute_logistic_cost(theta, x, y):

ValueError: shapes (4,100) and (3,1) not aligned: 100 (dim 1) != 3 (dim 0)


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-15-f8672fbf30fe> in <module>
      1 theta = np.zeros( (3, 1) )
----> 2 print(compute_logistic_cost_gradients(theta, X, y))
      3 
      4 theta = np.array([[1.0],
      5                   [1.0],

<ipython-input-14-ba33afe8ffb3> in compute_logistic_cost_gradients(theta, X, y)
      1 def compute_logistic_cost_gradients(theta, X, y):
      2     m = y.size
----> 3     h = sigmoid(X.dot(theta.reshape(-1,1)))
      4     grad =(1/m)*X.T.dot(h-y)
      5     return(grad)

ValueError: shapes (4,100) and (3,1) not aligned: 100 (dim 1) != 3 (dim 0)

Может кто-нибудь помочь мне разобраться в этом глюке

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