Robię kurs Andrew Ng na temat uczenia maszynowego i staram się owijać głowę wokół wektorowej implementacji gradientowego zejścia dla wielu zmiennych, co jest opcjonalnym ćwiczeniem w kurs.Implementacja gradientowego zejścia dla wielu zmiennych w Octave przy użyciu "sumy"
Jest to algorytm w pytaniu (zaczerpnięte z here):
Po prostu nie mogę tego zrobić w oktawie użyciu sum
choć nie jestem pewien, jak pomnożyć sumę hipotezy x (i) - y (i) według wszystkich zmiennych xj (i). Próbowałem różnych iteracji następującego kodu, ale bezskutecznie (zarówno wymiary nie są dobre czy odpowiedź jest źle):
theta = theta - alpha/m * sum(X * theta - y) * X;
Prawidłowa odpowiedź jest jednak zupełnie nieoczywiste (do liniowego początkującego algebry w każdym razie, jak ja z here):
theta = theta - (alpha/m * (X * theta-y)' * X)';
Czy istnieje zasada, w przypadkach, w których bierze udział sum
który reguluje przemiany jak wyżej?
A jeśli tak, czy istnieje przeciwna wersja powyższego (tj. Przejście z rozwiązania opartego na sum
do ogólnego mnożenia), ponieważ udało mi się wymyślić poprawną implementację przy użyciu sum
dla gradientowego zejścia dla pojedynczej zmiennej (choć nie bardzo elegancki jeden):
temp0 = theta(1) - (alpha/m * sum(X * theta - y));
temp1 = theta(2) - (alpha/m * sum((X * theta - y)' * X(:, 2)));
theta(1) = temp0;
theta(2) = temp1;
Należy pamiętać, że dotyczy to tylko wektoryzowane implementacje i choć istnieje kilka pytań na temat, tak aby, jak to zrobić, moje pytanie dotyczy przede wszystkim realizacji algorytmu w Octave przy użyciu sum
.
Możliwy duplikat [uczenia maszynowego - regresja liniowa z zastosowaniem gradientu wsadowy zejście] (http://stackoverflow.com/questions/32274474/machine-learning-linear-regression- using-batch-gradient-descent) – rayryeng
Spójrz na duplikat łącza - w szczególności drugie podejście z 'sumą'. – rayryeng