📚 The CoCalc Library - books, templates and other resources
cocalc-examples / martinthoma-latex-examples / publications / Proseminar-Netzwerkanalyse / DYCOS-Algorithmus.tex
132928 viewsLicense: OTHER
\subsection{Überblick}1DYCOS (\underline{DY}namic \underline{C}lassification algorithm with2c\underline{O}ntent and \underline{S}tructure) ist ein3Knotenklassifizierungsalgorithmus, der Ursprünglich in \cite{aggarwal2011}4vorgestellt wurde.56Ein zentrales Element des DYCOS-Algorithmus ist der sog. {\it Random Walk}:78\begin{definition}[Random Walk, Sprung]9Sei $G = (V, E)$ mit $E \subseteq V \times V$ ein Graph und10$v_0 \in V$ ein Knoten des Graphen.1112Ein Random Walk der Länge $l$ auf $G$, startend bei $v_0$ ist nun der13zeitdiskrete stochastische Prozess, der $v_i$ auf einen zufällig gewählten14Nachbarn $v_{i+1}$ abbildet (für $i \in 0, \dots, l-1$). Die Abbildung $v_i15\mapsto v_{i+1}$ heißt ein Sprung.16\end{definition}1718Der DYCOS-Algorithmus klassifiziert einzelne Knoten, indem $r$ Random Walks der19Länge $l$, startend bei dem zu klassifizierenden Knoten $v$ gemacht werden.20Dabei werden die Beschriftungen der besuchten Knoten gezählt. Die Beschriftung,21die am häufigsten vorgekommen ist, wird als Beschriftung für $v$ gewählt. DYCOS22nutzt also die sog. Homophilie, d.~h. die Eigenschaft, dass Knoten, die nur23wenige Hops von einander entfernt sind, häufig auch ähnlich sind \cite{bhagat}.24Der DYCOS-Algorithmus arbeitet jedoch nicht direkt auf dem Graphen, sondern25erweitert ihn mit Hilfe der zur Verfügung stehenden Texte. Wie diese26Erweiterung erstellt wird, wird im Folgenden erklärt.\\27Für diese Erweiterung wird zuerst wird Vokabular $W_t$ bestimmt, das28charakteristisch für eine Knotengruppe ist. Wie das gemacht werden kann und29warum nicht einfach jedes Wort in das Vokabular aufgenommen wird, wird in30\cref{sec:vokabularbestimmung} erläutert.\\31Nach der Bestimmung des Vokabulars wird für jedes Wort im Vokabular ein32Wortknoten zum Graphen hinzugefügt. Alle Knoten, die der Graph zuvor hatte,33werden nun \enquote{Strukturknoten} genannt.34Ein Strukturknoten $v$ wird genau dann mit einem Wortknoten $w \in W_t$35verbunden, wenn $w$ in einem Text von $v$ vorkommt. \Cref{fig:erweiterter-graph}36zeigt beispielhaft den so entstehenden, semi-bipartiten Graphen.37Der DYCOS-Algorithmus betrachtet also die Texte, die einem Knoten38zugeordnet sind, als eine Multimenge von Wörtern. Das heißt, zum einen39wird nicht auf die Reihenfolge der Wörter geachtet, zum anderen wird40bei Texten eines Knotens nicht zwischen verschiedenen41Texten unterschieden. Jedoch wird die Anzahl der Vorkommen42jedes Wortes berücksichtigt.4344\begin{figure}[htp]45\centering46\input{figures/graph-content-and-structure.tex}47\caption{Erweiterter Graph}48\label{fig:erweiterter-graph}49\end{figure}5051Entsprechend werden zwei unterschiedliche Sprungtypen unterschieden, die52strukturellen Sprünge und inhaltliche Zweifachsprünge:5354\begin{definition}[struktureller Sprung]55Sei $G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der56um die Wortknoten $W_{t}$ erweiterte Graph.5758Dann heißt das zufällige wechseln des aktuell betrachteten59Knoten $v \in V_t$ zu einem benachbartem Knoten $w \in V_t$60ein \textit{struktureller Sprung}.61\end{definition}62\goodbreak63Im Gegensatz dazu benutzten inhaltliche Zweifachsprünge tatsächlich die64Grapherweiterung:65\begin{definition}[inhaltlicher Zweifachsprung]66Sei $G_t = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_{t})$ der um die67Wortknoten $W_{t}$ erweiterte Graph.6869Dann heißt das zufällige wechseln des aktuell betrachteten Knoten $v \in70V_t$ zu einem benachbartem Knoten $w \in W_t$ und weiter zu einem71zufälligem Nachbar $v' \in V_t$ von $w$ ein inhaltlicher Zweifachsprung.72\end{definition}7374Jeder inhaltliche Zweifachsprung beginnt und endet also in einem75Strukturknoten, springt über einen Wortknoten und ist ein Pfad der Länge~2.7677Ob in einem Sprung der Random Walks ein struktureller Sprung oder ein78inhaltlicher Zweifachsprung gemacht wird, wird jedes mal zufällig neu79entschieden. Dafür wird der Parameter $0 \leq p_S \leq 1$ für den Algorithmus80gewählt. Mit einer Wahrscheinlichkeit von $p_S$ wird ein struktureller Sprung81durchgeführt und mit einer Wahrscheinlichkeit von $(1-p_S)$ ein modifizierter82inhaltlicher Zweifachsprung, wie er in \cref{sec:sprungtypen} erklärt wird,83gemacht. Der Parameter $p_S$ gibt an, wie wichtig die Struktur des Graphen im84Verhältnis zu den textuellen Inhalten ist. Bei $p_S = 0$ werden ausschließlich85die Texte betrachtet, bei $p_S = 1$ ausschließlich die Struktur des Graphen.8687Die Vokabularbestimmung kann zu jedem Zeitpunkt $t$ durchgeführt werden, muss88es aber nicht.8990In \cref{alg:DYCOS} steht der DYCOS-Algorithmus in Form von Pseudocode:91In \cref{alg1:l8} wird für jeden unbeschrifteten Knoten92durch die folgenden Zeilen eine Beschriftung gewählt.9394\Cref{alg1:l10} führt $r$ Random Walks durch. In \cref{alg1:l11} wird eine95temporäre Variable für den aktuell betrachteten Knoten angelegt.9697In \cref{alg1:l12} bis \cref{alg1:l21} werden einzelne Random Walks der Länge98$l$ durchgeführt, wobei die beobachteten Beschriftungen gezählt werden und mit99einer Wahrscheinlichkeit von $p_S$ ein struktureller Sprung durchgeführt wird.100101\begin{algorithm}[ht]102\begin{algorithmic}[1]103\Require \\$G_{E,t} = (V_t, E_{S,t} \cup E_{W,t}, V_{L,t}, W_t)$ (Erweiterter Graph),\\104$r$ (Anzahl der Random Walks),\\105$l$ (Länge eines Random Walks),\\106$p_s$ (Wahrscheinlichkeit eines strukturellen Sprungs),\\107$q$ (Anzahl der betrachteten Knoten in der Clusteranalyse)108\Ensure Klassifikation von $V_t \setminus V_{L,t}$\\109\\110111\ForAll{Knoten $v \in V_t \setminus V_{L,t}$}\label{alg1:l8}112\State $d \gets $ leeres assoziatives Array113\For{$i = 1, \dots,r$}\label{alg1:l10}114\State $w \gets v$\label{alg1:l11}115\For{$j= 1, \dots, l$}\label{alg1:l12}116\State $sprungTyp \gets \Call{random}{0, 1}$117\If{$sprungTyp \leq p_S$}118\State $w \gets$ \Call{SturkturellerSprung}{$w$}119\Else120\State $w \gets$ \Call{InhaltlicherZweifachsprung}{$w$}121\EndIf122\State $beschriftung \gets w.\Call{GetLabel}{ }$123\If{$!d.\Call{hasKey}{beschriftung}$}124\State $d[beschriftung] \gets 0$125\EndIf126\State $d[beschriftung] \gets d[beschriftung] + 1$127\EndFor\label{alg1:l21}128\EndFor129130\If{$d$.\Call{isEmpty}{ }} \Comment{Es wurde kein beschrifteter Knoten gesehen}131\State $M_H \gets \Call{HäufigsteLabelImGraph}{ }$132\Else133\State $M_H \gets \Call{max}{d}$134\EndIf135\\136\State \Comment{Wähle aus der Menge der häufigsten Beschriftungen $M_H$ zufällig eine aus}137\State $label \gets \Call{Random}{M_H}$138\State $v.\Call{AddLabel}{label}$ \Comment{und weise dieses $v$ zu}139\EndFor140\State \Return Beschriftungen für $V_t \setminus V_{L,t}$141\end{algorithmic}142\caption{DYCOS-Algorithmus}143\label{alg:DYCOS}144\end{algorithm}145146\subsection{Datenstrukturen}147Zusätzlich zu dem gerichteten Graphen $G_t = (V_t, E_t, V_{L,t})$ verwaltet der148DYCOS-Algorithmus zwei weitere Datenstrukturen:149\begin{itemize}150\item Für jeden Knoten $v \in V_t$ werden die vorkommenden Wörter,151die auch im Vokabular $W_t$ sind,152und deren Anzahl gespeichert. Das könnte z.~B. über ein153assoziatives Array (auch \enquote{dictionary} oder154\enquote{map} genannt) geschehen. Wörter, die nicht in155Texten von $v$ vorkommen, sind nicht im Array. Für156alle vorkommenden Wörter ist der gespeicherte Wert zum157Schlüssel $w \in W_t$ die Anzahl der Vorkommen von158$w$ in den Texten von $v$.159\item Für jedes Wort des Vokabulars $W_t$ wird eine Liste von160Knoten verwaltet, in deren Texten das Wort vorkommt.161Diese Liste wird bei den inhaltlichen Zweifachsprung,162der in \cref{sec:sprungtypen} erklärt wird,163verwendet.164\end{itemize}165166\input{Sprungtypen}167\input{Vokabularbestimmung}168169170