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