Я прохожу курс машинного обучения на Coursera и выполняю следующее упражнение, используя Октава (MatLab должен быть таким же).
Это упражнениесвязанный с вычислением функции стоимости для алгоритма градиентного спуска .
На слайде курса у меня есть, что это функция стоимости, которую я должен реализовать, используя Octave:
Это формула со слайда курса:
Таким образом, J является функцией некоторых переменных THETA, представленных матрицей THETA (в предыдущемвторое уравнение).
Это правильная реализация MatLab \ Octave для вычисления J (THETA):
function J = computeCost(X, y, theta)
%COMPUTECOST Compute cost for linear regression
% J = COMPUTECOST(X, y, theta) computes the cost of using theta as the
% parameter for linear regression to fit the data points in X and y
% Initialize some useful values
m = length(y); % number of training examples
% You need to return the following variables correctly
J = 0;
% ====================== YOUR CODE HERE ======================
% Instructions: Compute the cost of a particular choice of theta
% You should set J to the cost.
J = (1/(2*m))*sum(((X*theta) - y).^2)
% =========================================================================
end
где:
X представляет собой матрицу из 2 столбцов из m строк, в которой для всех элементов первого столбца установлено значение 1 :
X =
1.0000 6.1101
1.0000 5.5277
1.0000 8.5186
...... ......
...... ......
...... ......
y является вектором m элементов (как X ):
y =
17.59200
9.13020
13.66200
........
........
........
Finnally theta представляет собой вектор из 2 столбцов, имеющий 0 значений вроде этого:
theta = zeros(2, 1); % initialize fitting parameters
theta
theta =
0
0
Хорошо, возвращаясь к моему рабочему решению:
J = (1/(2*m))*sum(((X*theta) - y).^2)
специально для этого умножения матрицы (умножение между матрицами X и вектор theta ): я знаю, что это допустимое матричное умножение, поскольку номер столбца X (2 столбца) равен числу строк theta (2 строки), так что это совершенно правильное умножение матриц.
Мое сомнение, которое сводит меня с ума (вероятно, это тривиальное сомнение), связано с предыдущим контекстом слайда курса:
Как видно из второго уравнения, используемого для вычисления текущего значения h_theta (x) , оно использует транспонированный тета-вектор , а не тета-вектор, как это сделано в коде.
Почему?!?!
Я подозреваю, что это зависит только от того, как был создан тета вектор.Он был построен следующим образом:
theta = zeros(2, 1); % initialize fitting parameters
, который генерирует вектор столбца из двух строк 1 вместо классического вектора столбца из одной строки 2.Так что, возможно, я не должен переносить это.Но я абсолютно не уверен в этом утверждении.
Правильна ли моя интуиция или чего мне не хватает?