Что означает параметры = 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 будут слишком большими. Но в этом случае ворон не нужен в первую очередь.