Tutorial do zadania z SI numer 4, WAT, semestr III, Sztuczna inteligencja


Tutorial do zadania z SI numer 4 (jego adres na stronie do tego zadania to 5 ale co tam ;p):

A wiec tak, mamy tu dane duzo kursow duzej ilości walut.

Cale zadanie polega na tym abyśmy byli w stanie przewidzieć kurs dolara na za 2 dni.

Wiec cale zadanie polega na tym aby uzależnić kursy innych walut od kursu dolara, czyli, ze jeżeli np. dolar australijski spada o 2 centy to dolar amerykanski wzrasta o ilestam, i tak dla innych kursow. I wlasnie na tej podstawie nasza siec neuronowa będzie przewidywala kurs dolara.

Jednak chcemy żeby przewidywala na za 2 dni a nie na ten sam dzien. To wymaga od nas zrobienia jednej prostej rzeczy, a mianowicie cala kolumna z kursem dolara zostaje przesunieta o 2 w gore. A wiec kurs dolara australijskiego z 11 grudnia odpowiada kursowi dolara amerykańskiego z 13 grudnia. W ten sposób bez komplikowania sobie zbyt bardzo zadania przewidujemy kurs dolara.

Przy tym zaznacze, ze kurs dolara będziemy nazywac zmienna objasniana bo ja będziemy szukac, a kursy walut za pomoca których będziemy przewidywac nazywac będziemy objaśniającymi.

No dobra a wiec teraz pojawia się problem które kursy a wiec które zmienne mamy wybrac spośród takiej iloscj danych, nie wezmiemy przecierz wszystkich bo zanim doczekalibyśmy się wynikow to już dawno byśmy byli po studiach :P.

A wiec tutaj przychodzi nam z pomoca metoda Hellwiga.

Ktora mowi nam, ze wybrane przez nas zmienne objasniajace musza być jak najbardziej zalezne od zmiennej objaśnianej (a wiec kursu dolara) a najnajmniej zalezne od siebie.

A wiec co jest miara zależności dwoch zmienny? (Mala podpowiedz to z rachunku prawdopodobieństwa (pomachajcie Lucjanowi xD)) Tak to dobra odpowiedz a wiec korelacja. Kolejna podpowiedz jest taka, ze excell potafi policzyc korelacji dwoch tablic funkcja PEARSON(tablica1; tablica2), wiec po prostu zamiast tablic podstawiacie kolumne z jednym kursem i kolumne z drugim kursem i macie korelacjie pomiedzy nimi.

Kolejna zaleta (?) metody Hellwiga jest tez to, ze nie definiuje nam jak liczny ma być zbior objaśniający.

No dla nas to może i nie zaleta ale dobra ;p.

W każdym razie teraz patrzac na nasza tabele korelacji możemy sobie dobrac iles zmiennych objaśniających, pamiętając o tym co powiedziałem wczesniej (aby dana zmienna objasniajaca była jak najbardziej skorelowana z kursem dolara i jak najmniej skorelowana z kursem pozostałych zmiennych obajsniajacych).

Jak już wybierzemy jakas kombinacje to sucha teoria mowi nam tak:

Należy obliczyc indywidualna pojemność nośników informacji wg wzoru, dla każdej zmiennej obasniajacej z naszego wybranego zbioru:

0x01 graphic

gdzie:

k - numer kombinacji (k=1,2,...,2m-1),

mk - liczba zmiennych w k-tej kombinacji,

j - numer zmiennej w rozpatrywanej kombinacji,

rj - współczynnik korelacji potencjalnej zmiennej objaśniającej o numerze j ze zmienną objaśnianą (element wektora R0),

rlj - współczynnik korelacji między l-tą i j-tą potencjalną zmienną objaśniającą (element macierzy R).

A nastepnie:

0x01 graphic

gdzie:

k - numer kombinacji (k=1,2,...,2m-1),

mk - liczba zmiennych w k-tej kombinacji,

j - numer zmiennej w rozpatrywanej kombinacji.

A na koncu wybieramy taka kombinacje zmiennych objaśniających, ze Hk jest największe.

(roznice w tym przypadku będą naprawde niewielkie wiec pilnujcie po prostu żeby korelacja z kursem USD była wieksza niż z chociaż jedna inna) tak tu jest troche strzelania, no na upartego można przepatrzyc wszystkie kombinacjie ale komu się chce, wiec proponuje postrzelac pare zbiorow i wybrac najlepszy, co wiecej sadze, ze 4 zmienne objaśniające wystarcza ale to już moje zdanie :P.

Jak wybrac najlepszy? Otoz:

Jak mamy jakis zbior, powiedzmy AUD, HKD, CAD, EUR (zbior wybrany zupełnie przypadkowo, to 4 pierwsze zmienne ;p)(ja wybrałem pare takich zbiorow, na wyczucie, czyli patrzyłem który kurs jest skorelowany silnie z kursem USD, bralem go do zmiennych objaśniających, a nastepnie bralem jakis kurs z którym ten ostatnio wybrany jest mało skorelowany (a przynajmniej mniej niż tamten nowy z kursem USD) i tak dobrałem do 4 zmiennych).

No i teraz do poprawnego obliczenia potrzebujemy korelacji każdego naszego kursu (AUD, HKD, CAD, EUR) z kursem USD. Oznaczmy sobie to przez rj , gdzie j to oczywiście 1 dla AUD, 2 dla HKD, 3 dla CAD, 4 dla EUR oczywiście ;). A przez rij korelacje miedzy dwoma zmiennymi objaśniającymi, i znow r12 to korelacjia miedzy AUD a HKD itd.. Jak widac i,j=<1,n> gdzie n to ile zmiennych objaśniających wybraliśmy.

No i teraz mając takie dane możemy spojrzeć na wzór:

0x01 graphic

Obliczamy go dla każdej zmiennej objaśniającej z osobna, więc dla przykładu dla AUD będzie to:

0x01 graphic

Otóż na górze jak widzimy jest wartość korelacji AUD z USD podniesiona do kwadratu, na dole ułamka natomiast jest suma korelacji AUD z AUD (która zawsze będzie 1, korelacja zmiennej z samym sobą zawsze równa jest 1), AUD z HKD, AUD z CAD, AUD z EUR. A wiec na dole sumujemy korelacji aktualnie opracowywanej zmiennej objaśniającej ze wszystkimi zmiennymi objaśniającymi w naszym wybranym zbiorze.

Powtarzamy tą czynność dla każdej pozostałej zmiennej objaśniającej z wybranego przez nas zbioru:

0x01 graphic

0x01 graphic

0x01 graphic

Gdy już policzyliśmy takie coś musimy ustalić jak dobry jest zbiór który właśnie opracowujemy.

Liczymy według:

0x01 graphic

A więc normalnie znaczy to, ze musimy zsumować wszystkie te powyżej obliczone h.

Dla naszego zbioru jest to:

0x01 graphic
.

I oto jest przydatność naszego aktualnie rozpatrywanego zbioru. Wybieramy sobie kilka takich zbiorów określamy dla nich takie H dla każdego z nich i wybieramy sobie zbiór który ma największe H.

Taka podpowiedz moja jest taka, że jak wam wyjdzie H>1,3 to powinno być dobrze.

Skoro już ustaliliśmy nasze zmienne objaśniające to teraz możemy bawić się w sieci.

Więc teraz tworzymy po prostu tabele z tych powiedzmy 4 zmiennych, kopiujemy tam całe kolumny z naszych danych i kasujemny dwa ostatnie wiersze, bo przecierz nie mamy dla nich wartości USD (jako, że calą kolumnę USD przesunęliśmy w górę o 2). Kolumnę USD kopiujemy do innego arkusza (przesuniętą tak jak mówiłem).

To jest nasz zbiór uczący, teraz kolej na nasz zbiór walidacyjny, czyli taki dzięki któremu sprawdzimy czy dobrze żeśmy nauczyli naszą sieć.

A więc ze zrobionego przed chwilą arkusza wycinamy powiedzmy 50 ostatnich wartości i wklejamy do nowego arkusza, to samo robimy z arkuszem zawierającym USD.

Mamy mieć coś jakby mniejszy odpowiednik zbioru uczącego. Przy czym zakladamy, że zbiór walidacyjny jest przewidziany poprawnie, czyli to co tam się znajduje jest ustalone dobrze (zależność między zmiennymi objaśniającymi a zmienną objaśnianą).

No i jak mamy już coś takiego to w zasadzie zadanie gotowe. Bo siec która on podal do zadania 4 można przerobic aby spełniała nasze wymogi.

Kod programu jego w R to:

library(AMORE)

library(RODBC)

setwd("c:/Jezyk R/SSN")

dane <- odbcConnectExcel("WE.xls")

WE <- sqlQuery(dane, "select * from [Arkusz1$]")

WY <- sqlQuery(dane, "select * from [Arkusz2$]")

VAL_WE <- sqlQuery(dane, "select * from [Arkusz3$]")

VAL_WY <- sqlQuery(dane, "select * from [Arkusz4$]")

WE=as.matrix(WE)

WY=as.vector(WY)

VAL_WE=as.matrix(VAL_WE)

VAL_WY=as.vector(VAL_WY)

net <- newff(n.neurons=c(3,3,3,1), learning.rate.global=1e-2, momentum.global=0.5, error.criterium="TAO", Stao=NA, hidden.layer="tansig",output.layer="purelin", method="ADAPTgdwm")

result <- train(net, WE, WY,VAL_WE,VAL_WY, error.criterium="LMS", report=TRUE, show.step=100, n.shows=20 )

WYSN<-sim(result$net,VAL_WE)

wynik<- data.frame(VAL_WY,WYSN)

W zasadzie to gotowy program, musimy tylko zadbac by w WE znalazly się wartości zmiennych objaśniających ze zbioru uczacego, zmiennej WY odpowiadające im wartości kursu USD, a w VAL_WE i VAL_WY znajdowalo się to samo co wyzej tylko zbioru walidacyjnego.

Jakbysmy chcieli porównać sobie jak dobrze przwidzielismy można zrobic to w ten sposób:

Blad=sum(abs(VAL_WY-WYSN))

print('Na 52 przypadkow, roznica pomiedzy przewidzana wartoscia a walidacyjna')

Blad

print('Sredni blad przy przewidywaniu wartosci dolara')

Er = Blad/52

Er

Dla objaśnienia VAL_WY to jest jak powinno być, a w WYSN znajduja się przewidziane przez nas wartości. Abs to wartość bezwzgledna bo nie obchodzi nas w która strone się pomyliliśmy a suma, bo zliczamy blad na wszystkich naszych przywidzeniach.

Potem to po prostu uśredniamy.

I mamy o ile srednio pomyliliśmy się w przewidzeniu kursu dolara w odniesieniu do jego poprawnej wartości.



Wyszukiwarka

Podobne podstrony:
Rachunek zdan, WAT, semestr III, Sztuczna inteligencja
Zbior policzalny, WAT, semestr III, Sztuczna inteligencja
Zbior skonczony, WAT, semestr III, Sztuczna inteligencja
5 Zadania PL-SQL1a, WAT, semestr III, Bazy danych
I Ćwiczenia 4 zadania(na czysto), WAT, semestr III, Grafika komputerowa
Zadania poprawkowe Lab1, WAT, semestr III, Grafika komputerowa
Zadania oswietlenie 2004, WAT, semestr III, Grafika komputerowa
WDA LAB 3, WAT, semestr III, Wprowadzenie do automatyki
Laboratorium3 PGK zadania, WAT, semestr III, Grafika komputerowa
WDA Lab2 Sprawko ask, WAT, semestr III, Wprowadzenie do automatyki
Zadania ZESTAW1, WAT, semestr III, Podstawy miernictwa
Zadanie poprawkowe GK 2008, WAT, semestr III, Grafika komputerowa
WDA6, WAT, semestr III, Wprowadzenie do automatyki
Zadanie 5 (WEiP-2014), WAT, semestr VII, Wprowadzenie do ekonometrii i prognozowania
Zadanie 1 (WEiP-2014), WAT, semestr VII, Wprowadzenie do ekonometrii i prognozowania
LabKacz, WAT, semestr III, Wprowadzenie do kryptologii
WDA Lab4 Sprawko ask, WAT, semestr III, Wprowadzenie do automatyki
Zadanie 3 (WEiP-2014), WAT, semestr VII, Wprowadzenie do ekonometrii i prognozowania

więcej podobnych podstron