2017-08-13 7 views
-1

Ich versuche, dieses Beispiel mit einigen Daten meiner eigenen zu folgen: http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-pyDBSCAN Bewertung - Notwendigkeit true_labels

Ich habe Probleme, herauszufinden, wie meine ‚labels_true‘ Variable als Teil der Auswertung der DBSCAN Prognosen zu erhalten .

Hier ist die Linie, die sie zuerst erfordert:

print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels_true, labels)) 

Ich habe Daten mit Breite & Länge Spalten, die ich verwende, wie folgt:

coords = X_train.as_matrix(columns=['latitude', 'longitude']) 

kms_per_radian = 6371.0088 
epsilon = 1.5/kms_per_radian 
db = DBSCAN(eps=epsilon, min_samples=1, algorithm='ball_tree', metric='haversine').fit(np.radians(coords)) 
cluster_labels = db.labels_ 
num_clusters = len(set(cluster_labels)) 
clusters = pd.Series([coords[cluster_labels == n] for n in range(num_clusters)]) 
print num_clusters 
#get returned 60 

und

print("Homogeneity: %0.3f" % metrics.homogeneity_score(coords, cluster_labels)) 

ist die Linie, die für mich nicht funktioniert.

X_train.head():

bathrooms bedrooms building_id  description  features interest_level latitude longitude manager_id price 
10 1.5  3.0  53a5b119ba8f7b61d4e010512e0dfc85 A Brand New 3 Bedroom 1.5 bath ApartmentEnjoy ... [] medium 40.7145  -73.9425 5ba989232d0489da1b5f2c45f6688adc 3000.0 
10000 1.0  2.0  c5c8a357cba207596b04d1afd1e4f130  [Doorman, Elevator, Fitness Center, Cats Allow... low  40.7947  -73.9667 7533621a882f71e25173b27e3139d83d 5465.0 
100004 1.0  1.0  c3ba40552e2120b0acfc3cb5730bb2aa Top Top West Village location, beautiful Pre-w... [Laundry In Building, Dishwasher, Hardwood Flo... high 40.7388  -74.0018 d9039c43983f6e564b1482b273bd7b01 2850.0 
100007 1.0  1.0  28d9ad350afeaab8027513a3e52ac8d5 Building Amenities - Garage - Garden - fitness... [Hardwood Floors, No Fee] low  40.7539  -73.9677 1067e078446a7897d2da493d2f741316 3275.0 
100013 1.0  4.0  0 Beautifully renovated 3 bedroom flex 4 bedroom... [Pre-War] low  40.8241  -73.9493 98e13ad4b495b9613cef886d79a6291f 3350.0 

Wie ich verstehe, db.labels_ ist die vorhergesagten Cluster #, dass jeder Punkt zu gehört. Ich möchte ein neues Coords-Array mit den vorhergesagten 60 Cluster-Labels und ein anderes für die Metriken mit den echten 60 Cluster-Labels anstelle des alten Längen-/Breitengrads für jeden Punkt zurückgeben.

+0

Sehen Sie [diese Seite] (http://scikit-learn.org/stable/modules/clustering.html#clustering-performance-evaluation) und suchen Sie nach Metriken, die keine Daten zur Grundwahrheit benötigen. –

Antwort

0

db.labels_ sind die vorhergesagten Beschriftungen, aber die Funktion 'homogenity_score' erfordert, dass Sie die Ground Truth-Beschriftungen vor dem Clustering mit den vorhergesagten Clustern vergleichen.

Sie missbrauchen die Funktion, indem Sie den vollständigen Trainingssatz als Eingabe 'labels_true' in die Bewertungsfunktion verwenden. Wenn Sie Trainingsdaten beschriftet haben, fügen Sie nur die Ground-Truth-Labels als Eingabe 'labels_true' ein. Wenn Sie für Ihre Trainingsdaten nicht das Ground-Truth-Label haben, können Sie die Funktion "Homogenity_score" nicht verwenden.

0

In Realität Sie haben keine true_labels beim Clustering.

Sie können also keine Homogenität usw. verwenden.

Dies funktioniert nur für "Demo" -Datensätze. Wenn Sie hätten Etiketten, würden Sie Klassifizierung statt Clustering verwenden.