To jest stara wersja strony!
Laboratorium 2 - Regresja Liniowa
Lista i opis plików
Pliki oznaczone znakiem wykrzyknika () należy wypełnić własnym kodem
ex1.m - Skrypt Octave, który pomaga w przejściu pierwszej części laboratorium
ex1_multi.m - Skrypt Octave, który pomaga w przejściu pierwszej części laboratorium
warmUpExercise.m - Ćwiczenie rozgrzewkowe
plotData.m - Funkcja rysująca wykres
computeCost.m - Funkcja kosztu dla regresji liniowej
gradientDescent.m - Funkcja uruchamiająca algorytm
Gradient Descent
computeCostMulti.m - Funkcja kosztu dla regresji liniowej dla przypadku wielowymiarowego
gradientDescentMulti.m - Funkcja uruchamiająca algorytm
Gradient Descent dla przypadku wielowymiarowego
featureNormalize.m - Funkcja normalizująca dane wejściowe
normalEqn.m - Funkcja dla regresji liniowej wyznaczająca parametry ze wzoru
Warm Up Exercise
Otwórz plik warmUpExercise.m w swoim ulubionym edytorze tekstu i w miejscu oznaczonym komentarzami wpisz kod, który wygeneruje macierz jednostkową 5×5 i zwróci ją jako wartość zwracaną funkcji.
Uwaga W Octave istnieje funkcja generująca macierz jednostkową. Nazywa się eye. Aby dowiedzieć się więcej na temat tej funkcji wpisz w konsoli Octave
help eye
Kiedy poprawnie uzupełnisz kod funkcji zapisz plik i uruchom skrypt ex1. Testuje on działanie poszczególnych zadań i prezentuje wykorzystanie ich w praktyce.
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
W tej części zajmiemy się przypadkiem regresji liniowej dla przypadku dwuwymiarowego.
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
Uzupełnij plik plotData.m tak, aby rysowała wykres w taki sposób jak na rysunku poniżej.
Pamiętaj o podpisaniu osi.
Aby dowiedzieć się więcej o funkcji plot, wpisz w konsoli Octave
help plot
Sprawdź działanie funkcji za pomocą skryptu ex1.
Compute Cost
W pierwszej kolejności zaimplementuj funkcję kosztu dla regresji liniowej (plik computeCost.m).
Funkcja kosztu dana jest wzorem:
Gdzie
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
Ideą algorytmu Gradient Descent jest znalezienie odpowiednich współczynników , 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:
Uwaga 1 Zwróć uwagę, że funkcja wykorzystuje do obliczenia swojej wartości współczynniki Pamiętaj więc, żeby najpierw obliczyć uaktualnienia, a dopiero na samym końcu uaktualnić wartości współczynników .
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:
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:
Gdzie:
jest elementem ze zbioru danej cechy
jest średnią elementów cechy
jest odchyleniem standardowym dla elementeów cechy
Uwaga Pamiętaj aby nie normalizować pierwszej kolumny danych! Spróbuj wykorzystać maksymalnie jedną pętle. Funkcja powinna działać nie tylko dla przypadku n-wymiarowego.
Sprawdź działanie funkcji skryptem check.m
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
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
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!
Normal Equation