-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfase3.tex
89 lines (60 loc) · 6.06 KB
/
fase3.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
\newpage
\section{Fase 3}
\label{sec:Fase3}
In fase 3 beginnen we opnieuw met slechts twee inputparameters maar nu wel met drie verschillende klassen. We bouwen dit opnieuw stap per stap op. Starten met 2 inputparameters, dan 3 en tenslotte alle 5. Het derde spel die we in de dataset gaan toevoegen is Tetris. Tetris wordt enkel maar gespeeld met de knoppen. Op die manier hebben we 3 totaal verschillende spelletjes. Eén waar bijna voornamelijk de joystick gebruikt wordt (Pacman), één waar enkel de knoppen gebruikt worden(Tetris) en nog een spel waar zowel knoppen als joystick gebruikt worden (Mortal Kombat). De 'TotalTimeOfNoUseOfControls' is ook veel lager bij Tetris omdat dit lang aan 1 stuk kan gespeeld worden. Ook 'AmountOfDeads' ligt veel lager dan andere spelletjes.
\subsection{Logistische regressie}
\label{sec:Logistischeregressie-fase3}
De implementatie van logistische regressie voor meerdere klassen is een beetje anders, maar wel eenvoudig gemaakt door het Accord framework. Met de klasse MultinomialLogisticRegressionAnalysis kunnen we een hypothese laten genereren. Die dan de voorspellingen zal doen. Die klasse bepaalt ook zelf hoeveel inputparameters in de trainingsset aanwezig zijn. Dit geldt ook voor het aantal verschillende klassen.
\subsubsection{Resultaten}
\paragraph{Snelheid van het algoritme}
We beginnen de testen met twee inputparameters. Het algoritme blijft foutieve voorspellingen doen zolang er geen 25 iteraties gebeurd zijn door het leeralgoritme. Dit duurt 15,3824ms wat dus relatief gezien al een stuk langer duurt dan wanneer er slechts 2 klassen waren met 2 parameters.
Als we 3 inputparameters gebruiken ('ButtonPresses', 'JoystickMovements', 'TotelTimeOfNoUseOfControls') heeft het algoritme 95 iteraties nodig om een foutloze hypothese te maken. Dit duurt gemiddeld 22,67 ms.
Bij vijf inputparameters (+ 'AmountOfDeads' \& 'Multiplayer') doet het algoritme er 28,9126 ms over. Als we dit vergelijken met ons eerste resultaat in fase 3 is dit al bijna een verdubbeling.
\paragraph{Foutratio}
Nu we met meerdere klassen werken is het niet meer mogelijk om de F-score te berekenen omdat die enkel kan berekend worden tussen binaire classificaties. Onze testdataset telt nu 150 voorbeelden doordat er 50 extra voorbeelden van Tetris zijn toegevoegd. We laten het leeralgoritme stoppen wanneer een tolerance van 0.1 bereikt is. Bij een eerste test met twee inputparameters beslist logistische regressie 143 van de 150 voorbeelden correct. Van de foutieve voorspellingen dacht het algoritme vijf maal dat Tetris gespeeld werd en een twee keer Pacman terwijl het eigenlijk zeven keer Mortal Kombat moest zijn.
Wanneer er drie inputvectors gebruikt worden dan voorspelt het algoritme even veel voorbeelden fout maar nu denkt hij vier keer dat Mortal Kombat gespeeld werd ipv Pacman. De andere drie fouten gebeuren bij het verschill tussen Tetris en Mortal Kombat waar hij telkens de voorkeur geeft aan Tetris.
De volgende test met vijf inputvectors maakt acht foutieve voorspellingen, waarvan vier keer de voorspelling Mortal Kombat Pacman had moeten zijn. Twee keer kreeg Tetris de voorkeur op Mortal Kombat net zoals Pacman twee keer daar de voorkeur op kreeg.
%%Logistic regression code
\begin{figure}[]
\renewcommand{\figurename}{Code}
\begin{lstlisting}
public static void StartLogisticRegression(double[][] input, int[] output)
{
MultinomialLogisticRegressionAnalysis multiLogisticRegression = new MultinomialLogisticRegressionAnalysis();
//multiLogisticRegression.Iterations = 135
multiLogisticRegression.Tolerance = 0.1;
multiLogisticRegression.Learn(input, output);
}
\end{lstlisting}
\caption{Implementatie multiklasse logistische regressie met een tolerance van 0.1. Het Iterations property werd gebruikt om de snelheid te meten.}
\label{code:logistischeregressiefase3}
\end{figure}
\newpage
\subsection{Support Vector Machine}
\label{sec:supportvectormachineFase3}
Ook voor de Support Vector Machine is de implementatie gewijzigd. U kan de code zien in figuur \ref{code:svmFase1imp}. We maken gebruik van de lineaire kernel wat eigenlijk de standaard kernel is voor SVMs.
%%Logistic regression code
\begin{figure}[]
\renewcommand{\figurename}{Code}
\begin{lstlisting}
var teacher = new MulticlassSupportVectorLearning<Linear>()
{
Learner = (p) => new LinearDualCoordinateDescent()
{
Tolerance = 0.1
}
};
teacher.ParallelOptions.MaxDegreeOfParallelism = 1;
var machine = teacher.Learn(inputs, outputs);
\end{lstlisting}
\caption{Implementatie multiklasse logistische regressie met een tolerance van 0.1. Het Iterations property werd gebruikt om de snelheid te meten.}
\label{code:svmFase3imp}
\end{figure}
\subsubsection{Resultaten}
\paragraph{Snelheid van het algoritme}
Een probleem dat zich voordoet bij de Support Vector Machines is dat het aantal iteraties niet kunnen vastgezet worden. De Tolerance kunnen we wel wijzigen maar gelijk welke waarde we daar aan toekennen, de snelheid blijft hetzelfde. Dit zal waarschijnlijk een fout zijn in het Accord-framework. Of er nu 2, 3 of 5 inputvectoren zijn, de gemiddelde tijd van het leerproces is 135,0201 ms.
\paragraph{Foutratio}
Ook de Support Vector Machine blijft niet foutloos in deze fase. Tot en met 3 inputparameters is het algoritme wel nog feilloos en vanaf vier worden er 2 spelletjes foutief voorspeld.
\subsection{Conclusie na fase 3}
Ondanks dat we de snelheid niet precies met elkaar kunnen vergelijken zien we toch wel dat een Support Vector Machine meer tijd nodig heeft dan logistische regressie. We kunnen dit ook staven. We weten dat de tijd van een SVM met vijf inputvectors er gemiddeld 135,0201 ms over doet maar dan zijn er wel 2 foute voorspellingen. Om een perfect algoritme te krijgen zal het dus nog beetje langer dan 135,0201 ms duren. De tijd van een logistische regressie met vijf inputparameters bedraagt 66,7429 ms en dan is het algoritme foutloos. Dus op die manier weten we zeker dat het algoritme van SVM langer duurt dan logistische regressie.
Bij het foutratio zien we dan wel dat de SVM beter presteert dan logistische regressie met slecht 2 fouten tegenover 7.