2016-03-03 4 views

ответ

1

Это правильно, но вы хотите осуществить это векторизация вместо использования петли. Вы можете воспользоваться этим, используя линейную алгебру, чтобы вычислить сумму для вас. Вы можете вычислить theta(1) + theta(2)*X(i) - y(i) для каждого термина, сначала создав матрицу X, которая представляет собой матрицу точек, где первый столбец добавляется со всеми, а следующий столбец содержит ваши отдельные точки данных/данных. Вы, наконец, вычислили бы разницу между выходом строки прогнозирования и истинным выходом для каждой точки данных на X*theta - y, что, таким образом, создало бы вектор различий для каждой точки данных. Это также предполагает, что ваш массив точек и theta являются обоими векторами столбцов, и я считаю, что это правильная структура, поскольку это похоже на то, что вы реализуете функцию стоимости для одномерной линейной регрессии из курса машинного обучения Andrew Ng.

Вы можете вычислить скалярное произведение этого вектора с самим собой, чтобы вычислить сумму квадратов разностей, то вы можете разделить на 2*m, когда вы сделали:

vec = [ones(m,1) X]*theta - y; 
J = (vec.'*vec)/(2*m); %' 

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

Например, см это сообщение о том, почему умножение матриц в MATLAB является одним из самых быстрых, когда бенчмаркинга с другими платформами: Why is MATLAB so fast in matrix multiplication?

2

Как об этом:

J = 0.5 * sum(((theta(1)*ones(size(X))+theta(2)*X)-y).^2)/m 

Или, как @rayryeng отметил, вы можете даже отказаться от ones

J = 0.5 * sum(((theta(1)+theta(2)*X)-y).^2)/m 
+0

Параметр 'ones' не нужно. 'theta (1)' является скаляром, поэтому он будет транслироваться при добавлении в матрицу. – rayryeng

+1

Да, это старая привычка, хотя :) – NKN

+1

Справедливо :). – rayryeng

Смежные вопросы