diff --git a/documents/DYCOS/Ausblick.tex b/documents/DYCOS/Ausblick.tex index 13d30f0..9806c2e 100644 --- a/documents/DYCOS/Ausblick.tex +++ b/documents/DYCOS/Ausblick.tex @@ -1,6 +1,6 @@ -Den sehr einfach aufgebauten DYCOS-Algorithmus kann man noch an -vielen Punkten verbessern. So könnte man vor der Auswahl des -Vokabulars jedes Wort auf den Wortstamm zurückführen. +Den DYCOS-Algorithmus kann in einigen Aspekten erweitert werden. +So könnte man vor der Auswahl des Vokabulars jedes Wort auf den +Wortstamm zurückführen. Dafür könnte zum Beispiel der in \cite{porter} vorgestellte Porter-Stemming-Algorithmus verwendet werden. Durch diese Maßnahme wird das Vokabular kleiner gehalten wodurch mehr Artikel mit einander diff --git a/documents/DYCOS/DYCOS-Algorithmus.tex b/documents/DYCOS/DYCOS-Algorithmus.tex index 88257e0..613a124 100644 --- a/documents/DYCOS/DYCOS-Algorithmus.tex +++ b/documents/DYCOS/DYCOS-Algorithmus.tex @@ -113,7 +113,7 @@ der Länge $l$ durchgeführt, wobei die beobachteten Beschriftungen gezählt werden und mit einer Wahrscheinlichkeit von $p_S$ ein struktureller Sprung durchgeführt wird. -\begin{algorithm} +\begin{algorithm}[ht] \begin{algorithmic}[1] \Require \\$G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_t)$ (Erweiterter Graph),\\ $r$ (Anzahl der Random Walks),\\ diff --git a/documents/DYCOS/DYCOS.pdf b/documents/DYCOS/DYCOS.pdf index f6097b0..f7325ca 100644 Binary files a/documents/DYCOS/DYCOS.pdf and b/documents/DYCOS/DYCOS.pdf differ diff --git a/documents/DYCOS/DYCOS.tex b/documents/DYCOS/DYCOS.tex index 473698d..9cb09a1 100644 --- a/documents/DYCOS/DYCOS.tex +++ b/documents/DYCOS/DYCOS.tex @@ -63,7 +63,7 @@ \section{DYCOS} \input{DYCOS-Algorithmus} -\section{Schwächen und Verbesserungsvorschläge} +\section{Probleme des DYCOS-Algorithmus} \input{SchwaechenVerbesserungen} \section{Ausblick} diff --git a/documents/DYCOS/README.md b/documents/DYCOS/README.md index 390506e..aa0a378 100644 --- a/documents/DYCOS/README.md +++ b/documents/DYCOS/README.md @@ -1,13 +1,11 @@ About ===== +The document in this folder is part of a proseminar at KIT. It is +written in German. + Ausarbeitung zum Proseminar "Netzwerkanalyse" am KIT. Die Ausarbeitung soll 10-12 Seiten haben und die Präsentation 25-30 Minuten dauern + 10-15 Minuten Diskussion. -TODO ------ - -* Abschnitt "Problemstellung" überarbeiten -* Algorithmen erklären -* Algorithmus 4, S. 9 +Zu der Ausarbeitung gehört eine [Präsentation](https://github.com/MartinThoma/LaTeX-examples/tree/master/presentations/Datamining-Proseminar). diff --git a/documents/DYCOS/SchwaechenVerbesserungen.tex b/documents/DYCOS/SchwaechenVerbesserungen.tex index 4555a2a..494fd06 100644 --- a/documents/DYCOS/SchwaechenVerbesserungen.tex +++ b/documents/DYCOS/SchwaechenVerbesserungen.tex @@ -1,4 +1,5 @@ -Der in \cite{aggarwal2011} vorgestellte Algorithmus hat einige Probleme, +Bei der Anwendung des in \cite{aggarwal2011} vorgestellten Algorithmus +auf reale Datensätze könnten zwei Probleme auftreten, die im Folgenden erläutert werden. Außerdem werden Verbesserungen vorgeschlagen, die es allerdings noch zu untersuchen gilt. diff --git a/documents/DYCOS/Sprungtypen.tex b/documents/DYCOS/Sprungtypen.tex index fe1a057..70003ff 100644 --- a/documents/DYCOS/Sprungtypen.tex +++ b/documents/DYCOS/Sprungtypen.tex @@ -65,7 +65,7 @@ Ab hier gilt Bei der Wahl der Datenstruktur von $T$ ist zu beachten, dass man in \cref{alg:21} über Indizes auf Elemente aus $T$ zugreifen können muss. -In \cref{alg:l8} bis \cref{alg:l13} wird ein Wörterbuch erstellt, +In \cref{alg:l8} bis \ref{alg:l13} wird ein assoziatives Array erstellt, das von $v' \in T(v)$ auf die relative Häufigkeit bzgl. aller Pfade von $v$ zu Knoten aus den Top-$q$ abbildet. diff --git a/documents/DYCOS/Vokabularbestimmung.tex b/documents/DYCOS/Vokabularbestimmung.tex index 36ac6b6..85db794 100644 --- a/documents/DYCOS/Vokabularbestimmung.tex +++ b/documents/DYCOS/Vokabularbestimmung.tex @@ -30,47 +30,56 @@ nur Wörter betrachtet werden, die auch vorkommen. Ein Vorschlag, wie die Vokabularbestimmung implementiert werden kann, ist als Pseudocode mit \cref{alg:vokabularbestimmung} -gegeben. Dieser Algorithmus benötigt neben dem Speicher für den -Graphen, die Texte sowie die $m$ Vokabeln noch $\mathcal{O}(|\text{Verschiedene Wörter in } S_t| \cdot (|\L_t| + 1))$ -Speicher. Die Average-Case Zeitkomplexität beträgt -$\mathcal{O}(|\text{Wörter in } S_t|)$, wobei dazu die Vereinigung -von Mengen $M,N$ in $\mathcal{O}(\min{|M|, |N|})$ sein muss. +gegeben. In \cref{alg4:l6} wird eine Teilmenge $S_t \subseteq V_{L,t}$ +zum Generieren des Vokabulars gewählt. In \cref{alg4:l8} wird ein Array $cLabelWords$ erstellt, das $(|\L_t|+1)$ Felder hat. +Die Elemente dieser Felder sind jeweils assoziative Arrays, deren +Schlüssel Wörter und deren Werte natürliche Zahlen sind. Die ersten +$|\L_t|$ Elemente von $cLabelWords$ dienem dem Zählen der Häufigkeit +der Wörter von Texten aus $S_t$, wobei für jede Beschriftung die +Häufigkeit einzeln gezählt wird. Das letzte Element aus $cLabelWords$ +zählt die Summe der Wörter. Diese Datenstruktur wird in +\cref{alg4:l10} bis \ref{alg4:l12} gefüllt. -\begin{algorithm} +In \cref{alg4:l17} bis \ref{alg4:l19} wird die relative Häufigkeit +der Wörter bzgl. der Beschriftungen bestimmt. Daraus wird in +\cref{alg4:l20} bis \ref{alg4:l22} der Gini-Koeffizient berechnet. +Schließlich werden in \cref{alg4:l23} bis \ref{alg4:l24} die Top-$q$ +Wörter mit den höchsten Gini-Koeffizienten zurückgegeben. + +\begin{algorithm}[ht] \begin{algorithmic}[1] \Require \\ $V_{L,t}$ (beschriftete Knoten),\\ - $\L_t$ (Beschriftungen),\\ + $\L_t$ (Menge der Beschriftungen),\\ $f:V_{L,t} \rightarrow \L_t$ (Beschriftungsfunktion),\\ $m$ (Gewünschte Vokabulargröße) \Ensure $\M_t$ (Vokabular)\\ - - \State $S_t \gets \Call{Sample}{V_{L,t}}$ \Comment{Wähle eine Teilmenge $S_t \subseteq V_{L,t}$ aus} - \State $\M_t \gets \bigcup_{v \in S_t} \Call{getTextAsSet}{v}$ \Comment{Menge aller Wörter} - \State $cLabelWords \gets (|\L_t|+1) \times |\M_t|$-Array, mit 0en initialisiert\\ - - \ForAll{$v \in V_{L,t}$} \Comment{Gehe jeden Text Wort für Wort durch} + \State $S_t \gets \Call{Sample}{V_{L,t}}$\label{alg4:l6} \Comment{Wähle eine Teilmenge $S_t \subseteq V_{L,t}$ aus} + \State $\M_t \gets \emptyset$ \Comment{Menge aller Wörter} + \State $cLabelWords \gets$ Array aus $(|\L_t|+1)$ assoziativen Arrays\label{alg4:l8} + \ForAll{$v \in S_t$} \label{alg4:l10}\Comment{Gehe jeden Text Wort für Wort durch} \State $i \gets \Call{getLabel}{v}$ - \ForAll{$(word, occurences) \in \Call{getTextAsMultiset}{v}$} - \State $cLabelWords[i][word] \gets cLabelWords[i][word] + occurences$ - \State $cLabelWords[i][|\L_t|] \gets cLabelWords[i][|\L_t|] + occurences$ + \ForAll{$(word, haeufigkeit) \in \Call{getTextAsMultiset}{v}$} + \State $cLabelWords[i][word] \gets cLabelWords[i][word] + haeufigkeit$ + \State $cLabelWords[|\L_t|][word] \gets cLabelWords[i][|\L_t|] + haeufigkeit$ + \State $\M_t = \M_t \cup \Set{word}$ \EndFor - \EndFor - \\ + \EndFor\label{alg4:l12} + \\ \ForAll{Wort $w \in \M_t$} - \State $p \gets $ Array aus $|\L_t|$ Zahlen in $[0, 1]$ + \State $p \gets $ Array aus $|\L_t|$ Zahlen in $[0, 1]$\label{alg4:l17} \ForAll{Label $i \in \L_t$} \State $p[i] \gets \frac{cLabelWords[i][w]}{cLabelWords[i][|\L_t|]}$ - \EndFor + \EndFor\label{alg4:l19} - \State $w$.gini $\gets 0$ + \State $w$.gini $\gets 0$ \label{alg4:l20} \ForAll{$i \in 1, \dots, |\L_t|$} \State $w$.gini $\gets$ $w$.gini + $p[i]^2$ - \EndFor + \EndFor\label{alg4:l22} \EndFor - \State $\M_t \gets \Call{SortDescendingByGini}{\M_t}$ - \State \Return $\Call{Top}{\M_t, m}$ + \State $\M_t \gets \Call{SortDescendingByGini}{\M_t}$\label{alg4:l23} + \State \Return $\Call{Top}{\M_t, m}$\label{alg4:l24} \end{algorithmic} \caption{Vokabularbestimmung} \label{alg:vokabularbestimmung}