【发布时间】:2017-05-17 08:22:16
【问题描述】:
我想使用 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(没有 spark)做的是拟合(dbscan_model.fit(temp_data-features))并从模型中获取标签(labels = dbscan_model.labels_)。如果我可以使用 spark-sklearn 获取 'labels_' 属性也很好。
如果上述调用('transform' 或 'predict')不起作用,是否可以在使用 spark-sklearn 拟合数据后获取 'labels_'?我怎样才能做到这一点?假设我们获得了'labels_',我如何将输入实例映射到labels_?他们有相同的顺序吗?
【问题讨论】:
-
避免使用包裹包裹软件的软件......将层堆叠到层会降低性能(并且 pyspark 已经以缓慢而闻名),并且您不再获得所有功能。
标签: apache-spark scikit-learn pyspark cluster-analysis dbscan