Что означает параметры = int(theta.ravel().shape[1])?

Может кто-нибудь объяснить этот код для меня?

def gradientDescent(X, y, theta, alpha, iters):  
    temp = np.matrix(np.zeros(theta.shape))
    parameters = int(theta.ravel().shape[1])
    cost = np.zeros(iters)
    for i in range(iters):
    error = (X * theta.T) - y

    for j in range(parameters):
        term = np.multiply(error, X[:,j])
        temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))

    theta = temp
    cost[i] = computeCost(X, y, theta)

return theta, cost

1 ответ

Решение

Оцените это шаг за шагом на примере:

In [13]: np.matrix(np.zeros((3,4)))
Out[13]: 
matrix([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]])
In [14]: _.ravel()
Out[14]: matrix([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
In [15]: _.shape
Out[15]: (1, 12)
In [16]: _[1]
Out[16]: 12

np.matrix всегда 2d, даже когда расстроен.

Если бы мы использовали массив, а не matrix:

In [17]: np.zeros((3,4))
Out[17]: 
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
In [18]: _.ravel()
Out[18]: array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
In [19]: _.shape
Out[19]: (12,)
In [20]: _[0]
Out[20]: 12

Цикл требует, чтобы X, theta а также temp у всех одинаковое второе измерение. Я также думаю theta должна быть (1,n) матрица для начала. В противном случае параметры этого ravel будут слишком большими. Но в этом случае ворон не нужен в первую очередь.

Другие вопросы по тегам