Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:ml:lab4 [2013/02/15 10:14]
esimon
pl:dydaktyka:ml:lab4 [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
-====== Laboratorium ​- Regresja Liniowa ====== +====== Laboratorium ​- 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
Linia 31: Linia 34:
  
 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 przypadku dwuwymiarowego ​=====+===== Regresja Liniowa dla jednej zmiennej ​===== 
 +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. ​
  
 +Na podstawie danych dotyczących aktualnie otwartych restauracji i zysku jaki z nich otrzymujemy chcemy wybrać miasta w których najbardziej opłaci się otwarcie inwestycji.
 +Plik //​ex1data1.txt//​ zawiera te dane. Pierwsza kolumna zawiera populację danego miasta, druga zysk w tym mieście. Ujemne wartości oznaczają stratę.
 ==== Plot Data ==== ==== Plot Data ====
 Uzupełnij plik //​plotData.m//​ tak, aby rysowała wykres w taki sposób jak na rysunku poniżej. Uzupełnij plik //​plotData.m//​ tak, aby rysowała wykres w taki sposób jak na rysunku poniżej.
Linia 39: Linia 46:
 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//.
 ==== Compute Cost ==== ==== Compute Cost ====
 +W pierwszej kolejności zaimplementuj funkcję kosztu dla regresji liniowej (plik //​computeCost.m//​).
 +
 +Funkcja kosztu dana jest wzorem:
 +$$J(\theta) = \frac{1}{2m}\sum\limits_{i=1}^m(h_{\theta}(x^{(i)}})-y^{(i)}})^2$$
 +
 +Gdzie
 +
 +$$h_{\theta}(x) = \theta^Tx = \theta_0+\theta_1x_1 $$
 +
 +**Uwaga** Pomyśl jak zapisać kod tak, aby nie używać pętli! Dzięki temu automatycznie będzie on pasował do drugiej części zadania (Regresja liniowa z wieloma zmiennymi)
 +
 +Przetestuj działanie funkcji skryptem //​check.m//​.
 ==== Gradient Descent ==== ==== Gradient Descent ====
-===== Regresja Liniowa dla przypadku wielowymiarowego ​=====+Ideą algorytmu Gradient Descent jest znalezienie odpowiednich współczynników $\theta$, tak aby funkcja kosztu dla danych treningowych była najmniejsza. 
 +W każdym kroku algorytmu uaktualniamy zatem wartości współczynników korzystając ze wzoru: 
 +$$\theta_j = \theta_j-\alpha\frac{1}{m}\sum\limits_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)} $$ 
 + 
 +**Uwaga 1** Zwróć uwagę, że funkcja $h_{\theta}(x)$ wykorzystuje do obliczenia swojej wartości współczynniki $\theta$ :!: Pamiętaj więc, żeby najpierw obliczyć uaktualnienia,​ a dopiero na samym końcu uaktualnić wartości współczynników $\theta$. 
 + 
 +**Uwaga 2** Spróbuj zapisać kod unikając pętli - będzie on wtedy działał dla wersji z wieloma zmiennymi. 
 + 
 +Przetestuj działanie algorytmu regresji liniowej używając skryptów //check.m// oraz //​ex1.m//​. 
 + 
 +Powinieneś zobaczyć następujący wynik: 
 + 
 +{{:​pl:​dydaktyka:​ml:​plot2.png|Wynik działania algorytmu regresji liniowej}} 
 +===== 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 ==== 
-==== 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.
  
  
  
  
pl/dydaktyka/ml/lab4.1360919649.txt.gz · ostatnio zmienione: 2019/06/27 15:54 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0