<commit_before>\section{Klassifizierung der Verkehrsmittel}
Die Klassifizierung der Segmente bzw. das Bestimmen des Verkehrsmittels für ein Segment basiert bei beiden Analysearten (mit und ohne GIS-Daten) auf Entscheidungsbäumen. Wie bereits in Abbildung \imgref{decissiontree} und in Abbildung \imgref{GISdecissiontree} ersichtlich und im Abschnitt \nameref{schlussfolgerungsvariablen} genau beschrieben verwendet der Entscheidungsbaum ohne GIS-Daten ausschließlich Geschwindigkeits- und Beschleunigungswerte sowie die Stopprate als Indikatoren. Der Entscheidungsbaum mit GIS-Daten fügt diesen aber noch einen Wert für die Nahe zu verschieden Infrastrukturen hinzu. Dies bedeutet, dass für jedes Segment bestimmte Entscheidungskriterien abhängig von Analysetyp festgestellt werden müssen bevor der Entscheidungsbaum das Verkehrsmittel bestimmen kann. 

\subsubsection{Erstellen der Entscheidungsbäume}
\label{entscheidungsbaumGenerierungPHP}
Wie bereits im Abschnitt \nameref{entscheidungsbaumAlsSchlussfolgerungsmodell} beschrieben, konnte in der freien Version von Rapidminer der generierte Entscheidungsbaum als Bild oder Text exportiert werden. Um jedoch bei dem Erstellen des Entscheidungsbaums möglichst flexibel zu sein (z.B. erweitern der Trainingsdaten) wurde ein Parser für die textuelle Darstellung des Entscheidungsbaums implementiert. 

Ein Ausschnitt des Entscheidungsbaums als Text ist in Listing \coderef{entscheidungsbaumText} zu sehen. Dabei stellt jede Zeile mindestens einen Knoten im Baum dar. Eine Zeile kann mit Indikatoren für die Tiefe des Knotens im Baum beginnen. Dabei steht jedes ``|`` für eine Ebene tiefer im Baum. Jene zwei Zeilen am Beginn ohne Tiefenangabe bilden somit den Wurzelknoten da sie über keine Tiefenangabe verfügen. Außerdem gibt es jeden Knoten der kein Blatt ist zwei mal in dieser Darstellung. Diese beiden Knoten unterscheiden sich dabei nur durch ihren Vergleichsoperator, denn dieser ist genau das Gegenteil des Anderen. Dadurch können beide Fälle einer Bedingung, abgebildet werden.

Jede Zeile besteht aus dem Namen der Entscheidungsvariable, einem Vergleichsoperator und einem Wert. Hat dieser Knoten nur mehr ein Kind-Knoten mit dem Resultat so folgt hinter dem Wert das Resultat. Das Resultat besteht dabei aus dem bestimmten Verkehrsmittel und einer Übersicht über die Vorkommnisse aller Verkehrsmittel für die getroffenen Entscheidungen aus den Trainingsdaten.

Die Kind-Knoten sind jeweils dem letzten Knoten auf dem vorherigen Level zuzuordnen.

\begin{code}[]{Entscheidungsbaum in Textform}{entscheidungsbaumText}
meanvelocity > 20.830: train {bike=0, walk=0, car=0, bus=0, train=5}
meanvelocity <= 20.830
|   meanvelocity > 2.041
|   |   meanvelocity > 7.837
|   |   |   meanvelocity > 8.772: car {bike=0, walk=0, car=46, bus=1, train=2}
|   |   |   meanvelocity <= 8.772
|   |   |   |   meanacceleration > 2.728: bus {bike=0, walk=0, car=0, bus=2, train=0}
|   |   |   |   meanacceleration <= 2.728: car {bike=0, walk=0, car=3, bus=0, train=0}
...
\end{code}
<commit_msg>Proofreading analysis<commit_after>\section{Klassifizierung der Verkehrsmittel}
Die Klassifizierung der Segmente bzw. das Bestimmen des Verkehrsmittels für ein Segment basiert bei beiden Analysearten (mit und ohne GIS-Daten) auf Entscheidungsbäumen. Wie bereits in Abbildung \imgref{decissiontree} und in Abbildung \imgref{GISdecissiontree} ersichtlich und im Abschnitt \nameref{schlussfolgerungsvariablen} genau beschrieben verwendet der Entscheidungsbaum ohne GIS-Daten ausschließlich Geschwindigkeits- und Beschleunigungswerte sowie die Stopprate als Indikatoren. Der Entscheidungsbaum mit GIS-Daten fügt diesen aber noch einen Wert für die Nahe zu verschieden Infrastrukturen hinzu. Dies bedeutet, dass für jedes Segment bestimmte Entscheidungskriterien abhängig von Analysetyp festgestellt werden müssen bevor der Entscheidungsbaum das Verkehrsmittel bestimmen kann. 

\subsubsection{Erstellen der Entscheidungsbäume}
\label{entscheidungsbaumGenerierungPHP}
Wie bereits im Abschnitt \nameref{entscheidungsbaumAlsSchlussfolgerungsmodell} beschrieben, konnte in der freien Version von Rapidminer der generierte Entscheidungsbaum als Bild oder Text exportiert werden. Um jedoch bei dem Erstellen des Entscheidungsbaums möglichst flexibel zu sein (z.B. erweitern der Trainingsdaten) wurde ein Parser für die textuelle Darstellung des Entscheidungsbaums implementiert. 

Ein Ausschnitt des Entscheidungsbaums als Text ist in Listing \coderef{entscheidungsbaumText} zu sehen. Dabei stellt jede Zeile mindestens einen Knoten im Baum dar. Eine Zeile kann mit Indikatoren für die Tiefe des Knotens im Baum beginnen. Dabei steht jedes ``|`` für eine Ebene tiefer im Baum. Jene zwei Zeilen am Beginn ohne Tiefenangabe bilden somit den Wurzelknoten da sie über keine Tiefenangabe verfügen. Außerdem gibt es jeden Knoten der kein Blatt ist zwei Mal in dieser Darstellung. Diese beiden Knoten unterscheiden sich dabei nur durch ihren Vergleichsoperator, denn dieser ist genau das Gegenteil des Anderen. Dadurch können beide Fälle einer Bedingung, abgebildet werden.

Jede Zeile besteht aus dem Namen der Entscheidungsvariable, einem Vergleichsoperator und einem Wert. Hat dieser Knoten nur mehr ein Kind-Knoten mit dem Resultat so folgt hinter dem Wert das Resultat. Das Resultat besteht dabei aus dem bestimmten Verkehrsmittel und einer Übersicht über die Vorkommnisse aller Verkehrsmittel für die getroffenen Entscheidungen aus den Trainingsdaten.

Die Kind-Knoten sind jeweils dem letzten Knoten auf dem vorherigen Level zuzuordnen.

\begin{code}[]{Entscheidungsbaum in Textform}{entscheidungsbaumText}
meanvelocity > 20.830: train {bike=0, walk=0, car=0, bus=0, train=5}
meanvelocity <= 20.830
|   meanvelocity > 2.041
|   |   meanvelocity > 7.837
|   |   |   meanvelocity > 8.772: car {bike=0, walk=0, car=46, bus=1, train=2}
|   |   |   meanvelocity <= 8.772
|   |   |   |   meanacceleration > 2.728: bus {bike=0, walk=0, car=0, bus=2, train=0}
|   |   |   |   meanacceleration <= 2.728: car {bike=0, walk=0, car=3, bus=0, train=0}
...
\end{code}

{'fraction_non_alphanumeric': 0.05493421052631579, 'fraction_numerical': 0.018092105263157895, 'mean_word_length': 5.455414012738854, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4719564', 'n_tokens_mistral': 2056, 'n_tokens_neox': 2088, 'n_words': 709}