Выведите правильное значение k в кластеризации k-средних (включая k = 1) в pyspark

#machine-learning #pyspark #k-means #latitude-longitude

Вопрос:

Я хочу проверить, будет ли полезна кластеризация по моим координатам или нет.

Я имею дело с траекториями и хочу проверить, все ли они начинаются в одной и той же области (траектории разные). Таким образом, цель здесь состоит в том, чтобы охарактеризовать наиболее частые пункты отправления.

Однако иногда в кластеризации нет необходимости. Я использую здесь К-средства. Я думал об использовании оценки силуэта, но я не вижу, является ли она математически правильной для случая, когда существует только один кластер. DBScan не будет хорошей кластеризацией, так как плотность не похожа на кластеры, которые я хотел создать.

У вас есть идея создать своего рода проверку между k=1 и k=3, которая была бы лучшим разделением для моих данных? Я имею дело здесь с данными с координатами (широта/долгота), где начальная точка не фиксирована на 100%, но может изменяться в пределах 2 км вокруг своего рода барицентра.

Простой экстракт с k=2 :

 from pyspark.ml.feature import VectorAssembler
vecAssembler = VectorAssembler(inputCols=["lat", "lon"], outputCol="features")
df1= vecAssembler.transform(df)

from pyspark.ml.clustering import KMeans
from pyspark.ml.evaluation import ClusteringEvaluator

# Loads data.
# Trains a k-means model.
kmeans = KMeans().setK(2).setSeed(1)
model = kmeans.fit(df1.select('features'))
# Make predictions
transformed = model.transform(df1)

evaluator = ClusteringEvaluator(predictionCol='prediction', featuresCol='features', 
                                metricName='silhouette', distanceMeasure='squaredEuclidean')
evaluator.evaluate(transformed)
 

Есть ли способ вычислить в PySpark случай с k=1 ? для того, чтобы получить статистику локтя или разрыва ?