Inteligentna kuchnia - predykcja list zakupowych
Transkrypt
Inteligentna kuchnia - predykcja list zakupowych
Politechnika Warszawska Rok akademicki 2012/2013 Wydział Elektroniki i Technik Informacyjnych Instytut Informatyki PRACA DYPLOMOWA MAGISTERSKA Kacper Grzegorz Szkudlarek Inteligentna kuchnia - predykcja list zakupowych Opiekun pracy: dr hab. inż. Piotr Gawrysiak, prof. nadzw. PW Ocena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...................................... Podpis Przewodniczącego Komisji Egzaminu Dyplomowego Specjalność: Informatyka – Inżynieria Systemów Informatycznych Data urodzenia: 16 marca 1987 r. Data rozpoczęcia studiów: 01 października 2010 r. Życiorys Nazywam się Kacper Szkudlarek. Urodziłem się 16 marca 1987 roku w Sandomierzu. Szkołę podstawową i gimnazjum im. Jana Pawła II, ukończyłem z wyróżnieniem w mojej rodzinnej miejscowości - Gorzyce w woj. podkarpackim. W latach 2003 - 2006 byłem uczniem I Liceum Ogólnokształcącego Collegium Gostomianum w Sandomierzu. Po ukończeniu szkoły, 21 lutego 2007 roku rozpocząłem studia pierwszego stopnia na wydziale Elektroniki i Technik Informacyjnych Politechniki Warszawskiej. 29 września 2010 roku uzyskałem tytuł inżyniera nauk informatcznych broniąc pracę dyplomową pt. "Aktywna lokalizacja obszarów zawierających kody kreskowe". W październiku 2010 roku rozpocząłem studia drugiego stopnia. .................................... podpis studenta Egzamin dyplomowy Złożył egzamin dyplomowy w dn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Z wynikiem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ogólny wynik studiów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dodatkowe wnioski i uwagi Komisji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ....................................................................................... Streszczenie Słowa kluczowe: sieci neuronowe, predykcja, listy zakupowe, bazy danych, Jave EE, Tomcat, MySQL, aplikacj webowa Praca dyplomowa przedstawia system predykcji list zakupowych. Predykcja odbywa się na podstawie danych statystycznych dotyczących użycia produktów przez użytkownika. W systemie, w celu dokonywania predykcji, używana jest sieć neuronowa z propagacją wsteczną. Abstract Title: Intelligent kitchen - prediction of shopping lists Diploma is description of shopping list prediction system. Prediction is based on statistic information gather from user’s usage of products. Data prediction in given system is based on feed forward neural network with backpropagation. Key words: neural networks, prediction, shopping list, data bases, Jave EE, Tomcat, MySQL, web application Rodzicom i wszystkim, którzy mnie tak męczyli... Spis treści 1 Wstęp 9 1.1 Motywacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.2 Opis problemu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3 Układ pracy dyplomowej . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2 Opis elementów systemu 11 2.1 Wykorzystane technologie . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2 Baza danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.3 Serwer danych i aplikacja webowa . . . . . . . . . . . . . . . . . . . . . . . 12 2.3.1 Model danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.3.2 Aplikacja webowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.4 Główne funkcjonalności . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5 Sieć neuronowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.5.1 Funkcje aktywacji neuronu . . . . . . . . . . . . . . . . . . . . . . . 17 2.5.2 Uczenie sieci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.5.3 Zastosowanie sieci neuronowych . . . . . . . . . . . . . . . . . . . . 19 3 Generator danych 21 3.1 Ogólna struktura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2 Cele i ograniczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3 Działanie generatora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.4 Metody consume i produce 3.5 Przykładowe wygenerowane dane . . . . . . . . . . . . . . . . . . . . . . . 29 4 Predykcja list zakupowych . . . . . . . . . . . . . . . . . . . . . . . . . . 27 33 4.1 Wstęp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.2 Predykcja w systemie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 8 SPIS TREŚCI 4.2.1 Dane wejściowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.2 Działanie algorytmu . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.2.3 Przykłady predykcji i ich intepretacja . . . . . . . . . . . . . . . . . 38 5 Otrzymane wyniki 5.1 41 Wyniki przeprowadzonych doświadczeń . . . . . . . . . . . . . . . . . . . . 41 5.1.1 Wykorzystane dane testowe . . . . . . . . . . . . . . . . . . . . . . 42 5.1.2 Otrzymane wyniki . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.1.3 Test zgodności χ2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6 Wnioski i perspektywy rozwoju systemu 57 6.1 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 6.2 Perspektywy rozwoju i zastosowania systemu . . . . . . . . . . . . . . . . . 57 Rozdział 1 Wstęp 1.1 Motywacja Otaczający nas świat jest światem informacji. Jego funkcjonowanie opiera się całkowicie na zdolności szybkiego pozyskiwania i przetwarzania informacji oraz przewidywania dalszego rozwoju sytuacji. Dlatego tak dużo środków poświęca się na rozwój technologii pozwalających przyspieszyć te procesy, badając zmienność informacji w otaczającym świecie. Przykładem takiej technologii są sieci neuronowe, zdolne dopasować się do opisywanego problemu i z dużym przybliżeniem generować kolejne kroki w cyklu przetwarzania danych. Posiadanie takich danych stanowi niewątpliwy atut, pozwala sprawniej zarządzać i osiągać lepsze efekty, w biznesie, jak i życiu codziennym. 1.2 Opis problemu Jednym z głównych założeń tworzonego oprogramowania jest ułatwianie życia codziennego. Już teraz wiele czynności wykonywanych jest automatycznie przez komputery. Dzięki takiemu wykorzystaniu oprogramowania zyskujemy wolny czas, tak cenny w obecnej rzeczywistości. Przykładem takiego monotonnego zadania jest robienie zakupów. Czynność ta, w założeniu prosta, wymaga nieustannego planowania, sprawdzania i pamiętania, jakie produkty aktualnie znajdują się w naszej lodówce, kuchni. Pośpiech i tempo życia sprawiają, że często zapominamy, co jest nam potrzebne, czego brakuje, a wydajemy pieniądze na rzeczy niekonieczne potrzebne. Zadaniem tej pracy jest analiza możliwości i stworzenie 10 ROZDZIAŁ 1. WSTĘP systemu, który byłby w stanie pomóc w wyeliminowaniu tego problemu. Aplikacja pamiętałaby aktualny stan naszych zapasów, a także przewidywała, co nam będzie potrzebne i podpowiadała optymalne listy zakupowe. 1.3 Układ pracy dyplomowej Poszczególne rozdziały pracy poświęcone są osobnym częściom tworzonego projektu, a także rozważaniom na temat otrzymanych wyników i potencjalnych kierunków rozwoju systemu. 2. Opis elementów systemu Rozdział opisujący główne funkcjonalności stworzonego systemu. 3. Generator danych Rozdział w całości poświęcony jest stworzonemu generatorowi danych. Poszczególne kroki działania algorytmu zostały szczegółowo opisane i przedstawione na diagramach. 4.Predykcja list zakupowych. Rozdział opisujący działanie systemu predykcji. 5. Otrzymane wyniki Dyskusja i omówienie wyników otrzymanych w testach, przeprowadzonych w czasie tworzenia systemu. 6. Wnioski i perspektywy rozwoju systemu Opis proponowanych kierunków rozwoju stworzonego systemu. Rozdział 2 Opis elementów systemu 2.1 Wykorzystane technologie W celu uzyskania możliwie najłatwiejszego i najefektywniejszego dostępu do informacji zawartych w systemie, wykorzystane zostały technologie webowe. System został stworzony przy użyciu technologii Java EE [6] w oparciu o serwer aplikacji o otwartych źródłach Apache Tomcat [3]. Całość dopełnia niezbędna w tym przypadku baza danych. 2.2 Baza danych Do obsługi aplikacji zaprojektowana została baza danych. Wykorzystano wolnodostępny system MySQL [5]. Baza pełni nie tylko funkcję magazynu danych o produktach i historii ich konsumpcji przez użytkownika, ale również zmiennych niezbędnych w czasie predykcji i generacji danych. W związku z tym bazę i dane w niej przechowywane, można podzielić na trzy funkcjonalne części: 1. Część odpowiedzialna za przechowywanie danych użytkowników, informacji o produktach oraz aktualnych i historycznych informacji o zawartości lodówki/kuchni (Rys. 2.1), por 2.4. Na podstawie tych tabel generowane są informacje statystyczne potrzebne w procesie uczenia sieci. 2. Encje zawierające informacje na temat sieci neuronowych wykorzystywanych w czasie predykcji list zakupowych (Rys. 2.3), por. 2.5. W tabelach zapisany jest aktualny stan sieci neuronowej dla każdego z produktów, a także informacje o poprzednich generacjach danych. 12 ROZDZIAŁ 2. OPIS ELEMENTÓW SYSTEMU users id INT(11) nick VARCHAR(45) lastlogin DATE email VARCHAR(45) registration DATE password VARCHAR(256) Indexes products_users id INT user_id INT product_id INT count FLOAT add_date DATE last_operation DATE user_wanted_count FLOAT to_ignore BOOL Indexes Triggers BEF UPDATE BU_PRODUCTS_USE… BEF INSERT BI_PRODUCTS_USERS products_users_history id INT user_id INT product_id INT count FLOAT change FLOAT use_date DATE add_take BOOL Indexes products id INT name VARCHAR(45) description VARCHAR(512) www VARCHAR(45) barcode VARCHAR(45) tag INT Indexes Rysunek 2.1: Diagram ER dla głównych typów danych aplikacji. 3. Encje wykorzystywane przez generator danych (Rys. 3.1), por. 3. W tabelach zapisane są dane dotyczące ograniczeń i celów nałożonych na generator. Baza została doprowadzona do trzeciej postaci normalnej, wszystkie dane zawarte w tabelach są bezpośrednio zależne od klucza głównego tabeli. 2.3 Serwer danych i aplikacja webowa Do stworzenia aplikacji webowej wykorzystano framework JSF [1] oraz technologię serwletów. JSF jest to sterowany zdarzeniami framework do tworzenia interfejsów aplikacji 13 2.3. SERWER DANYCH I APLIKACJA WEBOWA products id INT constraints id INT(11) name VARCHAR(45) type INT(11) description VARCHAR(512) tag INT(11) www VARCHAR(45) min_value FLOAT barcode VARCHAR(45) tag INT max_value FLOAT Indexes Indexes types tags id INT id INT name VARCHAR(45) name VARCHAR(45) Indexes Indexes products_wrappings goals products_id INT id INT wrappings_id INT type INT add_take TINYINT(1) tag INT Indexes value FLOAT Indexes units wrappings id INT name VARCHAR(45) abreviation VARCHAR(45) Indexes id INT name VARCHAR(45) size FLOAT unit INT Indexes Rysunek 2.2: Diagram ER encji wykorzystywanych przez generator danych. users id INT(11) prediction_history nick VARCHAR(45) id INT lastlogin DATE network_id INT email VARCHAR(45) prediction_value FLOAT registration DATE password VARCHAR(256) Indexes prediction_date DATE network id INT input VARCHAR(256) puh_id INT users_id INT(11) tags tags_id INT id INT products_id INT name VARCHAR(45) layers_count INT Indexes last_predicted FLOAT Indexes learning_coef VARCHAR(128) 1 more... Indexes products id INT name VARCHAR(45) description VARCHAR(512) www VARCHAR(45) layer_variables id INT network_id INT layer_number INT neuron_count VARCHAR(45) vals VARCHAR(256) weights VARCHAR(10240) Indexes barcode VARCHAR(45) tag INT Indexes Rysunek 2.3: Diagram ER encji wykorzystywanych przez sieci neuronowe. 14 ROZDZIAŁ 2. OPIS ELEMENTÓW SYSTEMU webowych. Platforma ta oparta jest o wzorzec projektowy MVC1 rozdzielający implementację procesów biznesowych od modelu danych i widoków generowanych przez aplikację. W ramach aplikacji webowej można wyróżnić dwie części współdzielące model danych i procesy biznesowe, odpowiadające jednak za realizację różnych funkcjonalności: • Interfejs użytkownika do zarządzania kontem, zawartością lodówki oraz listami zakupowymi, • Generator danych testowych. 2.3.1 Model danych W celu ułatwienia realizacji dostępu aplikacji do danych zawartych w bazie MySQL, wykorzystany został framework Hibernate [4]. Zapewnia on translację pomiędzy relacyjną bazą danych, a obiektami języka Java (ang. ORM - Object-Relational Mapping). Mapowaniu podlegają wszystkie tabele, włącznie z tabelami asocjacyjnymi opisującymi zawartość lodówki/kuchni użytkownika. Stworzenie osobnych obiektów dla encji opisujących relacje produkt-użytkownik pozwoliło na łatwiejsze zarządzanie i obróbkę danych statystycznych. 2.3.2 Aplikacja webowa Interfejs użytkownika powstał przy użyciu JSF. Framework ten oparty jest na budowaniu UI (widoków) przy użyciu zdefiniowanych w bibliotekach komponentów. Przy tworzeniu poszczególnych widoków wykorzystana została biblioteka komponentów PrimeFaces [7]. Zapytania kierowane do aplikacji przetwarzane są przez servlet FacesServlet, który zarządza zapytaniami, widokami, ziarnami obiektów oraz na podstawie danych z kontrolerów generuje odpowiedzi dla użytkownika. Dla aplikacji JSF zdefiniowany jest 6-etapowy cykl życia: 1. Przywrócenie widoku - wygenerowanie widoku na podstawie przychodzącego zapytania i ew. uzupełnienie go o dane zawarte w zarządzanych ziarnach (managed beans) przesłanych wraz z zapytaniem. 2. Przesłanie danych z żądania - odczytanie danych wysłanych przez użytkownika w celu przekształcenia ich na odpowiednie obiekty w Javie. 1 Model-View-Controller - wzorzec projektowy do organizowania struktury aplikacji, oddzielający lo- gikę biznesową od warstwy prezentacji aplikacji. 15 2.4. GŁÓWNE FUNKCJONALNOŚCI 3. Walidacja - sprawdzenie poprawności danych w komponentach względem zdefiniowanych reguł walidacji. Jeśli przebiegnie ona poprawnie wykonywany jest następny krok cyklu. 4. Aktualizacja danych w modelu - przekształcenie danych z zapytania, w odpowiednie pola ziaren zarządzanych modelu danych. 5. Wywołanie zadeklarowanych metod - wywołanie metod zawartych w kontrolerze w celu przetworzenia odebranych danych. 6. Renderowanie odpowiedzi - wyświetlenie wyniku przetwarzania danych w zależności od odpowiedzi zwróconej przez wykonaną metodę. Jedynie fazy pierwsza i ostatnia wykonywane są zawsze dla każdego zapytania. Wykonanie pozostałych faz zależne jest od statusu faz je poprzedzających i samego programu. Z poziomu aplikacji użytkownik ma dostęp do wszystkich funkcjonalności, w szczególności: • Utworzenie konta w serwisie, • Przeglądanie aktualnego stanu swojej lodówki, • Zarządzanie obiektami w lodówce - zarówno dodawanie nowych jak i usuwanie już istniejących, • Przeglądanie proponowanych list zakupowych, • Definiowanie nowych produktów. W celu zapewnienia bezpieczeństwa danych przechowywanych przez użytkownika, wszystkie wyżej wymienione operacje, oprócz rejestracji, wymagają zalogowania w systemie. 2.4 Główne funkcjonalności Głównym zadaniem stworzonego systemu jest predykcja list zakupowych. Jest to swoista wirtualna lodówka. Użytkownik definiuje w systemie konto, z którym wiąże wszystkie swoje operacje powiązane z szeroko pojętą zawartością lodówki. Może dodawać oraz usuwać elementy posiadane w swojej lodówce, zgodnie ze zdefiniowanymi dla nich opakowaniami/porcjami. Wszystkie operacje dokonywane są po uprzednim zalogowaniu się użytkownika do systemu. Logowanie odbywa się poprzez podanie zdefiniowanej w czasie 16 ROZDZIAŁ 2. OPIS ELEMENTÓW SYSTEMU rejestracji nazwy użytkownika i hasła. Baza nie przechowuje haseł użytkowników w formie jawnego tekstu, a jedynie skróty haseł wygenerowane przy pomocy algorytmu kryptograficznego MD5. Dodatkowo w celu zapewnienia większego bezpieczeństwa przed obliczaniem skrótu do hasła dodawana jest tzw. sól, będąca zapisem daty rejestracji użytkownika. Hasła w tej postaci generowane są po stronie aplikacji. Dwa główne obiekty sytemu odzwierciedlające jego podstawowe elementy stanowią klasy P roduct oraz U ser. Są one mapowane na encje products oraz users bazy danych aplikacji (Rys. 2.1). Relacja wiele − do − wielu pomiędzy tymi encjami stanowi podstawę działania systemu. W ramach tej relacji zdefiniowane są główne operacje dodawania i pobierania z systemu produktów przez użytkownika. Tabele products_users oraz products_users_history zawierają aktualne dane o zawartości lodówki użytkownika oraz dane historyczne. Na diagramie 2.1 przedstawiono encje asocjacyjne products_users oraz products_users_history, które zostały rozbudowane o dodatkowe pola, dzięki czemu możliwe stało się przechowywanie wszystkich niezbędnych informacji nt. użytkowników, posiadanych przez nich produktów i historii przeprowadzanych operacji. Właśnie te ostatnie informacje są najwartościowsze w procesie uczenia sieci neuronowych, a w konsekwencji w predykcji list zakupowych. Wprowadzanie danych historycznych do tabeli products_users_history odbywa się w wyniku działania wyzwalacza, wywoływanego przed zaktualizowaniem danych w tabeli products_users. Na podstawie modyfikacji tworzony jest nowy wpis zawierający datę operacji oraz informację o przeprowadzonych zmianach. 2.5 Sieć neuronowa Algorytm predykcji zawarty w systemie, opiera się na wykorzystaniu sieci neuronowych z propagacją wsteczną [8]. W takiej sieci każdy neuron warstwy poprzedzającej połączony jest z każdym neuronem warstwy kolejnej (Rysunek. 2.4). Dane wejściowe propagowane są wgłąb sieci z uwzględnieniem wag przypisanych poszczególnym połączeniom. Wyjście każdego z neuronu warstwy kolejnej ustalane jest na podstawie funkcji aktywacji. Jest to funkcja pobierająca, jako parametry, wejścia do neuronu i zwracająca wynik, będący jego wyjściem (Por. 2.5.1). Gdy dane wejściowe zostaną rozpropagowane po całej sieci na wyjściu otrzymujemy wektor danych wyjściowych. Jest to odpowiedź sieci na zadane dane wejściowe. Mając wektor wyjściowy, można przystąpić do nauki sieci neuronowej. 2.5. SIEĆ NEURONOWA 17 Rysunek 2.4: Przykład sieci neuronowej z propagacją wsteczną. Przyjmuje się, że tylko jeden układ przestrzenny sieci jest optymalny. Jeśli warstwy ukryte mają zbyt wiele neuronów, sieć nadmiernie dopasowuje się do nauczanych danych i przez to traci zdolność uogólniania. Taka sieć staje się "przeuczona". Jeśli natomiast neuronów w warstwach ukrytych jest za mało, sieć nie jest w stanie poprawnie odtworzyć uczonej funkcji, jest wtedy "niedouczona". Sieć neuronowa, wykorzystana w systemie, składa się z trzech warstw: wejściowej, wyjściowej i jednej warstwy ukrytej. Warstwa wejściowa jest 12-elementowym wektorem danych statystycznych obliczonych z danych zawartych w systemie. Warstwa ukryta składa się z 10 neuronów. Natomiast warstwa wyjściowa z 1. Wartość wyjściowego neuronu, otrzymana po przepropagowaniu danych wejściowych przez sieć stanowi szukaną wartość predykcji. Przewagą sieci neuronowej przy predykcji przyszłych zakupów jest jej adaptowalność. Dzięki nieustannie powiększającemu się zbiorowi uczącemu, sieć doskonale będzie dopasowywać się do sposobu konsumpcji produktów przez użytkownika. Możliwe będzie wykrycie nawet nieliniowych zależności, dzięki czemu predykcja będzie dokładniejsza. 2.5.1 Funkcje aktywacji neuronu Funkcją aktywacji neuronu określamy funkcję użytą do obliczenia wartości wyjściowej neuronu. W zależności od zastosowanej funkcji i warstwy, dla której została ona zastosowana, funkcje te mają różne właściwości. 18 ROZDZIAŁ 2. OPIS ELEMENTÓW SYSTEMU Funkcje aktywacji dla warstw ukrytych, stosowane są w celu wprowadzenia nieliniowości w działaniu sieci. To właśnie dzięki nieliniowości, wielowarstwowe sieci neuronowe są tak dobrze adaptowalne. Praktycznie każda funkcja nieliniowa może być wykorzystana jako funkcja aktywacyjna. W praktyce dla sieci z propagacją wsteczną stosuje się funkcje aktywacji, które są różniczkowalne i ograniczone. Funkcja aktywacyjna dla warstwy wyjściowej dobierana jest tak, by otrzymywane wartości wyjściowe dobrze nadawały się do rozkładu i analizy. W zależności od oczekiwanych danych wybierana jest inna funkcja. Funkcje binarne są dobrym wyborem jeśli sieć ma generować odpowiedź typu prawda, f ałsz. Dla wartości ciągłych lepszym wyborem są funkcje sigmoidalne w przypadku danych ograniczonych lub liniowe dla danych wyjściowych nieograniczonych. W ramach testowania sieci zostały wykorzystane dwie różne funkcje aktywacji neuronu: • Bipolarna funkcja sigmoidalana - tangens hiperboliczny f (x) = 1−e−x 1+e−x • Funkcja tożsamościowa f (x) = x 2.5.2 Uczenie sieci Dopasowanie sieci neuronowej poprzez jej uczenie, zostało osiągnięte przy użyciu algorytmu propagacji wstecznej (ang. backpropagation) [12], [11], [9]. Jest to jeden z podstawowych algorytmów uczenia z nauczycielem wielowarstwowych sieci neuronowych jednokierunkowych. Oparty jest on na minimalizacji sumy kwadratów błędów uczenia z wykorzystaniem optymalizacyjnej metody największego spadku. Dzięki zastosowaniu specyficznego sposobu propagowania błędów uczenia sieci powstałych na jej wyjściu, algorytm propagacji wstecznej stał się jednym z najskuteczniejszych algorytmów uczenia sieci. Przykładowa próbka danych propagowana jest w głąb sieci, aż do uzyskania wyniku na jej wyjściu. Dla tak otrzymanego wektora danych wyjściowych obliczany jest błąd sieci. Błąd ten jest przeliczany na podstawie pochodnej funkcji aktywacji oraz wag poszczególnych połączeń i propagowany w głąb sieci w kierunku jej wejścia. Dla każdej warstwy błąd oraz wartość propagowana wyliczane są oddzielnie. Na podstawie obliczonych wartości modyfikowane są wagi poszczególnych połączeń pomiędzy neuronami, przez co następuje większe dopasowanie sieci do zadanego problemu. 2.5. SIEĆ NEURONOWA 19 W systemie zostały zaimplementowane dwa sposoby uczenia sieci: • uczenie pojedynczymi elementami - każdy element systemu uczestniczy w procesie uczenia sieci raz, z jednym współczynnikiem uczenia; • uczenie w oknie n-elementowym - każdy element uczestniczy w procesie uczenia n razy. Za każdym razem współczynnik uczenia może się zmieniać, przez co wpływ, każdej kolejnej rundy uczenia jest mniejszy. 2.5.3 Zastosowanie sieci neuronowych Ze względu na swoje niepowatarzalne zalety obszar zastosowań sieci neuronowych jest rozległy i ciągle nie do końca określony. Stosuje się je wszędzie tam, gdzie nie są wymagane odpowiedzi ilościowe, a jakościowe. Ważniejsze kierunki zastosowań to m.in.: • Predykcja - przewidywanie na podstawie pewnych danych wejściowych, danych wynikowych w systemie. Zaletą sieci w takim użyciu jest fakt, że może ona nauczyć się przewidywania sygnałów wyjściowych bez jawnego definiowania związku pomiędzy danymi wyjściowymi, a wejściowymi. • Klasyfikacja i rozpoznawanie - podział grupy elementów na podgrupy o podobnych cechach. Sieć analizując podane wzorce adaptuje się i nabywa zdolność klasyfikacji obrazów nawet pomimo ich zniekształcenia. • Analiza i kojarzenie danych - znajdowanie związków pomiędzy danymi teoretycznie niepowiązanymi ze sobą. Dzięki zdolności uczenia się i uogólniania doświadczeń, sieci pozwalają zautomatyzować procesy wnioskowania i pomagają wykrywać istotne powiązania pomiędzy danymi. Rysunek 2.5: Rozpoznawanie cyfr pisanych ręcznie. 20 ROZDZIAŁ 2. OPIS ELEMENTÓW SYSTEMU Rysunek 2.6: Rozpoznawanie pozycji ciała człowieka, gestów. • Filtracja sygnałów - często, jeżeli dane pochodzące z różnych źródeł są zakłócone, klasyczne metody eliminacji szumów pozwalają jedynie na usunięcie zakłóceń losowych. W takim wypadku sieć neuronowa może być zastosowana jako filtr danych do eliminacji przekłamań systematycznych. • Optymalizacja - sieci neuronowe (np. sieci Hopfielda) dobrze nadają się do optymalizacji decyzji gospodarczych. Szczególnie ciekawe jest zastosowanie sieci do optymalizacji kombinatorycznej i zagadnień bardzo trudnych obliczeniowo np. klasyczny problem komiwojażera. Rozdział 3 Generator danych Dodatkowym elementem funkcjonalnym systemu jest generator danych. Powstał on z konieczności tworzenia dużych zbiorów uczących i testowych, niezbędnych w czasie tworzenia i pracy z sieciami neuronowymi. Dzięki swej budowie generator jest w pełni skalowalny, a zastosowanie modyfikowalnych ograniczeń pozwala na generowanie danych bardzo zbliżone do rzeczywistych. Przed rozpoczęciem generowania danych użytkownik musi zdefiniować podstawowe parametry, jak: • ramy czasowe dla generowanych danych, • tryb pracy generatora, • tryb uczenia sieci neuronowej. Tryb pracy generatora definiuje zakres danych użytych w czasie pracy generatora. Możliwe jest wygenerowanie danych dla jednego ustalonego produktu, grupy produktów tagu lub całego dostępnego zbioru danych. Możliwe jest także zdefiniowanie trybu uczenia generatora. Dla każdego dodawanego rekordu uczenie może być przeprowadzane na dwa sposoby. Tylko ostatnio dodanym elementem lub w oknie n-elementowym z ostatnich danych. 3.1 Ogólna struktura Budowę generatora najlepiej oddaje struktura wykorzystywanych przez niego encji znajdujących się w bazie danych systemu (3.1). 22 ROZDZIAŁ 3. GENERATOR DANYCH Rysunek 3.1: Diagram ER części bazy danych wykorzystywanej przez generator. Każdemu obiektowi, który może być używany przez użytkowników przypisywane są tagi (tags). Tagi stanowią swego rodzaju kategorie, do których przynależą poszczególne produkty (products) z bazy danych. Przykładowe tagi przedstawia tabela (3.1). Dla każdego z tagów można zdefiniować ograniczenia (constraints) oraz cele (goals). Dodatkowo dla każdego z produktów zdefiniowane są także opakowania (wrapping) zakupowe oraz spożywcze. Opakowania stanowią ogranicznik ilościowy dla elementów wprowadzanych i opuszczających system (lodówkę). Np. w tabeli (3.2) przedstawiono możliwe opakowania dla produktu "Frugo1 " w bazie danych oraz "kierunek" ich przepływu. Wartość In oznacza elementy dodawane do system, a Out elementy z systemu wyjmowane. Opakowanie zdefiniowane dla obu kierunków nie muszą być takie same. Dla każdego typu opakowania zdefiniowane są: nazwa, wielkość oraz jednostka miary, w której jest opisywane. 1 Frugo – marka napojów owocowych należąca do FoodCare Sp. z o.o. z siedzibą w Zabierzowie. 23 3.1. OGÓLNA STRUKTURA Tagi 1 mięso/ryby 2 produkty zbożowe 3 alkohol 4 napoje 5 owoce Tabela 3.1: Przykładowe tagi używane w systemie. Opakowania Opakowanie "Kierunek" butelka 0.5l In butelka 0.5l Out butelka 1.5l In butelka 1.5l Out butelka 0.7l In butelka 0.7l Out butelka 1l In butelka 1l Out Tabela 3.2: Przykładowe opakowania zdefiniowane dla produktu w bazie danych oraz kierunek ich przepływu. 24 ROZDZIAŁ 3. GENERATOR DANYCH 3.2 Cele i ograniczenia Zadaniem obiektów celu i ograniczenia jest takie zdefiniowanie zachowania generatora, by otrzymywane dane były jak najbardziej zbliżone do potencjalnych danych rzeczywistych. Zdefiniowanie przynajmniej jednego celu dla każdego z używanych w czasie generacji tagów jest warunkiem koniecznym do poprawnego działania całego generatora. Różnica pomiędzy celem, a ograniczeniem, jest w ich definicji. Dla celu definiowany jest jego rodzaj oraz wartość, do osiągnięcia której dąży algorytm. Ograniczenia natomiast, stanową widełki, w których dopuszczalne jest działania algorytmu w czasie pracy. W systemie wykorzystywane są 4 możliwe rodzaje ograniczeń/celów: • suma dzienna wykorzystanych elementów, • suma tygodniowa wykorzystanych elementów, • suma miesięczna wykorzystanych elementów, • jednorazowe użycie. Przy wykorzystaniu tych 4 typów ograniczeń i celów definiowane są zasady generowania danych. W stworzonym systemie cele i ograniczenia zostały oparte o rygory dietetyczne zdrowego stylu życia. Dla każdego tagu (grupy produktów żywieniowych) na bazie tabel dietetycznych przypisane zostały sugerowane normy dzienne, a także minima i maxima w poszczególnych okresach. 3.3 Działanie generatora Działanie algorytmu jest heurystyczne i wymaga zdefiniowania przynajmniej jednego celu dla każdego z tagów wykorzystywanych w czasie generowania danych. Ogólny schemat działania algorytmu został przedstawiony na schemacie 3.2. Po zdefiniowaniu przez użytkownika wszystkich niezbędnych parametrów generatora rozpoczyna się praca. Najpierw pobierane są dane obiektów, dla których ma zostać przeprowadzona generacja. Dane zwracane są w postaci listy Arraylist obiektów typu GeneratorData. Każdy obiekt zawiera referencję na obiekt T ag opisujący tag zwracanej grupy danych, a także listę obiektów P roduct opisujących produkty zawarte w tej kategorii. 25 3.3. DZIAŁANIE GENERATORA :GeneratorBean GeneratorDataOptions :GeneratorData generate() Początek generacji getData() Pobranie danych O produktach ::Użytkownik List<FridgeElement> loop [dzień generacji] for each generateForOneDay(date) [obiekt generacji] Generated() :Generated Obiekt zawierający wygenerowane dane doTeaching() Uczenie sieci przy pomocy wygenerowanych danych Rysunek 3.2: Diagram sekwencji generowania danych uczących. Następnie uruchamiana jest pętla działająca dla każdego dnia ze zdefiniowanego okresu. W każdym przebiegu pętli dla każdego z otrzymanych obiektów GeneratorData, generowane są dane o użyciu produktów przypisanych do tego obiektu. Pseudokod działania generatora, dla każdego z obiektów przestawiony został na listingu 1. 26 ROZDZIAŁ 3. GENERATOR DANYCH Algorithm 1 Algorytm generowania danych w pseudokodzie. Require: generationEndT ime while currentT ime 6= generationEndT ime do for GeneratorData in generatedData do setupConstarintsforDate(currentTime) while doW eM eetConstarints 6= true do if canConsume = true then consume() else produce() end if end while end for currentT ime+ = 1 day end while Dla każdej kategorii produktów generowanie odbywa się niezależnie. Najpierw sprawdzane jest, czy nie zostały spełnione warunki końcowe działania algorytmu w postaci ograniczeń i celów (Opisane w 3.2). Jeśli algorytm powinien kontynuować swoją pracę w celu spełnienia wymagań podejmowana jest próba "konsumpcji" obiektu, a w razie jego braku, zapasy są uzupełnianie. Dokładne działanie metod consume i produce zostało opisane w rozdziale 3.4. Po zakończeniu działania generacji danych otrzymana lista obiektów typu Generated zapisywana jest w bazie danych. W zależności od opcji wybranych przez użytkownika możliwe są dwa scenariusze (Rys. 3.3): 1. W przypadku wybrania funkcji uczenia sieci neuronowej, dane umieszczane w bazie danych poddawane są dodatkowemu przetwarzaniu. Dane o konsumpcji zapisywane są do bazy danych bezpośrednio. Natomiast dane o dodawaniu nowych obiektów do systemu, podawane są jeszcze na wejście algorytmu uczącego sieci neuronowej, powodując jej modyfikację i dopasowywanie. 2. W przypadku braku uczenia dla wygenerowanych danych, zmiana występuje jedynie dla danych dodawanych do systemu. Są one po prostu zapisywane w bazie danych, a odpowiadająca im sieć neuronowa nie jest poddawana żadnym modyfikacjom. 27 3.4. METODY CON SU M E I P RODU CE :GeneratorData :FridgeOperations :NetworkOperations loop [obiekt nauki] alt [obiekt dodawanydo systemu] doPrediction() Predykcjadladodawanego elementu add() Dodanie elementu do systemu doTeaching() Wykonanie uczeniasieci neuronowej [obiekt pobieranyzsystemu] takeOut() Pobranie elementu zsystemu Rysunek 3.3: Diagram sekwencji przetwarzania wygenerowanych danych. 3.4 Metody consume i produce Metody consume i produce odpowiadają za dodawanie i pobieranie obiektów do i z bazy danych w czasie generowania danych. Kod źródłowy metod został przedstawiony na listingu 3.1. Metoda consume Metoda consume generuje nowy wpis dotyczący produktów, które zostały usunięte z systemu. Najpierw losowo wybrany zostaje jeden z produktów należących do kategorii, dla której przeprowadzana jest generacja danych. Dla wybranego produktu, losowo wybierane jest dostępne opakowanie lub porcja, która zostanie usunięta z systemu. Przy wyborze sprawdzane jest jedno dodatkowe ograniczenie. Konsumpcja wybranego opakowania nie może spowodować przekroczenia górnych ograniczeń dla generowanej kategorii. 28 ROZDZIAŁ 3. GENERATOR DANYCH Dla tak wybranego produktu następuje sprawdzenie czy możliwe jest usunięcie go z systemu, jeśli tak to odpowiednie dane zostają zmodyfikowane, a obiekt świadczący o przeprowadzonej operacji zostaje wygenerowany i dodany do listy wyników. W przeciwnym wypadku następuje generacja danych potrzebnych do konsumpcji wybranego produktu (3.4). Metoda produce Metoda produce odpowiada za generację wpisów dotyczących produktów dodawanych do systemu. Jeżeli w trakcie konsumpcji wybranego produktu w systemie nie ma go w wystarczającej ilości, następuje wywołanie tej metody z podaniem obiektu, który ma być dodany do systemu. Dla zdefiniowanego obiektu losowo wybierane jest opakowanie/porcja dodawana do systemu. Generowany i dodany do listy wyników jest także obiekt świadczący o przeprowadzonej operacji. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 private void consume ( Date date ) { int prodIdx = generator . nextInt ( products . s i z e () ) ; List<Wrapping> l i s t = new ArrayList<Wrapping>(products . get ( prodIdx ) . getWrappingsOut () ) ; int wrapIdx = generator . nextInt ( products . get ( prodIdx ) . getWrappingsOut () . s i z e () ) ; f l o a t amount = l i s t . get ( wrapIdx ) . getSize () ; int tryCnt = 0; while ( tryCnt++ < 3 && ( consumptionDay + amount > dayMax | | consumptionWeek + amount > weekMax | | consumptionMonth + amount > monthMax) ) { wrapIdx = generator . nextInt ( products . get ( prodIdx ) . getWrappingsOut () . s i z e () ) ; amount = l i s t . get ( wrapIdx ) . getSize () ; } //Add data to f r i d g e u n t i l l we can take out while (amount > productsCount [ prodIdx ] ) { produce ( prodIdx , date ) ; } productsCount [ prodIdx ] -= amount ; consumptionDay += amount ; consumptionWeek += amount ; consumptionMonth += amount ; 3.5. PRZYKŁADOWE WYGENEROWANE DANE 22 generated . add(new Generated ( products . get ( prodIdx ) . getId () , amount , false , date ) ) ; 23 24 25 26 27 28 29 30 } private void produce ( int prodIdx , Date date ){ int wrapIdx = generator . nextInt ( products . get ( prodIdx ) . getWrappingsIn () . s i z e () ) ; List<Wrapping> l i s t = new ArrayList<Wrapping>(products . get ( prodIdx ) . getWrappingsIn () ) ; productsCount [ prodIdx ] += l i s t . get ( wrapIdx ) . getSize () ; 31 32 33 29 } generated . add(new Generated ( products . get ( prodIdx ) . getId () , l i s t . get ( wrapIdx ) . getSize () , true , date ) ) ; Wydruk 3.1: Metody consume i produce. 3.5 Przykładowe wygenerowane dane W niniejszym podrozdziale zaprezentowane zostaną wyniki przykładowej generacji danych. Definicje zmiennych generatora użytych w opisywanym przypadku znajdują się w tabelach 3.3a , 3.3b oraz 3.3c. Przedstawiają one kolejno cele, które generator powinien osiągnąć, ograniczenia nałożone na generator, oraz opakowania możliwe do wykorzystania w czasie pracy. Na wykresach (3.4a) oraz (3.4b) przedstawiono fragment danych otrzymanych w wyniku pracy generatora dla jednego obiektu. Linią ciągłą zaznaczony został aktualny stan posiadania dla danego obiektu w czasie kolejnych kroków generacji danych. Okręgi oznaczają natomiast zmiany dokonywane w kolejnych krokach generacji. Wartości dodatnie oznaczają elementy dodawane do systemu, zaś wartości ujemne elementy z niego zabierane. Wykres (3.4a) przedstawia 100 pierwszych kroków generatora. Rzeczą wyraźnie zauważalną na przedstawionym wykresie jest pogrupowanie wartości elementów dodawanych i zabieranych z systemu. Taki właśnie rozkład wynika z ograniczonej ilości dostępnych opakowań, dla których mogą być przeprowadzane operacje na danym produkcie. 30 ROZDZIAŁ 3. GENERATOR DANYCH Drugi z wykresów (3.4b) przedstawia wycinek danych odpowiadających pojedynczemu dniowi. Można z niego odczytać, że odbyły się dwie operacje dodania elementów do systemu, a także 7 operacji pobrania obiektów. Stan końcowy i początkowy nie są identyczne. Na początku ilość produktu w lodówce jest zerowa. Pierwszy krok generatora to dodanie losowo wybranego dostępnego opakowania produktu. W kolejnych krokach następuje "spożywanie" produktu tak długo, jak jest on jeszcze dostępny. W przypadku braku dalszej możliwości konsumpcji następuje kolejne dodanie elementu. Generacja dla danego dnia kończy się w momencie osiągnięcia celów zdefiniowanych dla pojedynczego dnia/tygodnia/miesiąca. Stan posiadania produktu w lodówce na koniec dnia jest niezerowy. Będzie on punktem wyjścia generatora dla kolejnego dnia. 31 3.5. PRZYKŁADOWE WYGENEROWANE DANE Cele do osiągnięcia Okres Wartość [l] dzienne 2.1 tygodniowe 14.75 miesięczne 59 (a) Zdefiniowane cele. Ograniczenia Okres Wartość min [l] Wartość max [l] dzienne 1.75 3 tygodniowe 14 20 miesięczne 50 70 (b) Zdefiniowane ograniczenia. Opakowania in Butelka 0.5l in Butelka 1.5l in Butelka 0.7l in Butelka 1l out Butelka 0.5l out Szklanka out Dzbanek (c) Zdefiniowane opakowania. Tabela 3.3: Zmienne zdefiniowane dla produktu w czasie generacji danych przedstawionych na wykresach na Rysunku 3.4. 32 ROZDZIAŁ 3. GENERATOR DANYCH (a) 100 kroków generatora. (b) Dane dla jednego dnia. Rysunek 3.4: Wykres danych wygenerowanych przez generator dla jednego produktu. Rozdział 4 Predykcja list zakupowych 4.1 Wstęp Prognozowanie (późnołac. prognosis) [2] lub predykcja (łac. prædictus) – naukowa metoda przewidywania tego, w jaki sposób będą kształtowały się w przyszłości procesy lub zdarzenia. W trakcie procesu prognozowania formułuje się sąd na temat przyszłych stanów zjawisk i zdarzeń nazywany prognozą. Wyróżniamy dwa rodzaje czynników, które mogą mieć wpływ na wynik predykcji: • egzogeniczne (zewnętrzne) - są to czynniki, na które nie ma się wpływu, a które muszą być uwzględnione w trakcie predykcji jako zewnętrzne ograniczenia przebiegu zjawisk i procesów, • endogeniczne (wewnętrzne) - czynniki, które mogą być kształtowane przez użytkowników. Predykcja wykorzystuje informację dotyczącą czynników i ich wpływu na badane zjawisko. Badane są relacje między tymi czynnikami, a badanym zjawiskiem. Do wnioskowania o przyszłości, wykorzystuje się kształtowanie czynników w przeszłości. W prognozowaniu szeroko wykorzystywane są zagadnienia z zakresu statystyki matematycznej. W cyklu prognozowania [13] danych wyróżniamy pięć podstawowych etapów, których obecność jest niezależna od wybranej metody predykcji. Są to: 1. definiowanie problemu predykcji - określenie zjawiska oraz celu i okresu prognozy, 2. zebranie danych i ich analiza - znalezienie czynników mających bezpośredni lub pośredni wpływ na prognozę i opisanie ich w sposób umożliwiajacy wykorzystanie w modelu, 34 ROZDZIAŁ 4. PREDYKCJA LIST ZAKUPOWYCH 3. wybór metody i budowy modelu prognostycznego, 4. postawienie prognozy - wykorzystanie stworzonego modelu na rzeczywistych danych w celu sprawdzenia jego działania, 5. ocena jakości prognozy - obliczenie metryk pozwalających określić dokładność predykcji. 4.2 Predykcja w systemie W opisywanym systemie predykcja list zakupowych opiera się o dane historyczne zgromadzone w czasie jego pracy. Na rysunku 4.1 przedstawiony został diagram sekwencji procesu predykcji. Proces rozpoczynany jest przez użytkownika. Najpierw z bazy danych pobierane są dane, dla których proces predykcji będzie wykonany. Dane te przekazywane są następnie do obiektu klasy N etworkOperations odpowiedzialnego za operacje związane z sieciami neurnowymi, gdzie odbywa się predykcja. Każdemu z produktów zdefiniowanemu przez użytkownika w systemie przypisana jest osobna sieć neuronowa. Takie podejście powoduje, że system jest bardziej elastyczny. Nie wszyscy użytkownicy muszą korzystać z produktów w ten sam sposób. Zastosownie niezależnych sieci dopasowuje system do użytkownika i jego stylu konsumpcji, a nie produktów, które są w nim zawarte. Ceną za elastyczność systemu, jest jego większa złożoność. Każda operacja predykcji wymaga pobrania z bazy danych inforamcji o od kilku, do kilkudziesięciu sieciach neuronowych i przeprowadzenia na nich obliczeń. Nie tylko produkty mają przypisane sieci neuronowe. Również każda z kategorii (Tag’ów), do której należą produkty użytkownika, otrzymuje swoją niezależną sieć neuronową. Daje to użytkownikowi większą swobodę w użytkowaniu aplikacji. Możliwe jest zażądanie dokładnej listy zakupowej lub ogólnych wskazówek, co należy kupić. W pierwszym przypadku zwrócona zostanie lista zawierająca konkretne produkty potrzebne w kuchni. W drugim natomiast, lista kategorii z predykcjami dla nich oraz ewentualnie propozycje produktów, które mieszczą się w ramach danej kategorii. 4.2.1 Dane wejściowe Predykcja ile należy kupić poszczególnych produktów odbywa się na podstawie aktualnego stanu posiadania produktu w systemie oraz historii jego użycia. W czasie pracy systemu zbierana jest pełna historia tego, jak produkty były dodawane i pobierane. Na 35 4.2. PREDYKCJA W SYSTEMIE :PredictionManager :FridgeOperations :NetworkOperations getPrediction() findProducts() Żądanie użytkownika Pobranie produktów do predykcji ::Użytkownik List<FridgeElement> getPredictions(List<FridgeElements>) loop [obiekt predykcji] doPrediction() Zwrócenie wartości predykcji renderView Zwrócenie wyników Rysunek 4.1: Diagram sekwencji predykcji danych. jej podstawie możliwe jest obliczenie różnego rodzaju statystyk. To właśnie one stanowią dane wejściowe dla sieci neuronowej, to na ich podstawie szacowane są kolejne zakupy, których należałoby dokonać. Statystyki dla poszczególnych produktów, podobnie jak sieci nueronowe, są rzeczą indywidualną, przypisaną do każdego z użytkowników systemu. Spośród wszystkich możliwych statystyk wybrane zostało dwanaście wartosci, które to stanowią wektor danych wejściowy dla sieci neuronowej. Wykorzystane wartości zostały przedstawione w tabeli (4.1). Wybierając dane stanowiące wejście algorytmu kierowano się w szczególności następującymi zasadami: • dobre odwzorowanie zmian zachodząchych w konsumpcji w różnych okresach, 36 ROZDZIAŁ 4. PREDYKCJA LIST ZAKUPOWYCH • uniezależnienie od chwilowych, jednorazowych wahań wynikających z realiów życia codziennego. Dane wejściowe dla algorytmu predykcji Nr. Dana wejściowa 1 aktualny stan Opis Ilość produktu aktualnie posiadana przez użytkownia w lodówce. 2 średnia z całości Wartość średnia liczona na podstawie wszystkich użyć produktu. 3 średnia dzienna 4 średnia na dzień tygodnia Średnie dzienne zużycie produktu. Średnie zużycie produktu w poszczególnych dniach tygodnia. 5 średnia na dzień roku Średnie zużycie produktu w poszczególnych dniach roku. 6 średnia tygodniowa 7 Średnie tygodniowe zużycie produktu. średnia na dany tydzień roku Średnie zużycie produktu w poszczególnych tygodniach roku. 8 średnia miesięczna 9 średnia roczna 10 suma za ostatni tydzień Średnie miesięczne zużycie produktu. Średnie roczne zużycie produktu. Ilość produktu zużyta w ostatnim tygodniu użytkowania. 11 suma za ostatni miesiąc Ilość produktu zużyta w ostatnim miesiącu użytkowania. 12 suma za ostatni rok Ilość produktu zużyta w ostatnim roku użytkownia. Tabela 4.1: Dane wejściowe używane w czasie predykcji list zakupowych. Ponieważ różne produkty mają różne opakowania, charakteryzujące się różnymi miarami wielkości, niezbędne było ujednolicenie danych wprowadzanych na wejście sieci neurnowej. Dane normalizowane są do przedziału < 0; 1 >. Takie działanie zostało wymuszone poprzez użycie sigmoidlanej funkcji aktywacji neuronu dla warstwy ukrytej sieci. Normalizacja danych wejściowych odbywa się na podstawie zgromadzonych danych historycznych. Jest to statystyczna standaryzacja. Dane są normalizowane, tak by wynikowa wartość oczekiwana była równa 0, a wariancja danych wynosila 1, wg. wzoru: 4.2. PREDYKCJA W SYSTEMIE xn = 37 x−µ , σ gdzie: • xn - zmienna ustandaryzowana, • x - zmienna nieustandaryzowana, • µ - wartość średnia z populacji, • σ -dochylenie standardowe populacji. Normalizacja danych niesie za sobą konieczność skalowania wyniku predykcji. Ze względu na użyte funkcje aktywacyjne dane wyjściowe z sieci neuronowej także zawierają się w przedziale < 0; 1 >. Dlatego przed zaprezentowaniem ich użytkownikowi są one poddawane operacji będącej odwrotnością przedstawionej standaryzacji. 4.2.2 Działanie algorytmu Algorytm predykcji można podzielić na dwa kroki: jawny i niejawny. W ramach kroku jawnego obliczane sa dane prezentowane użytkownikowi. Krok ten polega na obliczeniu wyjścia sieci neuronowej dla aktualnego zadanego stanu systemu. System, za pomocą stworzonych procedur składowanych, pobiera dane z bazy danych i poddaje je przetwarzaniu. Stworzone zostały dwie procedury. Jedna, obliczająca dane dla poszczególnych analizowanych produktów. Druga, licząca statystyki dla całych kategorii (tagów). Dane propagowane są w głąb sieci. Przechodząc przez kolejne warstwy dane dopasowywane są do wzorców, przyswojonych przez sieć w procesie uczenia. Na tej podstawie wyliczane jest wyjście, będące odpowiedzią sieci na zadany wektor danych wejściowych. Drugim, niejawnym krokiem jest uczenie sieci neuronowej. Ta część algorytmu wywoływana jest za każdym razem, gdy użytkownik dodaje nowe produkty do systemu. Następuje wtedy uczenie sieci nowo pozyskanymi danymi. Pierwszym krokiem uczenia jest uzyskanie odpowiedzi sieci na wektor danych wejściowych, odpowiadających aktualnemu stanowi systemu. W tym celu przeprowadzana jest zwykła predykcja, jej wynik nie jest jednak prezentowany użytkownikowi. Jest on wykorzystywany w celu obliczenia błędu odpowiedzi sieci. Liczony błąd jest błędem średniokwadratowym, pomiędzy wartością predykcji, a wartością otrzymaną w wyniku działania użytkownika. Obliczona wartość 38 ROZDZIAŁ 4. PREDYKCJA LIST ZAKUPOWYCH błędu wykorzystywana jest do przeprowadzenia kolejengo kroku uczenia. Uczenie w systemie odbywa się dla jednego elementu1 . Wartość błędu propagowana jest w głąb sieci zgodnie z algorytmem backpropagation [8] uczenia sieci neuronowych. Idąc w głąb sieci, dla każdego poziomu obliczany jest błąd, wynikający z błędu obliczonego na wyjściu sieci. Na tej podstawie modyfikowane są wagi połaczeń poszczególnych neuronów, zwiększając dopasowanie sieci do wzroca podanego w wektorze danych wejściowych. 4.2.3 Przykłady predykcji i ich intepretacja W tym podrozdziale zostaną zaprezentowane dane otrzymywane na różnym etapie uczenia sieci neurnowej. Uczenie zostało przeprowadzone dla wynikowego systemu. Algorytm wykonuje jedną iterację uczenia z krokiem η = 0.02. W tabelach 4.2 oraz 4.3 przedstawione zostały dane otrzymane w czasie działania systemu. Dane testowe, użyte w systemie zostały wygenerowane przy użyciu stworzonego generatora. Przedstawiają one użytkowanie wybranych produktów na przestrzeni 13 lat. W tabelach przedstawione zostały przykładowe wyniki dla trzech predykcji, równo oddalonych od siebie o rok. Dane w pierwszej z tabel (4.2) zawierają wyniki predykcji dla poszczególnych produktów. Ponieważ każdy z produktów ma własną sieć neurnową, wyniki predykcji dla niego są niezależne od innych. Wynik dla pojedynczego produktu jest informacją, jaką ilość produktu potrzebujemy, obliczoną na podstawie naszych statystyk użycia. Porównanie wyniku predykcji z aktualnym stanem, daje nam informację o potencjalnej liście zakupowej. Lista dla pojedynczych produktów zawiera informację dla wszystkich produktów, które kiedykolwiek były użyte przez użytkownika. Powoduje to, że niektóre z nich mogą się dublować. Np. na liście znajdują się niezbędne ilości dla wołowiny i wieprzowiny. Oczywiście użytkownik potrzebuje tylko jednego z tych produktów. To od niego zależy decyzja, który z nich kupi. Dużo łatwiejsza w interpretacji jest lista przedstawiona w tabeli 4.3. Zawiera ona sugestie zakupowe obliczone dla poszczególnych kategorii produktów. Podobnie jak dla pojedynczych obiektów, w tabeli znajduje się aktualny stan posiadania dla każdej z kategorii (suma stanów dla poszczególnych produktów) oraz wartości predykcji - minimum, które jest potrzebne. Wartości predykcji obliczane są na podstawie statystyk użycia. Ta lista daje sugestie, jakie kategorie produktów są potrzebne oraz ich orientacyjne ilości. 1 Wybór takiego sposobu uczenia omówiony został w rozdziale 5. Przedstawiono tam omówienie wyni- ków przeprowadzonych badań i wnioski z nich płynące. 39 4.2. PREDYKCJA W SYSTEMIE Użytkownik wiedząc, co kryje się pod każdą z kategorii, może bez problemu zaplanować zakupy. Produkt Stan Predykcja Stan Predykcja Stan Predykcja Jednostka 09.09.2011 09.09.2012 09.09.2013 Żywiec 1,35 0,35 1,36 1,55 2,55 1,20 l Łomża 0,63 1,22 1,69 1,12 1,06 1,38 l Bordeaux 0,6 0,59 0,15 0,60 0,15 0,56 l Wieprzowina 0 718,90 300 429,47 200 575,23 g Wołowina 700 670,86 600 916,91 400 705,57 g Drób 300 966,63 500 990,45 100 970,07 g Ryby 200 792,30 200 816,33 700 746,00 g Biała kiełbasa 800 321,18 200 288,86 750 216,43 g Ser salami 0 203,91 0 129,04 40 120,60 g Twaróg 250 184,89 280 148,16 100 228,68 g Woda żywiec 0,05 0,48 0,2 0,46 0,3 0,40 l Frugo 0,4 0,58 0,2 0,57 0,4 0,02 l Fanta 0,63 0,76 0,37 0,70 0,86 0,79 l Kasza 200 597,18 700 509,76 500 443,21 g Chleb 20 410,20 200 647,64 200 506,56 g Mleko 0,75 0,77 0,25 0,78 0,75 0,57 l Maślanka 0,25 0,38 0 0,40 0,25 0,46 l Margaryna 140 339,64 20 291,42 80 240,93 g Masło 15 292,82 40 329,68 295 134,50 g Jogurt 0 0,39 0 0,34 0,25 0,28 l Cukierki 0 2,98 0 2,98 3 2,98 opak Jabłka 1000 489,03 400 399,43 450 336,50 g Śliwki 990 410,06 610 390,13 520 359,74 g Pomidor 430 237,15 470 321,06 200 231,63 g Ziemniaki 200 257,59 0 245,36 250 253,81 g Papryka 530 684,42 20 675,59 680 536,72 g Marchewka 710 216,77 740 230,64 220 291,95 g Tabela 4.2: Stan systemu przed predykcją, oraz dane otrzymane w wyniku działania algorytmu. 40 ROZDZIAŁ 4. PREDYKCJA LIST ZAKUPOWYCH Kategoria Stan Predykcja Stan Predykcja Stan Predykcja Jednostka 09.09.2011 09.09.2012 09.09.2013 Mięso/ryby 50 1212,43 100 1214,46 3210 1166,7 g Pordukty zbożowe 0 674,671 0 736,844 700 800,743 g Alkohol 1,35 1,10919 0,15 1,39997 3,90 0,259566 l Napoje 0,63 1,68102 0,2 1,68765 1,90 1,56058 l Owoce 300 1606,8 500 1605,69 2140 1482,06 g Warzywa 430 1138,27 620 1133,85 1360 1049,18 g Słodycze 3 10,0379 0 9,98359 13 10,2833 opak Produkty mleczne 0,75 0,83944 0,25 0,832772 1,25 0,892843 l Nabiał 400 266,97 280 241,251 260 207,669 g Tłuszcze 140 284,835 40 269,719 375 28,886 g Tabela 4.3: Stan systemu przed predykcją, oraz dane otrzymane w wyniku działania algorytmu. Rozdział 5 Otrzymane wyniki 5.1 Wyniki przeprowadzonych doświadczeń W trakcie pracy nad systemem zostało przeprowadzonych wiele symulacji, mających na celu potwierdzenie tezy, o możliwości stosowania sieci neuronowych w predykcji list zakupowych. Symulacje dostarczyły wielu interesujących wyników. Sprawdzony został, wpływ na działanie sieci, jaki mają poszczególne czynniki i zmienne systemowe. Symulowane były warunki normalnego użytkowania aplikacji przez zwykłego użytkownika. Przeprowadzane testy miały za zadanie sprawdzić długodystansowe zachowanie się sieci. W związku z tym wszystkie testy odbywały się na danych uzyskanych ze stworzonego i opisanego w tej pracy generatora (Rozdział 3). W trakcie przeprowadzanych testów rozważane były dwie różne metody uczenia sieci: 1. Pierwsza z metod zakładała uczenie sieci każdym z elementów tylko raz. Zastosowanie takiego podejścia eliminowało ryzyko wystąpienia problemu nasycenia sieci neuronowej. Jednocześnie pojedyncze wektory wejściowe, stanowiące duże odstępstwa od normy, miały także mniejszy wpływ na końcowy efekt uczenia. Zmienną mającą największy wpływ na skuteczność tej metody uczenia jest współczynnik kroku uczenia η, określający wpływ obliczonego błędu odpowiedzi sieci, na wagi połączeń pomiędzy warstwami. 2. Druga metoda zakładała uczenie sieci w oknie o zdefiniowanym rozmiarze (n). W przypadku takiego podejścia każdy element brał udział w uczeniu n razy, przez co zwiększał się jego wpływ na końcowy wynik. Uczenie w oknie zwiększa za to ryzyko nasycenia się sieci w wyniku złego dobrania parametrów. Niezbędnym, w takim podejściu było dopasowanie wartości współczynnika kroku uczenia η tak, aby był 42 ROZDZIAŁ 5. OTRZYMANE WYNIKI on malejący dla każdego kolejnego powtórzenia danego elementu i nie powodował nasycenia, a także dobranie wielkości okna w którym przeprowadzana jest nauka. 5.1.1 Wykorzystane dane testowe W dalszej części rozdziału przedstawione zostały wyniki otrzymane poprzez przeprowadzenie mechanizmu uczenia sieci na zbiorze 17652 operacji. Wszystkie operacje zostały wygenerowane przy użyciu przedstawionego już generatora danych testowych. Spośród wszystkich operacji, 3562 to operacje dodawania obiektu do bazy danych, dla których przeprowadzone było uczenie. Pozostałe, to operacje zabierania produktów z systemu, mające jedynie wpływ na statystyki używane jako dane wejściowe dla sieci neurnowej. Użyte dane są odpowiednikiem danych za 13 lat używania produktu. W tabelach 5.1 przedstawione zostały zmienne generatora użyte w czasie generacji danych testowych. Cele do osiągnięcia Ograniczenia Okres Wartość [g] Okres Wartość min [g] Wartość max [g] dzienne 386 dzienne 350 500 tygodniowe 2580 tygodniowe 2500 4000 miesięczne 10320 miesięczne 9500 15500 (a) Zdefiniowane cele. (b) Zdefiniowane ograniczenia. Opakowania in Opakowanie 1000g in Opakowanie 500g in Opakowanie 200g in Opakowanie 100g out Porcja 200g out Porcja 100g out Porcja 50g (c) Zdefiniowane opakowania. Tabela 5.1: Zmienne zdefiniowane w generatorze dla produktu użytego w czasie symulacji uczenia sieci. 43 5.1. WYNIKI PRZEPROWADZONYCH DOŚWIADCZEŃ 5.1.2 Otrzymane wyniki Na rysunkach 5.3, 5.4, 5.5 oraz 5.6 przedstawione zostały wyniki predykcji przy uczeniu sieci pojedynczym elementem dla różnych wartości współczynnika kroku uczenia. Z kolei rysunki 5.7, 5.8 oraz 5.9 przedstawiają wyniki predykcji przy uczeniu w oknie n-elementowym. Każdy z rysunków zawiera dwa wykresy: • wykres całego procesu uczenia i wszystkich otrzymanych w nim wartości, • wykres ostatnich 100 kroków uczenia, pokazujący jakość dopasowania sieci. Na poszczególnych wykresach można wyróżnić dwie krzywe będące odzwierciedleniem wyników symulacji. Czerwonym kolorem oznaczone zostały dane otrzymane z generatora, niebieskim - wyniki predykcji otrzymywane w czasie trwania symulacji. Rysunek 5.10 prezentuje natomiast wykresy będące złożeniem wyników wszystkich pomiarów w obu kategoriach. Na wykresie zostało zaprezentowane 100 ostatnich kroków każdej z symulacji. Czerwonym kolorem, tak samo jak na pozostałych wykresach, oznaczone zostały dane otrzymane z generatora, pozostałe kolory stanowią poszczególne wyniki symulacji. Patrząc na wszystkie przedstawione wykresy łatwo można zauważyć wpływ, jaki na wyniki ma zmiana współczynnika kroku uczenia (η). Im większa wartość η tym większe reakcje sieci na każdy przebieg procesu uczenia. Sieć szybciej dostosowuje się do danych i szybciej zaczyna produkować poprawne odpowiedzi. Zbyt duży współczynnik może jednak spowodować efekt przeuczenia sieci i zbytniego dopasowania do pewnego wzorca, przez co staje się ona całkowicie bezużyteczna. Przykład takiego zachowania sieci widać na rysunku 5.7, gdzie sieć, po początkowym etapie uczenia i minimalizacji błędów, zaczyna ewoluować w przeciwnym kierunku. Dobrze widoczne jest to na rysunku 5.2c przedstawiającym zależność błędu uczenia od kolejnych kroków symulacji. Wykresy błędów dla poszczególnych symulacji zostały przedstawione na rysunkach 5.1 oraz 5.2. Dane przedstawione na wykresach zostały znormalizowane w celu lepszego ich zaprezentowania. Z wykresów odpowiadających poszczególnym symulacjom widać, jak zachowywała się sieć w czasie nauki. Nie licząc wspomnianego już wykresu 5.2c, obserwujemy wyraźny spadek wielkości błędów predykcji. Przebieg każdej z funkcji przedstawionych na wykresach można opisać za pomocą równania funkcji f (x) = 1 , ex która asymptotycznie dąży do 0. Analizując tempo spadku ilości błędów, a wiec krzywiznę wykresu, można także wnioskować o szybkości uczenia się sieci. Im szybciej wykres opada, tym szybciej 44 ROZDZIAŁ 5. OTRZYMANE WYNIKI (a) z krokiem 0.1. (b) z krokiem 0.02. (c) z krokiem 0.05. (d) z krokiem 0.005. Rysunek 5.1: Wykresy błędów predykcji dla uczenia pojedynczym elementem. sieć zaczyna dopasowywać się do otrzymywanych danych. Pod tym względem najlepiej wypadają następujące konfiguracje: • uczenie pojedynczym elementem z krokiem uczenia η = 0.1, • uczenie w oknie 5-elementowym z krokami η = [0.02, 0.005, 0.001]. W obu tych przypadkach sieć stabilizuje się po około 500 krokach uczenia, co widać na wykresach 5.1a i 5.2b. Wykresy błędów pokazują także doskonale jakość predykcji dla poszczególnych ustawień sieci nueronowej. Zdecydowanie najlepiej wypadają konfiguracje: • uczenie pojedynczym elementem z krokiem uczenia η = 0.02. • uczenie w oknie 4-elementowym z krokami η = [0.02, 0.002, 0.001, 0.0005]. Jak widać na rysunkach 5.1b oraz 5.2a wykres błędu dla takich konfiguracji jest najmniejszy. 45 5.1. WYNIKI PRZEPROWADZONYCH DOŚWIADCZEŃ (a) okno 4-elementowe z krokami 0.02, (b) okno 5-elementowe z krokami 0.02, 0.002, 0.001, 0.0005. 0.005, 0.001. (c) okno 5-elementowe z krokiem 0.02. Rysunek 5.2: Wykresy błędów predykcji dla uczenia w oknie n-elementowym. 46 ROZDZIAŁ 5. OTRZYMANE WYNIKI (a) Pełny wynik uczenia. (b) 100 ostatnich kroków uczenia. Rysunek 5.3: Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.1. 5.1. WYNIKI PRZEPROWADZONYCH DOŚWIADCZEŃ (a) Pełny wynik uczenia. (b) 100 ostatnich kroków uczenia. Rysunek 5.4: Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.05. 47 48 ROZDZIAŁ 5. OTRZYMANE WYNIKI (a) Pełny wynik uczenia. (b) 100 ostatnich kroków uczenia. Rysunek 5.5: Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.02. 5.1. WYNIKI PRZEPROWADZONYCH DOŚWIADCZEŃ (a) Pełny wynik uczenia. (b) 100 ostatnich kroków uczenia. Rysunek 5.6: Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.005. 49 50 ROZDZIAŁ 5. OTRZYMANE WYNIKI (a) Pełny wynik uczenia. (b) 100 ostatnich kroków uczenia. Rysunek 5.7: Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.02 w oknie 5-elementowym. 5.1. WYNIKI PRZEPROWADZONYCH DOŚWIADCZEŃ 51 (a) Pełny wynik uczenia. (b) 100 ostatnich kroków uczenia. Rysunek 5.8: Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.02, 0.005, 0.001 w oknie 5-elementowym. 52 ROZDZIAŁ 5. OTRZYMANE WYNIKI (a) Pełny wynik uczenia. (b) 100 ostatnich kroków uczenia. Rysunek 5.9: Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.05, 0.002, 0.001, 0.0005 w oknie 4-elementowym. 5.1. WYNIKI PRZEPROWADZONYCH DOŚWIADCZEŃ (a) Uczenie pojedynczym elementem. (b) Uczenie w oknie n-elementowym Rysunek 5.10: 100 ostatnich kroków uczenia dla wszystkich symulacji. 53 54 ROZDZIAŁ 5. OTRZYMANE WYNIKI Test zgodności χ2 5.1.3 Rysunek 5.11 przedstawia dwa wykresy funkcji zgodności wartości predykcji do wartości rzeczywistej. W celu stworzenia wykresów dla danych otrzymanych z symulacji przeprowadzone zostały testy zgodności χ2 [10]. Test ten, będący jednym z testów Pearsona, służy do porównania ze sobą zaobserwowanego rozkładu pewnej zmiennej z jej teoretycznym rozkładem. χ2 = Pn i=1 ( Oi −Ei 2 ) σi gdzie: • Oi - wartość mierzona, • Ei - odpowiadająca wartość teoretyczna (oczekiwana), wynikająca z hipotezy, • σi - odchylenie standardowe, • n - liczba pomiarów. Test przeprowadzony był w przedziałach. Pięć pierwszych przedziałów jest 100-elementowych, pozostałe zaś mają po 500 elementów. Takie podejście zostało zastosowane, by pokazać z większą dokładnością zmiany zachodzące w czasie uczenia się sieci. Zwłaszcza na początku proces ten charakteryzuje się dość dużą zmiennością, co widać w sporych wahaniach na wykresach. Wraz z uczeniem się sieci dopasowanie stabilizuje się na wysokim poziomie ufności. Wynik tego testu potwierdza poprawność uczenia sieci, a także wykorzystania tej metody do predykcji danych. 5.1. WYNIKI PRZEPROWADZONYCH DOŚWIADCZEŃ 55 (a) Wyniki prawdopodobieństw dopasowania dla uczenia pojedynczym elementem. (b) Wyniki prawdopodobieństw dopasowania dla uczenia w oknie n-elementowym. Rysunek 5.11: Wyniki prawdopodobieństw dopasowania wynikające z testu dopasowania χ2 obliczone w przedziałach zaznaczonych na wykresie. Rozdział 6 Wnioski i perspektywy rozwoju systemu 6.1 Wnioski Przedstawione wyniki badań pokazują, że zbudowanie systemu predykcji list zakupowych w oparciu o sieci neuronowe typu feed forward, których danymi wejściowymi są dane statystyczne z użycia produktów, jest w pełni możliwe i wykonalne. Zastosowana trójwarstwowa sieć neuronowa dobrze adaptuje się do specyfiki tego zadania. Odpowiednie dobranie parametrów uczenia skutkuje otrzymaniem sprawnego systemu predykcji charakteryzującego się niskim poziomem błędów i dużą adaptowalnością do zmieniających się warunków. Na podstawie symulacji optymalnym krokiem uczenia dla omówionej sieci jest η = 0.02 w przypadku uczenia pojedynczym elementem oraz zestaw parametrów η = [0.02, 0.005, 0.001] dla ucznia w oknie n-elementowym. Tak sparametryzowana sieć ma najniższe błędy predykcji przy zachowaniu dużej adaptowalności. Przedstawiona realizacja projektu pokazała, że wymagania stawiane przed takim systemem są w pełni osiągalne, przy użyciu opisanych narzędzi. 6.2 Perspektywy rozwoju i zastosowania systemu Otrzymane w toku badań wyniki są obiecujące w kontekście wykorzystania tej metody w systemie komercyjnym. W celu osiągnięcia tego niezbędne byłyby jednak pewne modyfikacje powstałej już platformy. Stworzony system jest dość ubogi jeśli chodzi o funkcjonalności. Poza zwykłą rejestracja użytkowników i możliwością zarządzania ich produktami 58 ROZDZIAŁ 6. WNIOSKI I PERSPEKTYWY ROZWOJU SYSTEMU nie daje większego pola manewru. System może być rozbudowany o dodatkowe możliwości społecznościowe dla użytkowników, dzięki czemu stałby się atrakcyjniejszy. Wskazanym byłoby także opracowanie i zaimplementowanie dodatkowych metod dostępu do danych. Przede wszystkim aplikacji mobilnej, pozwalającej na całkowity dostęp do danych jak i zarządzanie kontem użytkownika. Pewne kroki w kierunku takiego rozwoju systemu zostały poczynione w czasie prac nad projektem. Stworzony został serwlet pozwalający na zdalny dostęp do danych zawartych w bazach. Dane wymieniane były przy pomocy formatu JSON. Modyfikacje te nie miały żadnego wpływu na strukturę wykorzystywanej bazy danych. Całość serwletu stanowi oddzielną część aplikacji, powiązaną z główną aplikacją jedynie poprzez wspólne typy danych, funkcjonalności i bazę danych. Spis literatury [1] http://javaserverfaces.java.net - Strona domowa projetku JSF. [2] http://pl.wikipedia.org/wiki/prognozowanie - Wikipedia - Wolna encyklopedia 2013, definicja predykcji. [3] http://tomcat.apache.org - Strona domowa projetku serwera aplikacji Apache Tomcat. [4] http://www.hibernate.org - Strona domowa projetku Hibernate. [5] http://www.mysql.com - Strona domowa serwera baz danych MySQL. [6] http://www.oracle.com/us/javaee - Strona internetowa z dokumentacją dla Java EE. [7] http://www.primefaces.org - Strona domowa projetku PrimeFaces. [8] Ch. M. Bishop. Neural Network for Pattern Recognition. Calderon Press, Oxford UP, 1995. [9] W. Jędruch J. Żurada, M. Barski. Sztuczne sieci neuronowe. Podstawy teorii i zastosowania. Wydawnictwo Naukowe PWN, 1996. [10] John R. Taylor. Wstęp do analizy błędu pomiarowego. Wydawnictwo Naukowe PWN, 2012. [11] Ah Chung Tsoi. Gradient based learning methods. Adaptive Processing of Sequences and Data Structures Lecture Notes in Computer Science Volume 1387, 1998. [12] Yoshua Bengio Patrick Haffner Yann LeCun, Leon Bottou. Gradient-based learning applier do document recognition. Proceedings of the IEEE, 1998. [13] Aleksander Zeliaś. Teoria prognozy. Polskie Wydawnictwo Ekonomiczne, 1997. Spis rysunków 2.1 Diagram ER dla głównych typów danych aplikacji. . . . . . . . . . . . . . 12 2.2 Diagram ER encji wykorzystywanych przez generator danych. . . . . . . . 13 2.3 Diagram ER encji wykorzystywanych przez sieci neuronowe. . . . . . . . . 13 2.4 Przykład sieci neuronowej z propagacją wsteczną. . . . . . . . . . . . . . . 17 2.5 Rozpoznawanie cyfr pisanych ręcznie. . . . . . . . . . . . . . . . . . . . . . 19 2.6 Rozpoznawanie pozycji ciała człowieka, gestów. . . . . . . . . . . . . . . . 20 3.1 Diagram ER części bazy danych wykorzystywanej przez generator. . . . . . 22 3.2 Diagram sekwencji generowania danych uczących. . . . . . . . . . . . . . . 25 3.3 Diagram sekwencji przetwarzania wygenerowanych danych. . . . . . . . . . 27 3.4 Wykres danych wygenerowanych przez generator dla jednego produktu. . . 32 4.1 Diagram sekwencji predykcji danych. . . . . . . . . . . . . . . . . . . . . . 35 5.1 Wykresy błędów predykcji dla uczenia pojedynczym elementem. . . . . . . 44 5.2 Wykresy błędów predykcji dla uczenia w oknie n-elementowym. . . . . . . 45 5.3 Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.1. . . . . . . . . 46 5.4 Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.05. . . . . . . . 47 5.5 Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.02. . . . . . . . 48 5.6 Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.005. . . . . . . 49 50 5.8 Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.02, 0.005, 0.001 w oknie 5-elementowym. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 5.9 Wyniki uczenia się sieci dla współczynnika kroku uczenia 0.05, 0.002, 0.001, 0.0005 w oknie 4-elementowym. . . . . . . . . . . . . . . . . . . . . . . . . 52 5.10 100 ostatnich kroków uczenia dla wszystkich symulacji. . . . . . . . . . . . 53 5.11 Wyniki prawdopodobieństw dopasowania wynikające z testu dopasowania χ2 obliczone w przedziałach zaznaczonych na wykresie. . . . . . . . . . . . 55 Spis tabel 3.1 Przykładowe tagi używane w systemie. . . . . . . . . . . . . . . . . . . . . 23 3.2 Przykładowe opakowania zdefiniowane dla produktu w bazie danych oraz kierunek ich przepływu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3 Zmienne zdefiniowane dla produktu w czasie generacji danych przedstawionych na wykresach na Rysunku 3.4. . . . . . . . . . . . . . . . . . . . . . . 31 4.1 Dane wejściowe używane w czasie predykcji list zakupowych. . . . . . . . . 36 4.2 Stan systemu przed predykcją, oraz dane otrzymane w wyniku działania algorytmu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.3 Stan systemu przed predykcją, oraz dane otrzymane w wyniku działania algorytmu. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.1 Zmienne zdefiniowane w generatorze dla produktu użytego w czasie symulacji uczenia sieci. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42