DBSCAN评估 - 需要true_labels

时间:2017-08-13 22:18:19

标签: python scikit-learn dbscan

我正在尝试使用我自己的一些数据来跟踪此示例:http://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-py

我无法弄清楚如何将'labels_true'变量作为评估DBSCAN预测的一部分。

以下是首先需要它的行:

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

我有纬度和数据的数据经度列,我使用如下:

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

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

是对我不起作用的行。

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

据我所知,db.labels_是每个点都属于的预测簇#。我想返回一个带有预测的60个簇标签的新coords数组,另一个带有真正60个簇标签的度量标准,代替每个点的旧纬度/经度。

2 个答案:

答案 0 :(得分:0)

db.labels_是预测标签,但'homogeneity_score'功能要求您在聚类之前将地面实况标签与预测的聚类进行比较。

您使用完整训练集作为分数函数中的'labels_true'输入,误用了该功能。如果您已标记了训练数据,则仅将地面实况标签包含为“labels_true”输入。如果您没有训练数据的基本事实标签,那么您就不能使用'homogeneity_score'功能。

答案 1 :(得分:0)

reality 中,您在进行群集时没有true_labels

所以你不能使用同质性等。

这仅适用于"演示"数据集。如果您拥有标签,则可以使用分类而不是群集。