mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-26 06:48:04 +02:00
renaming
This commit is contained in:
parent
ca456c4f5e
commit
177d17e7a3
25 changed files with 1 additions and 1 deletions
182
documents/Proseminar-Netzwerkanalyse/DYCOS-Algorithmus.tex
Normal file
182
documents/Proseminar-Netzwerkanalyse/DYCOS-Algorithmus.tex
Normal file
|
@ -0,0 +1,182 @@
|
|||
\subsection{Überblick}
|
||||
DYCOS (\underline{DY}namic \underline{C}lassification
|
||||
algorithm with c\underline{O}ntent and \underline{S}tructure) ist ein
|
||||
Knotenklassifizierungsalgorithmus, der Ursprünglich in \cite{aggarwal2011} vorgestellt
|
||||
wurde.
|
||||
|
||||
Ein zentrales Element des DYCOS-Algorithmus ist der sog.
|
||||
{\it Random Walk}:
|
||||
|
||||
\begin{definition}[Random Walk, Sprung]
|
||||
Sei $G = (V, E)$ mit $E \subseteq V \times V$ ein Graph und
|
||||
$v_0 \in V$ ein Knoten des Graphen.
|
||||
|
||||
%Sei außerdem $f: V \rightarrow \mathcal{P}(V)$ eine Abbildung
|
||||
%mit der Eigenschaft:
|
||||
%\[ \forall v \in V \forall v' \in f(v): \exists \text{Weg von } v \text{ nach } v'\]
|
||||
|
||||
Ein Random Walk der Länge $l$ auf $G$, startend bei $v_0$ ist
|
||||
nun der zeitdiskrete stochastische Prozess, der $v_i$
|
||||
auf einen zufällig gewählten Nachbarn $v_{i+1}$ abbildet
|
||||
(für $i \in 0, \dots, l-1$).
|
||||
Die Abbildung $v_i \mapsto v_{i+1}$ heißt ein Sprung.
|
||||
\end{definition}
|
||||
|
||||
Der DYCOS-Algorithmus klassifiziert einzelne Knoten, indem $r$ Random Walks der Länge $l$,
|
||||
startend bei dem zu klassifizierenden Knoten $v$ gemacht werden. Dabei
|
||||
werden die Beschriftungen der besuchten Knoten gezählt. Die Beschriftung, die am häufigsten
|
||||
vorgekommen ist, wird als Beschriftung für $v$ gewählt.
|
||||
DYCOS nutzt also die sog. Homophilie, d.~h. die Eigenschaft, dass
|
||||
Knoten, die nur wenige Hops von einander entfernt sind, häufig auch
|
||||
ähnlich sind \cite{bhagat}. Der DYCOS-Algorithmus arbeitet jedoch nicht
|
||||
direkt auf dem Graphen, sondern erweitert ihn mit
|
||||
Hilfe der zur Verfügung stehenden Texte. Wie diese Erweiterung
|
||||
erstellt wird, wird im Folgenden erklärt.\\
|
||||
Für diese Erweiterung wird zuerst wird Vokabular $W_t$ bestimmt, das
|
||||
charakteristisch für eine Knotengruppe ist. Wie das gemacht werden kann
|
||||
und warum nicht einfach jedes Wort in das Vokabular aufgenommen wird,
|
||||
wird in \cref{sec:vokabularbestimmung} erläutert.\\
|
||||
Nach der Bestimmung des Vokabulars wird für
|
||||
jedes Wort im Vokabular ein Wortknoten zum Graphen hinzugefügt. Alle
|
||||
Knoten, die der Graph zuvor hatte, werden nun \enquote{Strukturknoten}
|
||||
genannt.
|
||||
Ein Strukturknoten $v$ wird genau dann mit einem Wortknoten $w \in W_t$
|
||||
verbunden, wenn $w$ in einem Text von $v$ vorkommt. \Cref{fig:erweiterter-graph}
|
||||
zeigt beispielhaft den so entstehenden, semi-bipartiten Graphen.
|
||||
Der DYCOS-Algorithmus betrachtet also die Texte, die einem Knoten
|
||||
zugeordnet sind, als eine Multimenge von Wörtern. Das heißt, zum einen
|
||||
wird nicht auf die Reihenfolge der Wörter geachtet, zum anderen wird
|
||||
bei Texten eines Knotens nicht zwischen verschiedenen
|
||||
Texten unterschieden. Jedoch wird die Anzahl der Vorkommen
|
||||
jedes Wortes berücksichtigt.
|
||||
|
||||
\begin{figure}[htp]
|
||||
\centering
|
||||
\input{figures/graph-content-and-structure.tex}
|
||||
\caption{Erweiterter Graph}
|
||||
\label{fig:erweiterter-graph}
|
||||
\end{figure}
|
||||
|
||||
Entsprechend werden zwei unterschiedliche Sprungtypen unterschieden,
|
||||
die strukturellen Sprünge und inhaltliche Zweifachsprünge:
|
||||
|
||||
\begin{definition}[struktureller Sprung]
|
||||
Sei $G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
|
||||
um die Wortknoten $W_{t}$ erweiterte Graph.
|
||||
|
||||
Dann heißt das zufällige wechseln des aktuell betrachteten
|
||||
Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in V_t$
|
||||
ein \textit{struktureller Sprung}.
|
||||
\end{definition}
|
||||
\goodbreak
|
||||
Im Gegensatz dazu benutzten inhaltliche Zweifachsprünge
|
||||
tatsächlich die Grapherweiterung:
|
||||
\begin{definition}[inhaltlicher Zweifachsprung]
|
||||
Sei $G_t = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der
|
||||
um die Wortknoten $W_{t}$ erweiterte Graph.
|
||||
|
||||
Dann heißt das zufällige wechseln des aktuell betrachteten
|
||||
Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in W_t$
|
||||
und weiter zu einem zufälligem Nachbar $v' \in V_t$ von $w$
|
||||
ein inhaltlicher Zweifachsprung.
|
||||
\end{definition}
|
||||
|
||||
Jeder inhaltliche Zweifachsprung beginnt und endet also in einem Strukturknoten,
|
||||
springt über einen Wortknoten und ist ein Pfad der Länge~2.
|
||||
|
||||
Ob in einem Sprung der Random Walks ein struktureller Sprung oder
|
||||
ein inhaltlicher Zweifachsprung gemacht wird, wird jedes mal zufällig
|
||||
neu entschieden. Dafür wird der Parameter $0 \leq p_S \leq 1$ für den Algorithmus
|
||||
gewählt. Mit einer Wahrscheinlichkeit von $p_S$ wird ein struktureller
|
||||
Sprung durchgeführt und mit einer Wahrscheinlichkeit
|
||||
von $(1-p_S)$ ein modifizierter inhaltlicher Zweifachsprung, wie er in
|
||||
\cref{sec:sprungtypen} erklärt wird, gemacht. Der
|
||||
Parameter $p_S$ gibt an, wie wichtig die Struktur des Graphen im Verhältnis
|
||||
zu den textuellen Inhalten ist. Bei $p_S = 0$ werden ausschließlich
|
||||
die Texte betrachtet, bei $p_S = 1$ ausschließlich die Struktur des
|
||||
Graphen.
|
||||
|
||||
Die Vokabularbestimmung kann zu jedem Zeitpunkt $t$ durchgeführt
|
||||
werden, muss es aber nicht.
|
||||
|
||||
In \cref{alg:DYCOS} wird der DYCOS-Algorithmus als
|
||||
Pseudocode vorgestellt:
|
||||
In \cref{alg1:l8} wird für jeden unbeschrifteten Knoten
|
||||
durch die folgenden Zeilen eine Beschriftung gewählt.
|
||||
|
||||
\Cref{alg1:l10} führt $r$ Random Walks durch.
|
||||
In \cref{alg1:l11} wird eine temporäre Variable für den aktuell
|
||||
betrachteten Knoten angelegt.
|
||||
|
||||
In \cref{alg1:l12} bis \cref{alg1:l21} werden einzelne Random Walks
|
||||
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}[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),\\
|
||||
$l$ (Länge eines Random Walks),\\
|
||||
$p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs),\\
|
||||
$q$ (Anzahl der betrachteten Knoten in der Clusteranalyse)
|
||||
\Ensure Klassifikation von $V_t \setminus V_{L,t}$\\
|
||||
\\
|
||||
|
||||
\ForAll{Knoten $v \in V_t \setminus V_{L,t}$}\label{alg1:l8}
|
||||
\State $d \gets $ leeres assoziatives Array
|
||||
\For{$i = 1, \dots,r$}\label{alg1:l10}
|
||||
\State $w \gets v$\label{alg1:l11}
|
||||
\For{$j= 1, \dots, l$}\label{alg1:l12}
|
||||
\State $sprungTyp \gets \Call{random}{0, 1}$
|
||||
\If{$sprungTyp \leq p_S$}
|
||||
\State $w \gets$ \Call{SturkturellerSprung}{$w$}
|
||||
\Else
|
||||
\State $w \gets$ \Call{InhaltlicherZweifachsprung}{$w$}
|
||||
\EndIf
|
||||
\State $beschriftung \gets w.\Call{GetLabel}{ }$
|
||||
\If{$!d.\Call{hasKey}{beschriftung}$}
|
||||
\State $d[beschriftung] \gets 0$
|
||||
\EndIf
|
||||
\State $d[beschriftung] \gets d[beschriftung] + 1$
|
||||
\EndFor\label{alg1:l21}
|
||||
\EndFor
|
||||
|
||||
\If{$d$.\Call{isEmpty}{ }} \Comment{Es wurde kein beschrifteter Knoten gesehen}
|
||||
\State $M_H \gets \Call{HäufigsteLabelImGraph}{ }$
|
||||
\Else
|
||||
\State $M_H \gets \Call{max}{d}$
|
||||
\EndIf
|
||||
\\
|
||||
\State \textit{//Wähle aus der Menge der häufigsten Beschriftungen $M_H$ zufällig eine aus}
|
||||
\State $label \gets \Call{Random}{M_H}$
|
||||
\State $v.\Call{AddLabel}{label}$ \Comment{und weise dieses $v$ zu}
|
||||
\EndFor
|
||||
\State \Return Beschriftungen für $V_t \setminus V_{L,t}$
|
||||
\end{algorithmic}
|
||||
\caption{DYCOS-Algorithmus}
|
||||
\label{alg:DYCOS}
|
||||
\end{algorithm}
|
||||
|
||||
\subsection{Datenstrukturen}
|
||||
Zusätzlich zu dem gerichteten Graphen $G_t = (V_t, E_t, V_{L,t})$
|
||||
verwaltet der DYCOS-Algorithmus zwei weitere Datenstrukturen:
|
||||
\begin{itemize}
|
||||
\item Für jeden Knoten $v \in V_t$ werden die vorkommenden Wörter,
|
||||
die auch im Vokabular $W_t$ sind,
|
||||
und deren Anzahl gespeichert. Das könnte z.~B. über ein
|
||||
assoziatives Array (auch \enquote{dictionary} oder
|
||||
\enquote{map} genannt) geschehen. Wörter, die nicht in
|
||||
Texten von $v$ vorkommen, sind nicht im Array. Für
|
||||
alle vorkommenden Wörter ist der gespeicherte Wert zum
|
||||
Schlüssel $w \in W_t$ die Anzahl der Vorkommen von
|
||||
$w$ in den Texten von $v$.
|
||||
\item Für jedes Wort des Vokabulars $W_t$ wird eine Liste von
|
||||
Knoten verwaltet, in deren Texten das Wort vorkommt.
|
||||
Diese Liste wird bei den inhaltlichen Zweifachsprung,
|
||||
der in \cref{sec:sprungtypen} erklärt wird,
|
||||
verwendet.
|
||||
\end{itemize}
|
||||
|
||||
\input{Sprungtypen}
|
||||
\input{Vokabularbestimmung}
|
Loading…
Add table
Add a link
Reference in a new issue