2016-11-24 6 views

Antwort

4

Der Deep-Learning-Autoencoder ist immer unüberwacht zu lernen. Der "überwachte" Teil des Artikels, auf den Sie verlinken, ist zu bewerten, wie gut es funktioniert.

Das folgende Beispiel (aus Kapitel 7 meines Buches, Practical Machine Learning mit H2O, wo ich alle H2O unbeaufsichtigten Algorithmen auf dem gleichen Datensatz versuchen - bitte entschuldigen Sie den Stecker) nimmt 563 Funktionen und versucht zu verschlüsseln sie in nur zwei versteckte Knoten.

m <- h2o.deeplearning(
    2:564, training_frame = tfidf, 
    hidden = c(2), auto-encoder = T, activation = "Tanh" 
) 
f <- h2o.deepfeatures(m, tfidf, layer = 1) 

Der zweite Befehl extrahiert die versteckten Knotengewichtungen. f ist ein Datenrahmen mit zwei numerischen Spalten und einer Zeile für jede Zeile in den Quelldaten tfidf. Ich wählte nur zwei versteckte Knoten, so dass ich die Cluster zeichnen könnte:

simplest autoencoder output

Ergebnisse bei jedem Durchlauf ändern. Sie können (vielleicht) bessere Ergebnisse mit gestapelten Auto-Encodern erzielen oder mehr versteckte Knoten verwenden (aber dann können Sie sie nicht plotten). Hier fühlte ich, dass die Ergebnisse durch die Daten begrenzt waren.

BTW, habe ich das oben Grundstück mit diesem Code:

d <- as.matrix(f[1:30,]) #Just first 30, to avoid over-cluttering 
labels <- as.vector(tfidf[1:30, 1]) 
plot(d, pch = 17) #Triangle 
text(d, labels, pos = 3) #pos=3 means above 

(P. S. Die Originaldaten kamen aus Brandon Rose's excellent article on using NLTK.)

+0

Danke, Darren, für diese Erklärung dies. Wenn ich mehr als zwei versteckte Ebenen verwende, wie kann ich die Ergebnisse grafisch darstellen? Vielen Dank – forever

+0

@forever Sie könnten 'hidden = c (32,2,32)' verwenden, was 32 Neuronen bedeutet, dann 2, dann wieder zurück zu 32. Sie extrahieren dann die mittlere Ebene mit 'f <- h2o.defeatures (m, tfidf, layer = 2) ' –

+0

Wie kann ich wissen, ob ich die richtigen Parameter verwende ?. Wie kann ich den Fehler gegen Epochen grafisch darstellen? – forever

0

In einigen Aspekten kodieren Daten und Clustering-Daten teilen einige überlappende Theorie. Daher können Sie mit Autoencoder Daten clustern (kodieren).

Ein einfaches Beispiel zur Visualisierung ist, wenn Sie eine Reihe von Trainingsdaten haben, von denen Sie annehmen, dass sie zwei primäre Klassen haben. Wie Wählerhistorie Daten für Republikaner und Demokraten. Wenn Sie einen Autoencoder nehmen und ihn in zwei Dimensionen codieren und dann auf einem Streudiagramm plotten, wird dieses Clustering klarer. Unten ist ein Beispielergebnis von einem meiner Modelle. Sie sehen eine merkliche Trennung zwischen den beiden Klassen sowie ein wenig erwartete Überlappung. Clustered Voter Data

Der Code kann here

Diese Methode erfordert nicht nur zwei binäre Klassen gefunden werden, können Sie auch so viele verschiedene Klassen auf trainieren, wie Sie es wünschen. Zwei polarisierte Klassen sind einfach zu visualisieren.

Diese Methode ist nicht auf zwei Ausgabedimensionen beschränkt. In der Tat, Sie können es schwierig finden, bestimmte, große Dimensionsräume auf solch einen kleinen Raum sinnvoll abzubilden.

In Fällen, in denen die codierte (geclusterte) Ebene eine größere Dimension aufweist, ist es nicht so einfach, Feature-Cluster zu "visualisieren". Dies ist, wo es ein bisschen schwieriger wird, wie Sie eine Form des überwachten Lernens verwenden müssen, um die codierten (geclusterten) Features zu Ihren Trainingsetiketten zuzuordnen.

Ein paar Wege, um zu bestimmen, zu welchen Klassenmerkmalen gehören, ist, die Daten in knn-Clustering-Algorithmus zu pumpen. Oder ich ziehe es vor, die kodierten Vektoren zu nehmen und sie an ein neuronales Standard-Netzwerk mit Rückfehlerausbreitung weiterzuleiten.Beachten Sie, dass abhängig von Ihren Daten, können Sie feststellen, dass nur die Daten direkt in Ihr Back-Propagation Neuronal Netzwerk pumpen ist ausreichend.

Verwandte Themen