Ich arbeite an einem Forschungsprojekt für die Schule. Ich habe eine Text-Mining-Software geschrieben, die Rechtstexte in einer Sammlung analysiert und eine Punktzahl ausspuckt, die angibt, wie ähnlich sie sind. Ich habe das Programm ausgeführt, um jeden Text mit jedem anderen Text zu vergleichen, und ich habe Daten wie diese (obwohl mit vielen weiteren Punkten):
%Vor%Jetzt muss ich sie in einem Diagramm darstellen. Ich kann die Noten leicht invertieren, so dass ein kleiner Wert nun ähnliche Texte anzeigt und ein großer Wert auf ungleiche Texte hinweist: Der Wert kann der Abstand zwischen Punkten in einem Graph sein, der die Texte darstellt.
%Vor%KURZE VERSION: Diese Werte direkt oberhalb sind Abstände zwischen Punkten auf einem Streudiagramm (1.75212 ist der Abstand zwischen dem Code des Hammurabi-Punktes und dem Kretpoint). Ich kann mir ein großes Gleichungssystem mit Kreisen vorstellen, die die Abstände zwischen Punkten darstellen. Was ist der beste Weg, dieses Diagramm zu erstellen? Ich habe MATLAB, R, Excel und Zugang zu so ziemlich jeder Software, die ich brauche.
Wenn Sie mich sogar in eine Richtung weisen können, bin ich unendlich dankbar.
Ihre Daten sind wirklich Entfernungen (irgendeiner Form) in dem multivariaten Raum, der durch das Korpus von Wörtern in den Dokumenten aufgespannt wird. Unähnlichkeitsdaten wie diese sind oft so angeordnet, dass sie die beste k -d-Abbildung der Unähnlichkeiten liefern. Hauptkoordinatenanalyse und nichtmetrische multidimensionale Skalierung sind zwei solcher Methoden. Ich würde vorschlagen, dass Sie die Ergebnisse der Anwendung der einen oder der anderen dieser Methoden auf Ihre Daten auftragen. Ich gebe Beispiele für beide unten.
Laden Sie zuerst die Daten, die Sie geliefert haben (ohne Etiketten in diesem Stadium)
%Vor%Was Sie effektiv haben, ist die folgende Abstandsmatrix:
%Vor% R benötigt im Allgemeinen ein Unähnlichkeitsobjekt der Klasse "dist"
. Wir könnten as.dist(mat)
jetzt verwenden, um ein solches Objekt zu erhalten, oder wir könnten die Erstellung von mat
überspringen und direkt zum "dist"
-Objekt wie folgt gehen:
Jetzt haben wir ein Objekt vom richtigen Typ, wir können es ordinieren. R hat viele Pakete und Funktionen, um dies zu tun (siehe Multivariate oder Environmetrics Aufgabenansichten auf CRAN), aber ich werde das vegan -Paket verwenden, da ich etwas bin vertraut damit ...
%Vor%Zunächst erläutere ich, wie Sie mit vegan eine Hauptkoordinatenanalyse Ihrer Daten durchführen.
%Vor% Die erste PCO-Achse ist bei weitem die wichtigste Erklärung für die Unterschiede zwischen den einzelnen Texten, wie sie die Eigenwerte zeigen. Ein Ordinationsdiagramm kann nun erstellt werden, indem die Eigenvektoren des PCO mit der Methode plot
was produziert
Eine nichtmetrische multidimensionale Skalierung (nMDS) versucht nicht, eine niedrigdimensionale Darstellung der ursprünglichen Abstände in einem euklidischen Raum zu finden. Stattdessen wird versucht, eine Zuordnung in k Dimensionen zu finden, die die Rangordnung der Abstände zwischen den Beobachtungen am besten erhält. Es gibt keine Lösung in geschlossener Form für dieses Problem (im Gegensatz zu dem oben verwendeten PCO) und ein iterativer Algorithmus ist erforderlich, um eine Lösung bereitzustellen. Zufällige Starts werden empfohlen, um sicherzustellen, dass der Algorithmus nicht zu einer suboptimalen, lokal optimalen Lösung konvergiert ist. Vegans metaMDS
Funktion beinhaltet diese Funktionen und mehr. Wenn Sie ein einfaches altes nMDS wollen, dann sehen Sie isoMDS
im Paket MASS .
Mit diesem kleinen Datensatz können wir die Rangordnung der Unähnlichkeiten im Wesentlichen perfekt darstellen (daher die Warnung, nicht gezeigt). Ein Diagramm kann mit der Methode plot
was produziert
In beiden Fällen ist der Abstand zwischen den Proben auf der Kurve die beste 2-d-Näherung ihrer Verschiedenheit. Im Falle des PCO-Plots ist es eine 2-d-Approximation der realen Unähnlichkeit (3 Dimensionen werden benötigt, um alle Unähnlichkeiten vollständig darzustellen), wohingegen in der nMDS-Darstellung die Distanz zwischen den Samples auf der Darstellung die Ungleichheit der Rangfolge widerspiegelt nicht die tatsächliche Unähnlichkeit zwischen den Beobachtungen. Aber im Wesentlichen Abstände auf der Handlung stellen die berechneten Unähnlichkeiten dar. Texte, die nahe beieinander liegen, sind am ähnlichsten, Texte, die weit voneinander entfernt liegen, sind einander am ähnlichsten.
Wenn die Frage lautet: "Wie kann ich sowas wie diesen Kerl machen? (aus dem Kommentar von xiii1408 zu der Frage), dann ist die Antwort Verwenden Sie Gephis eingebauten Force Atlas 2-Algorithmus für euklidische Distanzen des Dokumententhemas Posterior-Wahrscheinlichkeiten .
"Dieser Typ" ist Matt Jockers, der ein innovativer Wissenschaftler in den digitalen Geisteswissenschaften ist. Er hat einige seiner Methoden auf seinem Blog und etc. Jockers funktioniert meistens in R
und teilt etwas von seinem Code . Sein grundlegender Arbeitsfluss scheint zu sein:
Hier ist ein kleines reproduzierbares Beispiel in R
(mit einem Export nach Gephi), das dem von Jockers nahe kommt:
Daten abrufen ...
%Vor%Reinigen und neu gestalten ...
%Vor%Teil der Rede Tagging und Sub-Einstellung von Substantiven ...
%Vor%Topic-Modellierung mit latenter Dirichlet-Zuordnung ...
%Vor%Berechnen Sie euklidische Abstände eines Dokuments von einem anderen unter Verwendung von Themenwahrscheinlichkeiten als die "DNA" des Dokuments
%Vor%Visualisieren Sie mit einem kraftgesteuerten Graphen ...
%Vor%
Und wenn Sie den Force Atlas 2-Algorithmus in Gephi verwenden möchten, exportieren Sie einfach das R
graph-Objekt in eine graphml
-Datei und öffnen es dann in Gephi und legen das Layout auf Force Atlas 2 fest:
Hier ist das Gephi-Diagramm mit dem Force Atlas 2-Algorithmus:
Sie könnten eine Netzwerkgrafik mit Hilfe von igraph erstellen. Das Fruchterman-Reingold-Layout hat einen Parameter, um Kantengewichte bereitzustellen. Gewichte größer als 1 führen zu mehr "Attraktion" entlang der Kanten, Gewichte kleiner als 1 tun das Gegenteil. In Ihrem Beispiel hat crete.txt die geringste Entfernung und sitzt in der Mitte und hat kleinere Kanten zu anderen Ecken. In der Tat ist es näher an iraqi.txt. Beachten Sie, dass Sie die Daten für E (g) $ weight umkehren müssen, um die richtigen Abstände zu erhalten.
%Vor%
Machst du alle paarweisen Vergleiche? Abhängig davon, wie Sie die Entfernung berechnen (Ähnlichkeit), bin ich mir nicht sicher, ob es möglich ist, ein solches Streudiagramm zu erstellen. Wenn Sie also nur 3 Textdateien berücksichtigen müssen, ist Ihr Streudiagramm einfach zu erstellen (Dreieck mit den Seiten entspricht den Abständen). Wenn Sie jedoch den vierten Punkt hinzufügen, können Sie ihn möglicherweise nicht an einem Ort platzieren, an dem seine Abstände zu den vorhandenen 3 Punkten alle Einschränkungen erfüllen.
Aber wenn Sie das tun können, dann haben Sie eine Lösung, fügen Sie einfach neue Punkte hinzu .... Ich denke ... Oder, wenn Sie nicht die Abstände auf dem Streudiagramm benötigen, um genau zu sein, können Sie einfach ein Web erstellen und die Entfernung beschriften.
Hier ist eine mögliche Lösung für Matlab:
Sie können Ihre Daten in einer formalen 5x5-Ähnlichkeitsmatrix S anordnen, wobei das Element S (i, j) Ihre Ähnlichkeit (oder Unähnlichkeit) zwischen dem Dokument darstellt ich und dokumentiere j . Unter der Annahme, dass Ihr Distanzmaß ein tatsächliches Messwert ist, können Sie multidimensionales Skalieren
Diese Funktion wird versuchen, eine 5x2-dimensionale Darstellung Ihrer Daten zu finden, die die Ähnlichkeit (oder Unähnlichkeit) zwischen Ihren Klassen in den höheren Dimensionen bewahrt. Sie können diese Daten dann als Streudiagramm von 5 Punkten visualisieren.
Sie könnten dies auch mit mdscale (S, 3) versuchen, um in eine 5x3-dimensionale Matrix zu projizieren, die Sie dann mit plot3 () visualisieren können.
Wenn Sie Kreise haben möchten, die die Abstände zwischen Punkten darstellen, würde dies in R funktionieren (ich habe die erste Tabelle in Ihrem Beispiel verwendet):
%Vor%
Dieser Matlab-Snippet sollte funktionieren, wenn Sie eine 3D-Balkenansicht ausprobieren möchten:
%Vor%Tags und Links r matlab graph text-mining distance