2012-10-10 8 views
3

J'essaie certains algorithmes d'apprentissage machine dans GNU Octave comme la fonction de coût d'erreur au carré. Le texte que j'ai dit que le bon vectorisé Préparations pour est:Octave: quelle méthode est la plus efficace

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

où X est une matrice m x n+1, thêta est un vecteur n+1 x 1, et y est un vecteur m x 1. Ma question est de savoir si cette deuxième façon est un peu plus rapide:

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

car il calcule qu'une seule fois X * theta -y. Étant nouveau à l'octave, qui semble fonctionner dans un environnement très capricieux sur windows, je ne sais pas comment faire du benchmarking moi-même.

Puisque c'est plus de curiosité qu'autre chose, n'hésitez pas à me dire que cela n'a pas d'importance.

+0

Êtes-vous sûr que les formules donnent des résultats identiques? Si vous voulez optimiser, pourquoi n'écrivez-vous pas: 'TMP = (X * thêta - y)' 'J = TMP '* TMP * (1/(2 * m))' –

Répondre

3

test vérifie le temps de wallclock:

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

Les résolutions ne sont pas trop grand, donc vous pouvez exécuter un calcul plusieurs fois dans une boucle.

pour mesurer le temps CPU, utilisez cputime:

octave:7> cputime() 
ans = 0.21000 
octave:8> sleep(3) 
octave:9> cputime() 
ans = 0.21000 
+0

Merci, ceux-ci seront utile. – Indigenuity

Questions connexes