Я использую алгоритм Берча из пакета Python scipy-learn для кластеризации набора точек в одном маленьком городе по 10.
Я использую следующий код:
no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)
По моей идее, я бы всегда заканчивал подходами по 10 очков. В моем случае у меня есть 650 точек на кластер, а n_clusters - 65.
Но моя проблема в том, что при слишком низком пороговом значении я получаю 1 адрес кластера, просто чуть больший порог - 40 адресов на кластер.
Что я здесь не так делаю?
python
clustering
scipy.spatial
Kaboom
источник
источник
Ответы:
Я сделал некоторые исследования. Я взял некоторые точки в двух системах координат: неметрических (WGS84) и метрических (Польша, 1992).
Я использовал этот код:
Затем я подгоняю нашу модель с метрическими данными:
И нарисуйте результаты, где крестики были моими точками, а круги были моими подкластерами:
Вот что я получил:
Вы можете видеть, что это пороговое значение было слишком маленьким, потому что оно находило подкластер в каждой точке.
Определение порога:
Так что в этом случае нам нужно увеличить это значение.
За:
это было намного лучше
И WGS84 указывает на порог 0,5:
Только один подкласс, не хорошо. Но в этом случае мы должны уменьшить пороговое значение, поэтому на 0,05:
У нас хорошие результаты.
Вывод:
CRS имеет значение. Вам необходимо найти правильное пороговое значение, которое зависит от ваших систем координат данных и расстояния между точками. Если у вас нет метрической CRS, порог должен быть относительно меньше, чем с метрической системой. Вы должны знать разницу между метрами и градусами, если расстояние между двумя точками равно 10000 м, оно будет меньше 1 градуса в WGS84. Проверьте Google для более точных значений.
Также есть больше точек, чем значение n_clusters. Все в порядке, нет центроидов кластеров, но есть подкластеры. Если вы попытаетесь что-то предсказать или напечатать ярлыки, он классифицирует вашу точку в одной из областей n_clusters (или напечатает точки, классифицированные по меткам 0,1,2, ..., n_clusters).
Если вы не хотите использовать другие параметры, вы всегда можете выбрать другой алгоритм. Очень простым и распространенным алгоритмом кластеризации является алгоритм K-средних.
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Он должен найти n кластеров для ваших данных, не заботясь о порогах и т. Д.
источник