\chapter{Eksperymenty porównujące skuteczność algorytmów}

\section{Cel i~przebieg eksperymentów}

\subsection{Cel}

We współczesnym świecie coraz częściej używana jest technologia uczenia maszynowego. Z tego powodu należy dobierać odpowiednie algorytmy do konkretnych zadań. W~obecnej literaturze brak jest wciąż pełnej analizy, w~jakiej sytuacji, które algorytmy działają najbardziej.

Podczas gdy często spotykane są porównania poszczególnych algorytmów, zwykle dotyczą one konkretnego trybu działania: wsadowego lub strumieniowego. Celem eksperymentów jest porównanie skuteczności działania algorytmów w~obu trybach. 

\subsection{Przebieg eksperymentów}

Kluczowym dla skutecznego wyboru odpowiedniego algorytmu są dwie opcje:
\begin{itemize}
    \item jeżeli mam do wyboru jeden algorytm działający w~dwóch trybach, który tryb powinienem wybrać,
    \item jeżeli mam do wyboru wiele algorytmów, z~której grupy algorytmów powinienem szukać najlepszego (wsadowych czy strumieniowych).
\end{itemize}

Z tego powodu najpierw algorytmy zostaną porównane w~parach --- algorytm działający w~trybie wsadowym i~najbardziej zbliżona do niego strumieniowa implementacja. Zostanie porównana ich skuteczność predykcji po treningu oraz czas nauki. Główną miarą braną pod uwagę będzie dokładność (ang. \emph{accuracy}), ale w~przypadku używania niezbalansowanych zbiorów danych, zostanie też wzięta pod uwagę miara F1.

Następnie zostanie przebadane, jak dobrze te algorytmy skalują się wraz z~rozmiarem zbioru treningowego. Na rzeczywistych zbiorach danych, algorytmy będą trenowane, od najmniejszych rozmiarów wsadów próbek po cały zbiór danych. Zależnie od szybkości wzrastania czasu nauki będziemy mogli rozpoznać, który algorytmów z~pary lepiej się skaluje.

Drugą częścią eksperymentu będzie wytrenowane i~podane ewaluacji większa grupa algorytmów. Podobnie jak w~pierwszej części ustalone zostaną dokładność, miara F1 i~czas nauki. Na tej podstawie będzie można określić, czy któraś grupa algorytmów (wsadowa czy strumieniowa) lepiej nadaje się do pewnych zadań.

\section{Wykorzystane technologie}
\subsection{Python}
W tym projekcie wszystkie eksperymenty i~wizualizacje dokonywane są za pomocą języka Python\footnote{\url{https://python.org/}}. Pomimo braków w~szybkości działania, duża liczba gotowych bibliotek sprawia, że Python doskonale nadaje się do zadań związanych z~badaniem algorytmów.

Do programowania użyta została aplikacja Jupyter Notebook\footnote{\url{https://jupyter.org/}}. Pozwala ona na wygodną wizualizację kolejnych kroków eksperymentu, interaktywne programowanie oraz na prezentację projektów.

\subsection{Scikit-learn i~skmultiflow}
Scikit-learn\footnote{\url{https://scikit-learn.org/}} jest prostą biblioteką zawierającą implementacje wielu podstawowych algorytmów uczenia maszynowego oraz metod ich ewaluacji. Skupia się głównie na algorytmach wsadowych, ale daje dostęp także do algorytmów strumieniowych. Pozwala ona na zaimportowanie między innymi regresji logistycznej, maszyn wektorów nośnych i~drzew decyzyjnych.

Ze względu na brak wszystkich algorytmów w~bibliotece sklearn; zostanie użyta także skmultiflow\footnote{\url{https://scikit-multiflow.readthedocs.io/}}, zawierający potrzebną implementację algorytmu drzew Hoeffdinga. Warto zwrócić uwagę, że sposób nauki w~skmultiflow różnie się od implementacji w~sklearn. W~tej bibliotece znacznie bardziej skupiono się na strumieniowym napływie danych - algorytmy są do nich lepiej przystosowane (przez metodę \emph{partial fit} akceptującą pojedyncze próbki).

Ze względu na różnicę w~prędkościach różnych bibliotek, do zaimportowania modeli zostały użyte tylko powyższe dwie biblioteki. Wykorzystanie różnych bibliotek dla różnych algorytmów mogłoby znacznie zaważyć na wiarygodności porównania.

\subsection{Pandas i~nltk}
Do obróbki i~przygotowania danych do treningu szczególnie wykorzystane zostały biblioteki pandas\footnote{\url{https://pandas.pydata.org/}} i~nltk\footnote{\url{https://www.nltk.org/}}.

Pandas jest biblioteką o wysokiej wydajności pozwalającą na szybką manipulację danymi i~ich prostą wizualizację. Pozwala na przygotowanie danych, dzięki łatwej możliwości edycji kolumn, co jest konieczne przy wybieraniu, tworzeniu i~usuwaniu wymaganych dla nauki cech próbek.

W zadaniach z~przetwarzania języka naturalnego przydatna jest biblioteka nltk (ang. \emph{Natural Language Toolkit}). Przy pomocy tzw. stop list, tokenizatorów i~narzędzi do lematyzacji pozwala na odpowiednie przygotowanie danych tekstowych do nauki. Razem z~narzędziami do wektoryzacji z~biblioteki sklearn tworzy zespół narzędzi, które pozwalają na przygotowanie --- od początku do końca --- tekstu do treningu. 


\section{Wybrane algorytmy}

Do pierwszej części eksperymentów należało wybrać najbliższe sobie pary algorytmów. 
\begin{itemize}
    \item regresja logistyczna i~jej inkrementalna wersja ze stochastycznym spadkiem gradientu,
    \item maszyny wektorów nośnych i~ich inkrementalna wersja ze stochastycznym spadkiem gradientu,
    \item drzewa decyzyjne CART i~drzewa Hoeffdinga.
\end{itemize}.

Do drugiej części eksperymentów zostały wybrane algorytmy:
\begin{itemize}
    \item regresja logistyczna (oznaczenie w~tabelach LG),
    \item regresja logistyczna ze stochastycznym spadkiem gradientu (oznaczenie w~tabelach SGD-LG),
    \item maszyny wektorów nośnych (oznaczenie w~tabelach SVM),
    \item maszyny wektorów nośnych ze stochastycznym spadkiem gradientu (oznaczenie w~tabelach SGD-SVM),
    \item perceptron (oznaczenie w~tabelach PERC),
    \item drzewa Hoeffdinga (oznaczenie w~tabelach HTC),
    \item pasywno agresywno klasyfikator (oznaczenie w~tabelach PAAG).
\end{itemize}.


\section{Użyte zbiory danych}

\subsection{Syntetyczne zbiory danych}

Ze względu na proste generowanie dużych ilości danych, a także sprawowanie kontroli nad trudnością nauki dla algorytmów, użyte zostały syntetyczne zbiory danych. Zostały wygenerowane dwa zbiory z~biblioteki skmultiflow i~jeden z~sklearn.

\subsubsection{Sklearn \emph{make classification generator}}
Generator z~biblioteki sklearn (oznaczany w~tabeli jako Sklearn Gen) pozwala na kontrolowanie poszczególnych cech generowanego zbioru danych. Zostało wygenerowane 500 tysięcy próbek, o 100 cechach. Dane zostały wygenerowane tak, aby:
\begin{itemize}
    \item liczba cech informatywnych (relewantnych) wynosiła 5,
    \item liczba przewidywanych klas wynosiła 4,
    \item wartość \emph{flipy}, czyli siła szumu, wynosiła 0{,}15 (względnie wysoka wartość).
\end{itemize}

\subsubsection{SEAGenerator}
SEAGenerator\footnote{\url{https://scikit-multiflow.readthedocs.io/en/stable/api/generated/skmultiflow.data.SEAGenerator.html}} (oznaczany w~tabeli jako SEA Gen) pozwala na wygenerowanie danych opartych na funkcji matematycznej. Generuje on 3 numeryczne cechy, których wartość znajduje się pomiędzy 0 a 10, i~tylko dwie są relewantne dla klasyfikacji. Wybierana jest funkcja klasyfikacji spośród czterech dostępnych. Funkcje te, porównują sumę dwóch atrybutów z~wartością z~pewną wartością progu (unikalną dla każdej funkcji). W zależności od wyniku porównania, generator klasyfikuje próbkę jedną z~dwóch etykiet.

Została wybrana funkcja:

wygeneruj 0, jeżeli:
\begin{displaymath}
att_1 + att_2 <= 8
\end{displaymath}
w innym przypadku wygeneruj 1.

Zostało wygenerowane 500 tysięcy próbek, z~20\% udziałem próbek ,,zaszumionych''.

\subsubsection{LEDGenerator}
LEDGenerator\footnote{\url{https://scikit-multiflow.readthedocs.io/en/stable/api/generated/skmultiflow.data.LEDGenerator.html}} (oznaczany w~tabeli jako LED Gen) oparty jest na analogowym wyświetlaczu LED. Każda z~7 cech jest wartością pokazującą, czy dany ,,bit'' świeci się czy nie. Na tej podstawie przewidywane jest, jaka cyfra świeci się na wyświetlaczu. Każdy atrybut ma 10\% szansę na posiadanie odwróconej (fałszywej wartości).

Zostało wygenerowane 500 tysięcy próbek, z~20\% udziałem próbek ,,zaszumionych''.


\subsection{Rzeczywiste zbiory danych}

\subsubsection{Irish News}
\emph{Irish News}\cite{DVN/0U9Z9F_2018} jest zbiorem danych z~dziedziny przetwarzania języka naturalnego. Dane zostały zebrane z~gazet od 1996 do 2019 roku i~zawierają teksty nagłówków gazet. Celem algorytmów jest określenie kategorii nagłówka.

Przed nauką kategorie zostały pogrupowane w~kilka mniejszych grup. Wcześniej liczba kategorii wynosiła 102, i~została pogrupowana w~sześć ogólniejszych kategorii (\emph{news, sport, lifestyle, opinion culture, business}). Z tekstów usunięto słowa ze stop listy, podane je lematyzacji, następnie zostały one zwektoryzowane. W teście wszystkich wybranych algorytmów wykorzystano 500 tysięcy losowo wybranych próbek.


\subsubsection{Forest Coverage Dataset}
Zbiór danych \emph{Forest Coverage}\footnote{\url{https://archive.ics.uci.edu/ml/datasets/covertype}} (w tabelach w~skrócie opisywany jako Forest) zawiera 581012 próbek, obserwacji zebranych w~\emph{Roosevelt National Forest} w~Colorado. 

Wśród cech znajdują się między innymi: nachylenie, typ gleby, dystans do wody czy dróg. Przewidywaną wartością jest okrycie lasu - to znaczy takiego typu drzewa, który zajmuje większą część lasu (oznaczony jest numerem od 0 do 6).

\subsubsection{Text reviews of German universities}
Kolejnym rzeczywistym zbiorem danych są tekstowe opinie na temat niemieckich uniwersytetów\footnote{\url{https://www.kaggle.com/longnguyen2306/germany-universities-reviews-and-recommendation}} (w skrócie będą oznaczane jako "Universities"). Zawiera on 221721 próbek danych. Zadaniem na tym zbiorze danych jest przewidzenie wartości ,,weiter empfehlung'' - wartości boolowskiej oznaczającej, czy student wystawiający opinię poleca uczelnię.

Cechą, na podstawie której dokonywana jest predykcja, jest kolumna ,,inhalt'', czyli opinia ucznia w~jego natywnym języku. Przed nauką z~tekstów usunięto słowa ze stop listy, podane je lematyzacji, następnie zostały one zwektoryzowane.

\section{Porównanie regresji logistycznej w~trybie wsadowym i~strumieniowym}

\textcolor{white}{a}

Regresję logistyczną wytrenowano w~obu trybach na sześciu zbiorach danych. Wyniki zamieszczone są w~tabeli \ref{fig:log_tabel_comp}

Można zaobserwować, że regresja logistyczna działająca w~trybie wsadowym odnosi nieco lepsze wyniki. Często jednak różnica ta jest statystycznie nieistotna. Duża różnica natomiast pojawia się, jeżeli weźmie się pod uwagę czas nauki. Jest on zwykle znacznie dłuższy (zwłaszcza w~zadaniach związanych z~NLP). Stochastyczny spadek gradientu odnosi nieco lepsze wyniki w~pracy z~dwoma ze syntetycznych zbiorów - dane wygenerowane w~nich są proste do nauki i~przewidywania. Wyjątkiem jest zbiór LED, który miał większy współczynnik hałasu - tutaj tryb wsadowy działa znacznie lepiej.

Na wykresach \ref{fig:lgvssgd_forest}, \ref{fig:lgvssgd_irish} i~\ref{fig:lgvssgd_univ}, została pokazana skalowalność modeli regresji liniowej w~obu trybach. Można zaobserwować, że tryb wsadowy skaluje się znacznie gorzej od trybu strumieniowego. Jest to widoczne zwłaszcza w~zadaniach z~przetwarzania języka naturalnego, gdzie różnica we wzroście czasu nauki jest bardzo duża.

\begin{table}[h]
\caption{Porównanie wyników regresji logistycznej w~obu trybach: LG -- tryb wsadowy, SGD-LG -- tryb strumieniowy}
\label{fig:log_tabel_comp}
\centering
\begin{tabular}{|c|cc|cc|cc|} 
\cline{2-7}
\multicolumn{1}{c|}{} & \multicolumn{1}{c|}{LG} & SGD-LG         & \multicolumn{1}{c|}{LG} & SGD-LG & \multicolumn{1}{c|}{LG} & SGD-LG           \\ 
\cline{2-7}
\multicolumn{1}{c|}{} & \multicolumn{2}{c|}{Accuracy}            & \multicolumn{2}{c|}{F1 score}    & \multicolumn{2}{c|}{Time [s]}                  \\ 
\hline
Forest                & \textbf{0{,}754}          & 0{,}676          & \textbf{0{,}426}          & 0{,}331  & 84{,}40                   & \textbf{52{,}049}  \\ 
\hline
Irish News            & \textbf{0{,}6025}         & 0{,}594          & \textbf{0{,}432}          & 0{,}274  & 463{,}438                 & \textbf{5{,}911}   \\ 
\hline
Universities          & 0{,}909                   & 0{,}909          & \textbf{0{,}653}          & 0{,}64   & 5{,}481                   & \textbf{1{,}384}   \\ 
\hline
Sklearn Gen           & \textbf{0{,}523}          & 0{,}51           & \textbf{0{,}519}          & 0{,}506  & \textbf{2{,}753}          & 13{,}231           \\ 
\hline
SEA Gen               & \textbf{0{,}809}          & 0{,}782          & \textbf{0{,}791}          & 0{,}761  & \textbf{0{,}568}          & 1{,}289            \\ 
\hline
LED Gen               & 0{,}531                   & \textbf{0{,}532} & \textbf{0{,}529}          & 0{,}528  & 22{,}298                  & \textbf{7{,}321}   \\
\hline
\end{tabular}
\end{table}

\begin{figure}[H]
\caption {Porównanie skalowalności obu trybów regresji logistycznej (Forest dataset)}
\includegraphics[scale=0.9]{Images/lgvssgd_forest.png}
\label{fig:lgvssgd_forest}
\end{figure}

\begin{figure}[H]
\caption {Porównanie skalowalności obu trybów regresji logistycznej (Irish News dataset)}
\includegraphics[scale=0.9]{Images/lgvssgd_irish.png}
\label{fig:lgvssgd_irish}
\end{figure}

\begin{figure}[H]
\caption {Porównanie skalowalności obu trybów regresji logistycznej (Universities dataset)}
\includegraphics[scale=0.9]{Images/lgvssgd_univ_fixed.png}
\label{fig:lgvssgd_univ}
\end{figure}

\section{Porównanie maszyn wektorów nośnych w~trybie wsadowym i~strumieniowym}

\textcolor{white}{a}

Testy maszyn wektorów nośnych zostały dokonane na tych samych zbiorach danych, co w~przypadku regresji logistycznej. Wyniki zostały przedstawione w~tabeli \ref{fig:svm_table_comp}. Podobnie jak w~przypadku regresji logistycznej, wsadowa wersja algorytmu maszyn wektorów nośnych skaluje się znacznie gorzej od strumieniowej wersji.

\begin{table}[h]
\caption{Porównanie wyników maszyn wektorów nośnych w~obu trybach: SVM -- tryb wsadowy, SGD-SVM -- tryb strumieniowy}
\label{fig:svm_table_comp}
\centering
\begin{tabular}{|c|cc|cc|cc|}
\hline
             & \multicolumn{1}{c|}{SVM} & SGD-SVM        & \multicolumn{1}{c|}{SVM} & SGD-SVM        & \multicolumn{1}{c|}{SVM} & SGD-SVM          \\ 
\hline
             & \multicolumn{2}{c|}{Accuracy}             & \multicolumn{2}{c|}{F1 score}             & \multicolumn{2}{c|}{Time}                   \\ 
\hline
Forest       & 0{,}681                    & \textbf{0{,}683} & \textbf{0{,}325}           & 0{,}291          & 122{,}532                  & \textbf{47{,}278}  \\ 
\hline
Irish News   & \textbf{0{,}652}           & 0{,}643          & \textbf{0{,}317}           & 0{,}295          & 237{,}667                  & \textbf{5{,}359}   \\ 
\hline
Universities & \textbf{0{,}909}           & 0{,}906          & \textbf{0{,}618}           & 0{,}558          & 76{,}343                   & \textbf{1{,}416}   \\ 
\hline
Sklearn Gen  & \textbf{0{,}528}           & 0{,}485          & \textbf{0{,}518}           & 0{,}47           & 1061{,}678                 & \textbf{18{,}55}   \\ 
\hline
SEA Gen      & \textbf{0{,}52}            & 0{,}497          & \textbf{0{,}532}           & 0{,}478          & 301{,}151                  & \textbf{6{,}379}   \\ 
\hline
LED GEN      & 0{,}492                    & \textbf{0{,}502} & 0{,}463                    & \textbf{0{,}485} & 6{,}785                    & \textbf{6{,}972}   \\
\hline
\end{tabular}
\end{table}

Wyniki ewaluacji umiejętności predykcji dla obu trybów tego algorytmu są bardzo zbliżone (zarówno dokładności jak i~\emph{miary F1}. Tryb iteracyjny był jednak znacznie szybszy we wszystkich (poza danymi ze zbioru LED) przypadkach.

Porównanie skalowalności algorytmów przedstawiono na wykresach \ref{fig:svc_forest}, \ref{fig:svc_irish} i~\ref{fig:svc_univ}. Podobnie jak w~przypadku regresji logistycznej, szczególnie widoczna jest różnica dla danych z~zadań NLP.

\begin{figure}[H]
\caption {Porównanie skalowalności obu trybów maszyn wektorów nośnych (Forest dataset)}
\includegraphics[scale=0.9]{Images/svc_forest.png}
\label{fig:svc_forest}
\end{figure}

\begin{figure}[H]
\caption {Porównanie skalowalności obu trybów maszyn wektorów nośnych (Irish News dataset)}
\includegraphics[scale=0.9]{Images/svc_irish.png}
\label{fig:svc_irish}
\end{figure}

\begin{figure}[H]
\caption {Porównanie skalowalności obu trybów maszyn wektorów nośnych (Universities dataset)}
\includegraphics[scale=0.9]{Images/svc_uni_fixed.png}
\label{fig:svc_univ}
\end{figure}


\section{Porównanie drzew decyzyjnych i~drzew Hoeffdinga}
Klasyfikator drzew decyzyjnych (CART) i~drzewa Hoeffdinga zostały przetestowane na jednym rzeczywistym zbiorze danych i~trzech syntetycznych. Nie zostały wykorzystane dwa zbiory danych, dotyczące problemu NLP (implementacja drzew Hoeffdinga nie była przygotowana do zwektoryzowanego formatu danych). Wyniki znajdują się w~tabeli \ref{fig:htc_dtc_results}.

\begin{table}[h]
\caption{Porównanie wyników drzew CART i~drzew Hoeffdinga}
\label{fig:htc_dtc_results}
\centering
\begin{tabular}{|c|cc|cc|cc|} 
\hline
            & \multicolumn{1}{c|}{DTC} & HTC            & \multicolumn{1}{c|}{DTC} & HTC           & \multicolumn{1}{c|}{DTC} & HTC             \\ 
\hline
            & \multicolumn{2}{c|}{Accuracy}             & \multicolumn{2}{c|}{F1 score}            & \multicolumn{2}{c|}{Time}                  \\ 
\hline
Forest      & \textbf{0{,}924}           & 0{,}787          & \textbf{0{,}844}           & 0{,}572         & \textbf{1{,}032}           & 141{,}280       \\ 
\hline
Sklearn Gen & 0{,}628                    & \textbf{0{,}661} & 0{,}628                    & \textbf{0{,}66} & \textbf{132{,}929}         & 653{,}505     \\ 
\hline
SEA Gen     & \textbf{0{,}686}           & 0              & \textbf{0{,}669}           & 0             & 5{,}65                     & \textbf{1{,}5}    \\ 
\hline
LED Gen     & \textbf{0{,}362}           & 0{,}1            & \textbf{0{,}362}           & 0{,}018         & 2{,}634              & \textbf{1{,}418}  \\
\hline
\end{tabular}
\end{table}

Podczas testów na rzeczywistym zbiorze danych, dokładność, \emph{miara F1} oraz czas nauki były znacznie lepsze dla drzew CART. Przy pracy z~syntetycznymi danymi drzewa Hoeffdinga osiągały bardzo słabe rezultaty (praktycznie zerowe) - kończąc naukę w~bardzo krótkim czasie.

Skalowalność obu algorytmów została przedstawiona na wykresie \ref{fig:htc_dtc}. Drzewa Hoeffdinga znacznie gorzej skalują się z~dużą ilością danych.

\begin{figure}[H]
\caption {Porównanie skalowalności HTC i~DTC (Forest dataset)}
\includegraphics[scale=0.9]{Images/htc_dtc_forest.png}
\label{fig:htc_dtc}
\end{figure}

\section{Porównanie wszystkich wybranych algorytmów strumieniowych i~wsadowych}

\textcolor{white}{a}

Wyniki dokładności wszystkich algorytmów zostały przedstawione w~tabeli \ref{fig:accuracy_all}, miary F1 w~tabeli \ref{fig:f2score_all} i~czasowe w~tabeli  \ref{fig:time_all}.

Ze względu na skuteczność predykcji (zarówno dokładności i miary F1) najlepsze wyniki w zadaniach z przetwarzania języka naturalnego (Irish News i Universities Reviews) odniosła regresja logistyczna w trybie wsadowym. Ten sam algorytm w trybie strumieniowym i maszyny wektorów nośnych w obu trybach osiągnęły bardzo zbliżone wyniki w tym zadaniu.

Podczas pracy na zbiorach Forest i Sklearn Gen (wygenerowanym sztucznie zbiorze przez scikit-learn) najlepsze wyniki predykcji osiągnęły implementacje drzew decyzyjnych. Na zbiorze rzeczywistym wyraźnie lepsze wyniki osiągnęły wsadowy klasyfikator drzew decyzyjnych, natomiast na sztucznym zbiorze, nieco lepsze wyniki osiągnęły drzewa Hoeffdinga. Maszyny wektorów nośnych i regresja logistyczna osiągały podobne wyniki w obu trybach (zwykle nieco lepsze dla trybu wsadowego).

Na wygenerowanym zbiorze SEA Gen wersje wsadowe regresji logistycznej i maszyn wektorów nośnych osiągnęły delikatnie lepsze wyniki; na zbiorze LED Gen wersje wsadowe gwarantowały lepszą predykcję. Algorytmy drzew decyzyjnych znacznie gorzej radziły sobie z tymi zadaniami (drzewa Hoeffdinga nie osiągnęły praktycznie żadnych istotnych rezultatów).

Na niemal żadnym zbiorze algorytmy perceptron i pasywno agresywny klasyfikator nie osiągnęły wystarczająco dobrych wyników. Jedynie na zbiorze Universities (względnie prostym --- co można wnioskować po wynikach pozostałych algorytmów --- do nauki) osiągnęły porównywalne z innymi algorytmami rezultaty.

Biorąc pod uwagę wyniki czasowe algorytmów, drzewa Hoeffdinga uczyły się wyjątkowo wolno. Z powodu tego, że nie radziły sobie z zwektoryzowanymi danymi, a dla zbiorów SEA i LED nie osiągnęły akceptowalnych wyników, nie będą one brane pod uwagę przy porównaniu.

Algorytmy strumieniowe perceptron i pasywno agresywny klasyfikator osiągały najlepsze lub niemal najlepsze wyniki na każdym zbiorze danych, niezależnie czy zbiory były rzeczywiste, czy sztucznie wygenerowane.

Na rzeczywistych zbiorach danych znacznie lepsze wyniki osiągały strumiowe wersje regresji logistycznej i maszyn wektorów nośnych --- nawet trzy- i czterokrotnie szybsze czasy nauki od ich wsadowych odpowiedników.

Podczas treningu na sztucznych zbiorach danych taki stosunek znacznie się zmienił. Podczas nauki na zbiorach Sklearn Gen i SEA Gen, regresja logistyczna w trybie wsadowym uczyła się znacznie szybciej od jej wsadowej implementacji. Odwrotnie wyglądała sytuacja dla maszyn wektorów nośnych - tutaj implementacja strumieniowa uczyła się niemal 50 razy krócej od wsadowej dla zbioru wygenerowanego przez sklearn, i ponad 70 razy krócej dla zbioru SEA Gen.
Na zbiorze LED Gen strumieniowa regresja uczyła się szybciej od wersji wsadowej, natomiast implementacje maszyn wektorów nośnych osiągnęły niemal takie same wyniki.

Klasyfikator drzew decyzyjnych osiągnął najlepszy wynik dla zbioru danych Forest (w tym samym zbiorze, na którym osiągał najlepsze wyniki predykcji) i drugi najlepszy wynik dla zbioru LED Gen. W pozostałych przypadkach odnosił jedne z najgorszych wyników (zwłaszcza w porównaniu z algorytmami strumieniowymi).






\begin{table}[h]
\caption{Wyniki dokładności dla wszystkich badanych algorytmów}
\label{fig:accuracy_all}
\centering
\begin{tabular}{|c|c|c|c|c|c|c|c|c|} 
\hline
Accuracy     & SGD-LG         & SGD-SVM & PERC  & PAAG  & HTC            & LOG            & SVM            & DTC             \\ 
\hline
             & \multicolumn{5}{c|}{Stream}                               & \multicolumn{3}{c|}{Batch}                        \\ 
\hline
Forest       & 0{,}719          & 0{,}708   & 0{,}697 & 0{,}612 & 0{,}787          & 0{,}753          & 0{,}607          & \textbf{0{,}939}  \\ 
\cline{1-1}
Irish        & 0{,}617          & 0{,}629   & 0{,}544 & 0{,}56  & -              & \textbf{0{,}644} & 0{,}64           & 0{,}573           \\ 
\cline{1-1}
Universities & 0{,}909          & 0{,}907   & 0{,}877 & 0{,}877 & -              & \textbf{0{,}91}  & 0{,}909          & 0{,}854           \\ 
\cline{1-1}
Sklearn Gen  & 0{,}51           & 0{,}482   & 0{,}359 & 0{,}37  & \textbf{0{,}662} & 0{,}523          & 0{,}528          & 0{,}629           \\ 
\cline{1-1}
SEA Gen      & 0{,}783          & 0{,}797   & 0{,}649 & 0{,}589 & 0              & 0{,}81           & \textbf{0{,}811} & 0{,}686           \\ 
\cline{1-1}
LED Gen      & \textbf{0{,}532} & 0{,}503   & 0{,}423 & 0{,}3   & 0{,}101          & 0{,}531          & 0{,}492          & 0{,}362           \\
\hline
\end{tabular}
\end{table}

\begin{table}[h]
\caption{Wyniki miary F1 dla wszystkich badanych algorytmów}
\label{fig:f2score_all}
\centering
\begin{tabular}{|c|c|c|c|c|c|c|c|c|} 
\hline
F2\_score    & \multicolumn{1}{l|}{SGD-LG} & \multicolumn{1}{l|}{SGD-SVM} & \multicolumn{1}{l|}{PERC} & \multicolumn{1}{l|}{PAAG} & \multicolumn{1}{l|}{HTC} & \multicolumn{1}{l|}{LG} & \multicolumn{1}{l|}{SVM} & \multicolumn{1}{l|}{DTC}  \\ 
\hline
             & \multicolumn{5}{c|}{Stream}                                                                                                                   & \multicolumn{3}{c|}{Batch}                                                     \\ 
\hline
Forest       & 0{,}332                       & 0{,}293                        & 0{,}214                     & 0{,}278                     & 0{,}573                    & 0{,}438                   & 0{,}381                    & \textbf{0,868}            \\ 
\cline{1-1}
Irish        & 0{,}25                        & 0{,}306                        & 0{,}329                     & 0{,}346                     & -                        & \textbf{0{,}378}          & 0{,}337                    & 0{,}369                     \\ 
\cline{1-1}
Universities & 0{,}648                       & 0{,}575                        & 0{,}62                      & 0{,}621                     & -                        & \textbf{0{,}653}          & 0{,}62                     & 0{,}589                     \\ 
\cline{1-1}
Sklearn Gen  & 0{,}506                       & 0{,}458                        & 0{,}357                     & 0{,}37                      & \textbf{0{,}66}            & 0{,}519                   & 0{,}519                    & 0{,}629                     \\ 
\cline{1-1}
SEA Gen      & 0{,}762                       & 0{,}78                         & 0{,}492                     & 0{,}588                     & 0                        & 0{,}791                   & \textbf{0{,}793}           & 0{,}67                      \\ 
\cline{1-1}
LED Gen      & \textbf{0{,}529}              & 0{,}485                        & 0{,}393                     & 0{,}254                     & 0{,}018                    & \textbf{0{,}529}          & 0{,}463                    & 0{,}363                     \\
\hline
\end{tabular}
\end{table}


\begin{table}[h]
\centering
\caption{Wyniki czasu nauki (w sekundach) dla wszystkich badanych algorytmów}
\label{fig:time_all}
\begin{tabular}{|c|c|c|c|c|c|c|c|c|}
\hline
Time [s]     & SGD-LG         & SGD-SVM & PERC           & PAAG           & HTC     & LG             & SVM     & DCT             \\ 
\cline{2-9}
             & \multicolumn{5}{c|}{Stream}                                          & \multicolumn{3}{c|}{Batch}                 \\ 
\hline
Forest       & 103{,}397        & 108{,}539 & 7{,}414          & 3{,}708          & 141{,}28  & 131{,}562        & 313{,}307 & \textbf{2{,}111}  \\ 
\cline{1-1}
Irish        & \textbf{1{,}567} & 4{,}142   & 2{,}821          & 3{,}668          & -       & 80{,}25          & 147{,}123 & 127{,}8           \\ 
\cline{1-1}
Universities & 0{,}964          & 0{,}99    & \textbf{0{,}506} & 0{,}63           & -       & 4{,}225          & 55{,}904  & 132{,}26          \\ 
\cline{1-1}
Sklearn Gen  & 13{,}232         & 18{,}102  & 4{,}169          & 5{,}038          & 653{,}506 & \textbf{2{,}753} & 944{,}836 & 132{,}93          \\ 
\cline{1-1}
SEA Gen      & 1{,}289          & 1{,}278   & 0{,}567          & \textbf{0{,}391} & 0       & 0{,}568          & 79{,}245  & 5{,}65            \\ 
\cline{1-1}
LED Gen      & 7{,}321          & 6{,}973   & 4{,}021          & 4{,}113          & 1{,}419   & 22{,}298         & 6{,}785   & 2{,}635           \\
\hline
\end{tabular}
\end{table}


\section{Wnioski z~eksperymentów}

W pierwszym eksperymencie, zbadano skalowalność algorytmów podczas nauki na rzeczywistych zbiorach danych. Algorytmy regresji logistycznej i maszyny wektorów nośnych zostały porównane w odniesieniu do swoich strumieniowych odpowiedników (takich, które używają stochastycznego spadku gradientu do odnalezienia najlepszych wag).

Można zauważyć, że tryb strumieniowy --- dla obu algorytmów ---skaluje się znacznie lepiej. Czas nauki w zależności od ilości próbek rośnie szybciej dla trybu wsadowego. Jest to szczególnie widoczne podczas testów na zbiorach danych związanych z przetwarzaniem języka naturalnego (Irish News i Universities).
Odwrotny trend zaobserwowano na zbiorze Forest, na którym porównano klasyczny klasyfikator drzew decyzyjnych i drzewa Hoeffdinga. Inkrementalna implementacja skalowała się tutaj znacznie gorzej. Powodem takiej różnicy jest tutaj potrzeba przeglądania drzewa przy potrzebie zmiany go po pewnej ilości próbek.

Podczas kolejnego etapu porównano ze sobą algorytmy również w parach - w analogiczny sposób, jak w pierwszym etapie, sprawdzając umiejętność predykcji (dokładność i miara F1) oraz czas nauki, używając całych zbiorów danych. Umiejętność predykcji jest zbliżona dla obu trybów (dla obu algorytmów) algorytmów regresji logistycznej oraz maszyn wektorów nośnych. Wyniki często są delikatnie wyższe dla trybów wsadowych, co zgadza się z przypadkami opisywanymi w literaturze. Wynika to z niemal identycznego sposobu działania algorytmów w trybie wsadowym i strumieniowym, tej samej funkcji straty. Różnica w metodzie optymalizacji zdaje się nie sprawiać znacznej różnicy w skuteczności predykcji.

Wyraźna natomiast różnica pojawia się, kiedy bierzemy pod uwagę czas nauki algorytmów. Podczas testów dla maszyn wektorów nośnych zaobserwowaną wyraźną przewagę dla trybu strumieniowego. Tylko na jednym zbiorze danych oba tryby osiągnęły niemal identyczny wynik. Biorąc pod uwagę powyższe obserwacje i przypadki znane z literatury, możemy wnioskować, że tryb strumieniowy będzie niemal zawsze korzystniejszy dla tego algorytmu (jeżeli tylko możliwe jest takie wykorzystanie jego implementacji, a także pominiemy potrzebę reakcji na concept drift, który nie jest badany w tej pracy).

Mniej zdecydowaną przewagę pokazuje tryb strumieniowy w regresji logistycznej. Na dwóch sztucznych zbiorach danych tryb strumieniowy wykazywał dłuższy czas nauki. Na tylko jednym rzeczywistym zbiorze danych tryb wsadowy pokazał, że jest znacznie korzystniejszy pod tym względem do nauki, na pozostałych przewaga była także wyraźna, choć często nie tak znacząca, jak dla maszyn wektorów nośnych.

Podczas testów dla algorytmów drzew decyzyjnych zauważono, że drzewa Hoeffdinga często nie radzą sobie z niektórymi zbiorami danych. Ich czas nauki jest znacznie dłuższy, a wyniki predykcji osiąga niższe od klasyfikatora drzew decyzyjnych. Warto jednak zwrócić uwagę, że drzewa Hoeffdinga pozwalają na douczanie (i przebudowywanie drzewa), co nie jest opcją dla klasyfikatora drzew decyzyjnych; stąd można znaleźć zastosowania, w których wykorzystanie ich jest optymalne.

Ostatnim etapem było porównanie wszystkich wcześniejszych algorytmów (dodając do badanych algorytmów pasywno agresywny klasyfikator i perceptron), tak aby sprawdzić, czy istnieją wzorce pozwalające stwierdzić, czy lepiej sprawują się algorytmy wsadowe czy strumieniowe.

Nowo badane algorytmy (perceptron i pasywno agresywny klasyfikator) odnosiły zwykle dosyć niskie bądź porównywalne z wsadowymi algorytmami wyniki. Czasowo jednak przedstawiały jedne z najlepszych rezultatów, co zgadza się z ukazywanym często w literaturze podejściem "szybciej ale gorzej".

Podobne rezultaty możemy zaobserwować dla pozostałych algorytmów; wsadowe często uczą się wolniej lub znacznie wolniej od strumieniowych. Osiągają przy tym zwykle jednak nieco lepsze wyniki predykcji. Warto jednak zwrócić uwagę, że --- zwłaszcza biorąc pod uwagę czas nauki --- nie jest to zasadą. Istnieją zbiory, na których niektóre algorytmy wsadowe uczyły się szybciej. Pokazuje to, jak istotne jest przebadanie przede wszystkim różnych trybów jednego algorytmu pomiędzy sobą. Sytuacja, w której tryb wsadowy regresji logistycznej uczy się szybciej od strumieniowego, nie zawsze będzie taka sama dla maszyn wektorów nośnych.