So reduzieren Sie die Dimensionalität in R

28

Ich habe eine Matrix, in der a (i, j) angibt, wie oft ich Seite j angesehen habe. Es gibt 27.000 Einzelpersonen und 95.000 Seiten. Ich möchte eine Handvoll "Dimensionen" oder "Aspekte" im Bereich von Seiten haben, die Gruppen von Seiten entsprechen, die oft zusammen betrachtet werden. Mein letztendliches Ziel ist es, dann berechnen zu können, wie oft ich einzelne Seiten angesehen habe, die in Dimension 1, Dimension 2 usw. fallen.

Ich habe die R-Dokumentation zur Hauptkomponentenanalyse und Einzelwertzerlegung gelesen und habe diese Befehle ausgeführt, bin mir aber nicht sicher, wie ich vorgehen soll.

Wie kann ich die Dimensionsreduzierung verwenden? Oder ist das wirklich ein Clustering-Problem und ich sollte stattdessen Clustering-Algorithmen untersuchen?

Vielen Dank für jeden Einblick ~ l

Laramichaels
quelle

Antworten:

10

Nehmen wir an, mat_pages [] enthält Seiten in den Spalten (die Sie zu Clustern zusammenfassen möchten) und Einzelpersonen in den Zeilen. Mit dem folgenden Befehl können Sie Seiten basierend auf einzelnen Daten in Rby gruppieren:

  pc <- prcomp(x=mat_pages,center=TRUE,scale=TRUE)

Die Ladematrix ist die Matrix der Eigenvektoren der SVD-Zerlegung der Daten. Sie geben das relative Gewicht jeder SEITE bei der Berechnung der Punktzahlen an. Belastungen mit größeren absoluten Werten haben einen größeren Einfluss auf die Bestimmung der Bewertung der entsprechenden Hauptkomponente.

Ich möchte jedoch auch auf das kurze Problem hinweisen, das mit der Verwendung von PCA zum Clustering von Seiten verbunden ist. Der Grund dafür ist, dass Ladungen den SEITEN mit höheren Abweichungen ein größeres Gewicht verleihen, unabhängig davon, ob diese Abweichung tatsächlich auf den SEITEN-Inhalt oder auf einen anderen Grund zurückzuführen ist (es kann sich um technische oder individuelle Abweichungen handeln). Die Ladungen spiegeln nicht unbedingt die wahren Unterschiede zwischen den Gruppen wider, die (vielleicht) Ihr Hauptinteresse sind. ABER diese Gruppierung spiegelt wirklich die Unterschiede in der Gruppe unter der Annahme wider, dass alle Seiten die gleiche Varianz aufweisen (ich weiß nicht, ob dies eine gültige Annahme ist).

Wenn Sie über leistungsstarke Rechenfunktionen verfügen (was aufgrund Ihrer Datengröße möglich sein kann), ist die Verwendung hierarchischer Modelle möglicherweise eine gute Idee. In R kann dies mit dem Paket lme4 erfolgen.


Was tun, nachdem Sie die Punktzahlen haben?

Dies ist ein grober Vorschlag, und die Analyse hängt stark davon ab, wie die Daten aussehen. Außerdem würde ich vermuten, dass dieser Prozess höchst unmöglich ist, um die Daten der Größenordnung, die Sie haben, zu gruppieren.

pc.col <- paste("page", 1:27000, sep=".")

pdf("principle-components.pdf")
plot(pc$x[,1:2]) ## Just look at the 1st two loadings (as you can see the groupings in a plane)
dev.off()

Hoffentlich können Sie auf diese Weise ein Bild davon erhalten, wie die Daten gruppiert sind.

Achtung: Dies ist nicht das, was ich empfehlen würde.


Meine Empfehlung:

Probleme wie diese treten häufig in der Genomik auf. Ihre Fallseiten entsprechen Genen und Individuen entsprechen Patienten (im Grunde genommen hat Individuen dieselbe Bedeutung wie in der Genomik).

Sie möchten die Seiten basierend auf Daten gruppieren.

Sie können in R viele Clustering-Pakete verwenden, auf die in anderen Antworten verwiesen wurde. Ein grundlegendes Problem bei Paketen ist wie bei hclust, wie die Anzahl der Cluster bestimmt wird. Einige meiner Favoriten sind:

  • pvclust (Gibt Ihnen Cluster und gibt auch einen p-Wert für jeden Cluster an. Mit dem p-Wert können Sie die statistisch signifikanten Cluster bestimmen. Problem : Benötigt viel Rechenleistung und ich bin nicht sicher, ob es mit Ihren Daten funktioniert Größe)
  • hopach (Gibt die geschätzte Anzahl der Cluster und der Cluster an.)
  • In Bioconductor sind weitere Pakete verfügbar. Überprüfen Sie diese in der Task-Ansicht.

Sie können auch Clustering-Algorithmen wie k-means usw. verwenden. Ich bin sicher, dass ich in diesem Forum einen Thread zum Thema Clustering gesehen habe. Die Antworten waren sehr detailliert. Es wurde von Tal Galili gefragt, ob ich mich richtig erinnere.

suncoolsu
quelle
@suncoolsu: vielen dank! Ich habe gerade Ihren Rat befolgt und prcomp ausgeführt. Ich habe auch die erstellte Ladungsmatrix gespeichert. Aber wie kann ich diese Matrix verwenden, um die Seiten zu gruppieren?
Laramichaels
Hallo Laramichaels, bitte finde meine Antwort unten.
Suncoolsu
@suncoolsu: Ich habe mit einem ähnlichen Problem zu tun, aber ich möchte die Individuen "gruppieren", die die gleiche "Dynamik" haben (tatsächlich habe ich eine große Anzahl von Zeitreihen pro Region und ich möchte sie modellieren). Ich überlegte, Pam mit der Korrelationsentfernung (1-Rho) zu verwenden. Ist das ein empfohlener Weg? Könnten Sie bitte einige Wege vorschlagen, die Sie erkunden möchten?
Teucer
@Musa .. Kannst du etwas klarer sein. Ich glaube nicht, dass ich die von Ihnen erwähnte "Dynamik" verstehe. Auf jeden Fall ist pam für das Clustering in Ordnung. Sie können aber auch die von mir erwähnten R-Pakete pvclust und hopach ausprobieren. Auch SOM (Self Organizing Maps) sind eine andere Sichtweise auf Clustering. Weitere Informationen finden Sie im Buch von Ripley und Venable (2002) - MASS. Das Buch bietet eine gründliche Behandlung von Clustering.
Suncoolsu
@suncoolsu: Sorry für die schlechte Formulierung! Ich habe 200 Zeitreihen, die ich modellieren (dh simulieren) möchte. Ich denke, ich kann "ähnliche" Zeitreihen gruppieren (dh das gleiche Verhalten über die Zeit haben: der direkte Ansatz besteht darin, die Korrelation zu verwenden) und nur die Cluster-Zeitreihen simulieren ...
Teucer
4

Es ist sicherlich ein Clustering-Problem. Schauen Sie sich das Rs- clusterPaket an, um einen Überblick über die Algorithmusoptionen zu erhalten ( pamund agnesstarten Sie am besten mit diesen Optionen; sie stellen zwei Hauptströme in Clustering dar - Centroids und Hierarchical ).
Das Hauptproblem bei der Verwendung von Clustering für Ihre Daten besteht darin, ein gutes Ähnlichkeitsmaß zwischen den Seiten zu definieren. Einfach ist es, die Entfernung nach Manhattan zu nutzen. Etwas komplexer ist es, die Anzahl der gängigen Betrachter zu zählen und sie mit dem Mittelwert der Anzahl der Betrachter der ersten und zweiten Seite zu normalisieren - dies sollte die Popularitätseffekte zum Schweigen bringen.

(Seitenzahl)×(Seitenzahl)

Jan-Glx
quelle
Ich habe Ihre Antwort positiv bewertet. Könnten Sie jedoch bitte die neuen Links für den Bericht im letzten Satz bereitstellen. Der Alte ist tot.
Discipulus
1
Ich fürchte, es ist für immer verloren ... Im Allgemeinen ging es um die Implementierung von Clustering-Methoden, die nicht explizit jede Ähnlichkeitsmatrix erstellen, sondern Objekte nach Bedarf untersuchen.
1

Die Dimensionsreduzierung wendet im Wesentlichen einen Clustering-Algorithmus auf die Attribute (Spalten) an. Aufgrund der relativ großen Dimensionalität Ihres Datensatzes können Sie versuchen, mithilfe von SOM (selbstorganisierende Karte / Kohonennetz) eine Karte für Einzelpersonen oder Seiten zu erstellen. Sie können dann sehen, ob es sich um sinnvolle (interpretierbare) Muster handelt.


quelle
1

Wenn Sie PCA durchführen, würde ich raten, kurz andere Komponenten als nur die ersten beiden zu überprüfen. Sobald Sie das prcompObjekt haben pc(siehe Beitrag von suncoolsu), können plot(pc)Sie den Betrag der Varianz anzeigen, der den verschiedenen Hauptkomponenten zugeordnet ist. Sie können auch mehrere ( in der Regel drei oder vier) von ihnen leicht visualisieren mit pairs(pc$x[,1:3])oder verwenden lattice, splom(pc$x[,1:3]).

Laurent
quelle