Октава: какой метод эффективнее

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

J = (X * theta - y)' * (X * theta - y) * (1/(2*m)

где X — матрица m x n+1, тета — вектор n+1 x 1, а y — вектор m x 1. Мой вопрос в том, является ли этот второй способ немного быстрее:

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

так как он вычисляет X * theta -y только один раз. Будучи новичком в октаве, которая, кажется, работает в очень темпераментной среде на Windows, я не знаю, как самостоятельно проводить бенчмаркинг.

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


person Indigenuity    schedule 10.10.2012    source источник
comment
Вы уверены, что формулы дают одинаковые результаты? Если хотите оптимизировать, почему бы вам не написать: TMP = (X * theta - y) J = TMP' * TMP * (1/(2*m))   -  person Deer Hunter    schedule 11.10.2012


Ответы (1)


Это проверяет время настенных часов:

octave:2> tic; sleep(3); toc
Elapsed time is 3.00161 seconds.
octave:3> help tic

Разрешение не слишком велико, поэтому вам может понадобиться запустить расчет несколько раз в цикле.

Чтобы измерить процессорное время, используйте cputime:

octave:7> cputime()
ans =  0.21000
octave:8> sleep(3)
octave:9> cputime()
ans =  0.21000
person ev-br    schedule 10.10.2012
comment
Спасибо, они будут полезны. - person Indigenuity; 11.10.2012