Как настроить этот алгоритм DBSCAN на Python ⇐ Python
Как настроить этот алгоритм DBSCAN на Python
Я использую этот алгоритм кластеризации для кластеризации точек широты и долготы. Я использую заранее написанный код, который приведен по адресу http://scikit-learn.org/stable/auto_exa ... bscan.html.
Код выглядит следующим образом и использует мой файл с более чем 4000 точками широты и долготы. Однако я хочу настроить этот код так, чтобы он определял кластер только как точки в пределах, скажем, 0,000020 друг от друга, поскольку я хочу, чтобы мои кластеры находились почти на уровне улицы.
На данный момент я получаю 11 кластеров, тогда как теоретически мне нужно как минимум 100 кластеров. Я пробовал корректировать и изменять разные цифры, но безрезультатно.
print(__doc__) импортировать numpy как np из sklearn.cluster импортировать DBSCAN из показателей импорта sklearn из sklearn.datasets.samples_generator импортируйте make_blobs из sklearn.preprocessing импорт StandardScaler ######################################################################################### ########################### # Генерируем образец данных input = np.genfromtxt(open("dataset_import_noaddress.csv","rb"),delimiter=",",skip_header=1) координаты = np.delete(input, [0,1], 1) X, labels_true = make_blobs(n_samples=4000, center=coordinates, groups_std=0.0000005, случайное_состояние=0) X = StandardScaler().fit_transform(X) ######################################################################################### ########################### # Вычисление DBSCAN db = DBSCAN(eps=0,3, min_samples=10).fit(X) core_samples_mask = np.zeros_like(db.labels_, dtype=bool) core_samples_mask[db.core_sample_indices_] = Истина метки = db.labels_ # Количество кластеров в метках, игнорируя шум, если он присутствует. n_clusters_ = len(set(labels)) - (1, если -1 в метках, иначе 0) print('Оценочное количество кластеров: %d' % n_clusters_) print("Гомогенность: %0.3f" % metrics.homogeneity_score(labels_true, labels)) print("Полнота: %0.3f" % metrics.completeness_score(labels_true, labels)) print("V-мера: %0.3f" % metrics.v_measure_score(labels_true, labels)) print("Скорректированный индекс Ранда: %0.3f" % metrics.adjusted_rand_score(labels_true, labels)) print("Скорректированная взаимная информация: %0.3f" % metrics.adjusted_mutual_info_score(labels_true, labels)) print("Коэффициент силуэта: %0.3f" % metrics.silhouette_score(X, метки)) ######################################################################################### ########################### # Результат графика импортировать matplotlib.pyplot как plt # Черный цвет удален и вместо него используется для шума. unique_labels = set(метки) цвета = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels))) для k, col в zip (уникальные_метки, цвета): если к == -1: # Черный используется для шума. столбец = 'к' class_member_mask = (метки == k) xy = X[маска_члена_класса и маска_core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], 'o',markerfacecolor=col, маркереджколор = 'к', маркер размер = 14) xy = X[class_member_mask & ~core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], 'o',markerfacecolor=col, маркереджколор = 'к', маркер размер = 6) plt.title('Оценочное количество кластеров: %d' % n_clusters_) plt.show()
Я использую этот алгоритм кластеризации для кластеризации точек широты и долготы. Я использую заранее написанный код, который приведен по адресу http://scikit-learn.org/stable/auto_exa ... bscan.html.
Код выглядит следующим образом и использует мой файл с более чем 4000 точками широты и долготы. Однако я хочу настроить этот код так, чтобы он определял кластер только как точки в пределах, скажем, 0,000020 друг от друга, поскольку я хочу, чтобы мои кластеры находились почти на уровне улицы.
На данный момент я получаю 11 кластеров, тогда как теоретически мне нужно как минимум 100 кластеров. Я пробовал корректировать и изменять разные цифры, но безрезультатно.
print(__doc__) импортировать numpy как np из sklearn.cluster импортировать DBSCAN из показателей импорта sklearn из sklearn.datasets.samples_generator импортируйте make_blobs из sklearn.preprocessing импорт StandardScaler ######################################################################################### ########################### # Генерируем образец данных input = np.genfromtxt(open("dataset_import_noaddress.csv","rb"),delimiter=",",skip_header=1) координаты = np.delete(input, [0,1], 1) X, labels_true = make_blobs(n_samples=4000, center=coordinates, groups_std=0.0000005, случайное_состояние=0) X = StandardScaler().fit_transform(X) ######################################################################################### ########################### # Вычисление DBSCAN db = DBSCAN(eps=0,3, min_samples=10).fit(X) core_samples_mask = np.zeros_like(db.labels_, dtype=bool) core_samples_mask[db.core_sample_indices_] = Истина метки = db.labels_ # Количество кластеров в метках, игнорируя шум, если он присутствует. n_clusters_ = len(set(labels)) - (1, если -1 в метках, иначе 0) print('Оценочное количество кластеров: %d' % n_clusters_) print("Гомогенность: %0.3f" % metrics.homogeneity_score(labels_true, labels)) print("Полнота: %0.3f" % metrics.completeness_score(labels_true, labels)) print("V-мера: %0.3f" % metrics.v_measure_score(labels_true, labels)) print("Скорректированный индекс Ранда: %0.3f" % metrics.adjusted_rand_score(labels_true, labels)) print("Скорректированная взаимная информация: %0.3f" % metrics.adjusted_mutual_info_score(labels_true, labels)) print("Коэффициент силуэта: %0.3f" % metrics.silhouette_score(X, метки)) ######################################################################################### ########################### # Результат графика импортировать matplotlib.pyplot как plt # Черный цвет удален и вместо него используется для шума. unique_labels = set(метки) цвета = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels))) для k, col в zip (уникальные_метки, цвета): если к == -1: # Черный используется для шума. столбец = 'к' class_member_mask = (метки == k) xy = X[маска_члена_класса и маска_core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], 'o',markerfacecolor=col, маркереджколор = 'к', маркер размер = 14) xy = X[class_member_mask & ~core_samples_mask] plt.plot(xy[:, 0], xy[:, 1], 'o',markerfacecolor=col, маркереджколор = 'к', маркер размер = 6) plt.title('Оценочное количество кластеров: %d' % n_clusters_) plt.show()
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Аналогичный проект обнаружения объектов с участием DBSCAN не работает, как предполагалось
Anonymous » » в форуме Python - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-