2017-01-03 13 views
0

Я хочу сгруппировать свои входные данные с помощью DBSCAN и spark_sklearn. Я хотел бы получить метки каждого экземпляра ввода после кластеризации. Является ли это возможным?Кластеризация данных с использованием DBSCAN и spark_sklearn

Чтение документации на http://pythonhosted.org/spark-sklearn, я попытался следующие:

temp_data = Spark DataFrame containing 'key' and 'features' columns, 
      where 'features' is a Vector. 

ke = KeyedEstimator(sklearnEstimator=DBSCAN(), estimatorType="clusterer") 
print ke.getOrDefault("estimatorType") --> "clusterer" 

ke.fit_pedict(temp_data) --> ERROR: 'KeyedEstimator' object has no attribute 'fit_predict' 

k_model = ke.fit(temp_data) 
print k_model.getOrDefault("estimatorType") --> "clusterer" 

k_model.fit_pedict(temp_data) --> ERROR: 'KeyedModel' object has no attribute 'fit_predict' 

k_model.predict(temp_data) --> ERROR: 'KeyedModel' object has no attribute 'predict' 

k_model.transform(temp_data) --> ERROR: estimatorType assumed to be a clusterer, but sklearnEstimator is missing fit_predict() 
(NOTE: sklearn.cluster.DBSCAN actually have fit_predict() method) 

что я обычно делаю с помощью sklearn (без искры), чтобы соответствовать (dbscan_model.fit(temp_data-features)) и получить этикетки от модели (labels = dbscan_model.labels_). Это также прекрасно, если я могу получить атрибут 'labels_', используя spark-sklearn.

Если вышеупомянутые вызовы ('transform' или 'pred') не работают, возможно ли получить «метки_» после установки данных с использованием spark-sklearn? Как я могу это сделать? Предполагая, что мы получили «метки_», как я могу сопоставить входные экземпляры с метками_? У них одинаковый порядок?

+0

Избегайте использование программного обеспечения, которое обтекает программное обеспечение, которое обволакивает программное обеспечение ... stackinglayer на слой убивает производительность (и pyspark уже имеет репутацию медленно), и вы не получите все функциональные возможности больше. –

ответ

0

Это возможно в случае KMeans, в котором мы можем прогнозировать метки кластеров, поскольку эта функция позволяет получить оценку scikit-learn.

К сожалению, это не относится к некоторым другим кластерам, таким как DBSCAN.

+0

Для DBSCAN существует ли способ получить кластеры входных экземпляров? sckit-learn позволяет получить атрибут 'labels_'. – user2737636

0

Мне удалось получить атрибут 'labels_'; однако я до сих пор не знаю, совпадают ли порядковые результирующие метки с экземплярами ввода или нет.

temp_data = Spark DataFrame containing 'key' and 'features' columns, 
     where 'features' is a Vector. 

ke = KeyedEstimator(sklearnEstimator=DBSCAN()) 
k_model = ke.fit(temp_data) 

def getLabels(model): 
    return model.estimator.labels_ 

labels_udf = udf(lambda x: getLabels(x).tolist(), ArrayType(IntegerType()))("estimator").alias("labels") 
res_df = km_dbscan.keyedModels.select("key", labels_udf)