0

Ich bin neu bei der Verwendung von scikit-learn und versuche, Leute zu clustern, die ihr Interesse am Film haben. Ich erstelle eine dünn besetzte Matrix, die verschiedene Spalten (eine für jeden Film) und Zeilen enthält. Für eine bestimmte Zelle ist es 0 oder 1, wenn der Benutzer den Film mochte oder nicht.Eingabematrix und Parameter für den DBSCAN-Algorithmus von scikit-learn

Ich halte dies für ein Array von Vektoren und aus dem Dokument ist dies eine akzeptable Eingabe.

Führen Sie DBSCAN-Clustering aus der Vektormatrix oder Abstandsmatrix durch.

Link to the citation

Also versuche ich, etwas, was zu tun verwenden Scikit-Learn:

sparse_matrix = pickle.load(open("data/sparse_matrix")) 
X = StandardScaler().fit_transform(sparse_matrix) 
db = DBSCAN(eps=1, min_samples=20).fit(X) 
core_samples_mask = np.zeros_like(db.labels_, dtype=bool) 
core_samples_mask[db.core_sample_indices_] = True 
labels = db.labels_ 
print labels 

Ich tat dies am Beispiel DBSCAN verwenden Scikit-Learn. Ich habe zwei Fragen, die erste lautet: "Ist meine Matrix gut formatiert und für diesen Algorithmus geeignet?" Ich habe diese Sorge, wenn ich die Anzahl der Dimensionen betrachte. Die zweite Frage lautet: "Wie stelle ich den Epsilon-Parameter ein (minimaler Abstand zwischen meinem Punkt)?"

Antwort

1

Im DBSCAN-Artikel finden Sie einen Vorschlag zur Auswahl von Epsilon basierend auf dem k-Abstandsgraphen.

Da Ihre Daten spärlich sind, ist es wahrscheinlich geeigneter, z. Kosinusabstand statt Euklidischer Abstand. Sie sollten auch ein Sparse Format verwenden. Soviel ich weiß, wird numpy.zeros eine dichte Matrix zu erstellen:

sparse_matrix = numpy.zeros(...) 

deshalb irreführend, weil es sich um eine dichte Matrix ist, nur mit meist 0s.

+0

Vielen Dank für Ihre Antwort. Aber wenn ich meinen Algorithmus so laufe wie er ist. Bekomme ich ein Ergebnis, das ein wenig kohärent ist, oder die Tatsache, dass ich keine spärliche Matrix und nicht die Kosinus-Distanz verwende, wird mein Ergebnis völlig nutzlos? – mel

+1

Vielleicht funktioniert es, vielleicht nicht. 'StandardScaler' ist auch für kontinuierliche dichte Daten gedacht. Es wird nicht abstürzen. Aber Sie erhalten wahrscheinlich bessere Ergebnisse mit einem Cosinus-basierten Ansatz. Und du kennst Epsilon noch nicht, also musst du etwas mehr tun ... –

Verwandte Themen