Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:ml:lab4 [2013/02/15 12:24] esimon [Feature Normalization] |
pl:dydaktyka:ml:lab4 [2019/06/27 15:50] (aktualna) |
====== Laboratorium 2 - Regresja Liniowa ====== | ====== Laboratorium 4 - Regresja Liniowa ====== |
{{:pl:dydaktyka:ml:prv:ex1.pdf|Instrukcja}} w języku angielskim. | Ćwiczenia bazujące na materiałach Andrew Ng.\\ |
| Przed zajęciami przejrzyj wykłady II-IV: [[https://class.coursera.org/ml/lecture/preview|Linear regression]] |
| |
Ćwiczenia do pobrania: {{:pl:dydaktyka:ml:prv:ex1.zip|Regresja Liniowa}} | {{:pl:dydaktyka:ml:ex1.pdf|Instrukcja}} w języku angielskim. |
| |
| Ćwiczenia do pobrania: {{:pl:dydaktyka:ml:ex1.zip|Regresja Liniowa}} |
===== Lista i opis plików ===== | ===== Lista i opis plików ===== |
Pliki oznaczone znakiem wykrzyknika (:!:) należy wypełnić własnym kodem | Pliki oznaczone znakiem wykrzyknika (:!:) należy wypełnić własnym kodem |
Jeśli coś nie działa, uruchom skrypt //check//. Przeprowadza on test działania poszczególnych funkcji i pokazuje poprawne wyniki. | Jeśli coś nie działa, uruchom skrypt //check//. Przeprowadza on test działania poszczególnych funkcji i pokazuje poprawne wyniki. |
===== Regresja Liniowa dla jednej zmiennej ===== | ===== Regresja Liniowa dla jednej zmiennej ===== |
W tej części zajmiemy się przypadkiem regresji liniowej dla przypadku dwuwymiarowego. | W tej części zajmiemy się przypadkiem regresji liniowej dla jednej zmiennej. |
Załóżmy, że jesteśmy CEO sieci restauracji i planujemy otwarcie kilku kolejnych lokali. | Załóżmy, że jesteśmy CEO sieci restauracji i planujemy otwarcie kilku kolejnych lokali. |
| |
Aby dowiedzieć się więcej o funkcji plot, wpisz w konsoli Octave <code> help plot</code> | Aby dowiedzieć się więcej o funkcji plot, wpisz w konsoli Octave <code> help plot</code> |
| |
{{:pl:dydaktyka:ml:prv:plot1.png|Wykres danych uczących}} | {{:pl:dydaktyka:ml:plot1.png|Wykres danych uczących}} |
| |
Sprawdź działanie funkcji za pomocą skryptu //ex1//. | Sprawdź działanie funkcji za pomocą skryptu //ex1//. |
| |
Funkcja kosztu dana jest wzorem: | Funkcja kosztu dana jest wzorem: |
$$J(\theta} = \frac{1}{2m}\sum\limits_{i=1}^m(H_{\theta}(x^{(i)}})-y^{(i)}})^2$$ | $$J(\theta) = \frac{1}{2m}\sum\limits_{i=1}^m(h_{\theta}(x^{(i)}})-y^{(i)}})^2$$ |
| |
Gdzie | Gdzie |
| |
Powinieneś zobaczyć następujący wynik: | Powinieneś zobaczyć następujący wynik: |
{{:pl:dydaktyka:ml:prv:plot2.png|Wynik działania algorytmu regresji liniowej}} | |
| {{:pl:dydaktyka:ml:plot2.png|Wynik działania algorytmu regresji liniowej}} |
===== Regresja Liniowa dla wielu zmiennych ===== | ===== Regresja Liniowa dla wielu zmiennych ===== |
| Zakładamy, ze chcemy sprzedać dom, ale nie jesteśmy pewni jaką cenę ustalić. Mamy dostęp do danych o innych domach i cenach za jakie zostały sprzedane. Na tej podstawie chcemy ustalić cenę naszego domu. |
| |
| Dane dotyczące charakterystyki domów są dwuwymiarowe (a nie jak w poprzednim wypadku jednowymiarowe). Zawierają one następujące informacje: |
| * metraż domu (w stopach), |
| * ilość sypialni. |
| |
| **Uwaga** w tej części skryptem pomagającym w ukończeniu zadań jest //ex1_multi.m// oraz //check.m//. |
| ==== Feature Normalization ==== |
| Dane odnośnie powierzchni domu i ilości sypialni nalezą do równych rzędów wielkości. Warto je w związku z tym znormalizować, aby zapewnić lepsze działanie algorytmowi. |
| |
| Normalizacja danych odbywa się według wzoru: |
| $$x_{norm}^{j,i} = \frac{x^{j,i}-\mu^j}{\sigma^j}$$ |
| |
| Gdzie: |
| $x^{j,i}$ jest $i-tym$ elementem ze zbioru danej cechy $j$ \\ |
| $\mu^j$ jest średnią elementów cechy $j$ \\ |
| $\sigma^j$ jest odchyleniem standardowym dla elementeów cechy $j$ |
| |
| |
| |
| Sprawdź działanie funkcji skryptem //check.m// |
==== Compute Cost Multi ==== | ==== Compute Cost Multi ==== |
| Uzupełnij funkcję //computeCostMulti.m// dla przypadku wielowymiarowego. Pamiętaj, że funkcja nie powinna ograniczać swojego działania tylko dla danych 2-wymiarowych. |
| |
| Wektorowy zapis funkcji kosztu wygląda następująco |
| $$J(\theta) = \frac{1}{2m}(X\theta - y)^T(X\theta - y) $$ |
| |
| Przetestuj działanie funkcji skryptem //check.m// |
| |
| **Uwaga** Jeśli wykorzystałeś wektorową (bez pętli) implementację funkcji //computeCost.m// możesz przekleić kod - dobrze napisana wektorowa implementacja będzie działać dla dowolnego wymiaru danych! |
==== Gradient Descent Multi ==== | ==== Gradient Descent Multi ==== |
==== Feature Normalization ==== | |
| |
**Uwaga** Pamiętaj aby nie normalizować pierwszej kolumny danych! | |
==== Normal Equation ==== | |
| |
| Uzupełnij funkcję //gradientDescentMulti.m// dla przypadku wielowymiarowego. Pamiętaj, że funkcja nie powinna ograniczać swojego działania tylko dla danych 2-wymiarowych. |
| |
| Przetestuj działanie funkcji skryptem check.m |
| |
| **Uwaga** Jeśli wykorzystałeś wektorową (bez pętli) implementację funkcji //gradientDescent.m// możesz przekleić kod - dobrze napisana wektorowa implementacja będzie działać dla dowolnego wymiaru danych! |
| |
| === Dobór współczynnika uczenia === |
| |
| |
| **Uwaga** Po uruchomieniu skryptu //ex1_multi.m// prawdopodobnie otrzymasz wykres funkcji kosztu względem ilości iteracji, który nie wyglądają poprawnie... Dzieje się tak, ponieważ współczynnik uczenia $\alpha$ oraz ilość iteracji są źle dobrane. |
| |
| Otwórz plik //ex1_multi.m// i w okolicach linii 85 dokonaj następujących modyfikacji: |
| * zmień ilość iteracji na 50 |
| * zmieniaj współczynnik $\alpha$, przypisując mu wartości: 0.3, 0.1, 0.03, etc. ($x_{i+1} = x_{i}*3$) |
| |
| Zobacz jak zmienia się wykres funkcji kosztu. Dobierz dane tak, aby wykres wyglądał tak jak poniżej: |
| {{:pl:dydaktyka:ml:plot3.png|Wykres funkcji kosztów względem liczby iteracji}} |
| |
| === Wyznaczenie aproksymacji ceny domu === |
| |
| Teraz, kiedy współczynnik uczący został poprawnie dobrany, należy zmodyfikować plik //ex1_multi.m// w okolicach linii 104, tak aby do zmiennej //price// przypisana została aproksymowana wartość domu o powierzchni 1650 stóp kwadratowych i 3 sypialniach. |
| |
| Powinieneś otrzymać wartość, około 290000. |
| |
| **Uwaga** Pamiętaj o normalizacji danych...:) |
| |
| |
| |
| ==== Normal Equation ==== |
| Wartości współczynników $\theta$ mogą zostać wyznaczone bez konieczności uruchamiania algorytmu gradient descent. Wystarczy zastosować poniższe równanie: |
| $$\theta = (X^TX)^{-1}X^Ty$$ |
| |
| Zwróć uwagę, że w tym przypadku nie jest konieczna normalizacja. |
| |
| Zmodyfikuj plik //ex1_multi.m// w okolicach linii 152, tak aby do zmiennej //price// przypisana została aproksymowana wartość domu o powierzchni 1650 stóp kwadratowych i 3 sypialniach. |
| |
| Powinieneś otrzymać wartość podobną do tej wyznaczonej w przypadku algorytmu Gradient Descent. |
| ==== Uwagi ==== |
| Dużo materiału. Nie wszyscy zdążyli ze zrobieniem wszystkich zadań. Być może następnym razem opłacałoby się rozbicie tych lab na dwie części. |
| |
| |
| |
| |