#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
? для того, чтобы получить статистику локтя или разрыва ?