Phân cụm tọa độ vị trí địa lý (lat, cặp dài)


51

Cách tiếp cận đúng và thuật toán phân cụm cho phân cụm định vị địa lý là gì?

Tôi đang sử dụng đoạn mã sau để phân phối vị trí địa lý cụm:

import numpy as np
import matplotlib.pyplot as plt
from scipy.cluster.vq import kmeans2, whiten

coordinates= np.array([
           [lat, long],
           [lat, long],
            ...
           [lat, long]
           ])
x, y = kmeans2(whiten(coordinates), 3, iter = 20)  
plt.scatter(coordinates[:,0], coordinates[:,1], c=y);
plt.show()

Có đúng không khi sử dụng phương tiện K để phân cụm định vị địa lý, vì nó sử dụng khoảng cách Euclide chứ không phải công thức Haversine như một hàm khoảng cách?


Yoou cũng có thể xem câu hỏi tương tự này: datascience.stackexchange.com/questions/10063/ mẹo
VividD

Tôi nghĩ tính khả thi của phương tiện k sẽ phụ thuộc vào dữ liệu của bạn ở đâu. Nếu dữ liệu của bạn được lan truyền trên toàn thế giới, nó sẽ không hoạt động, vì khoảng cách không phải là euclid, như những người dùng khác đã nói. Nhưng nếu dữ liệu của bạn là cục bộ hơn, phương tiện k sẽ đủ tốt, vì hình học là euclid cục bộ.
Juan Ignacio Gil

Câu trả lời:


7

K-có nghĩa là phải đúng trong trường hợp này. Vì k-mean cố gắng nhóm chỉ dựa trên khoảng cách euclide giữa các đối tượng, bạn sẽ nhận lại các cụm vị trí gần nhau.

Để tìm số cụm tối ưu, bạn có thể thử tạo một biểu đồ 'khuỷu tay' trong tổng số khoảng cách vuông. Điều này có thể hữu ích ( http://nbviewer.ipython.org/github/nborwankar/LearnDataScience/blob/master/notebooks/D3.%20K-Means%20Clustering%20Analysis.ipynb )


3
Làm thế nào các điểm gần nhau trên điểm bao quanh được xử lý?
casperOne

1
Bạn cần tìm một thuật toán lấy ma trận khoảng cách được tính toán trước hoặc cho phép bạn cung cấp một hàm khoảng cách mà nó có thể gọi khi cần tính toán khoảng cách. Nếu không nó sẽ không hoạt động.
Spainedman

Âm mưu khuỷu tay có thể không giúp bạn chút nào vì có thể không có khuỷu tay. Ngoài ra, hãy đảm bảo thử một số lần chạy phương tiện k với cùng số cụm vì bạn có thể nhận được các kết quả khác nhau.
Châu chấu

Đây là một ý tưởng kém vì tất cả các điểm sẽ được nhóm lại, điều này hiếm khi là một ý tưởng tốt trong ánh xạ.
Richard

52

K-mean không phải là thuật toán thích hợp nhất ở đây.

Lý do là phương tiện k được thiết kế để giảm thiểu phương sai . Tất nhiên, điều này xuất hiện từ quan điểm thống kê và tín hiệu, nhưng dữ liệu của bạn không phải là "tuyến tính".

Vì dữ liệu của bạn ở định dạng vĩ độ, kinh độ, bạn nên sử dụng thuật toán có thể xử lý các hàm khoảng cách tùy ý , đặc biệt là các hàm khoảng cách trắc địa. Phân cụm theo phân cấp, PAM, CLARA và DBSCAN là những ví dụ phổ biến về điều này.

https://www.youtube.com/watch?v=QsGOoWdqaT8 khuyên bạn nên phân cụm OPTICS.

Các vấn đề của phương tiện k rất dễ thấy khi bạn xem xét các điểm gần với mức bao quanh + -180 độ. Ngay cả khi bạn đã hack k-mean để sử dụng khoảng cách Haversine, trong bước cập nhật khi nó tính toán lại có nghĩa là kết quả sẽ bị sai lệch nghiêm trọng. Trường hợp xấu nhất là, k-nghĩa sẽ không bao giờ hội tụ!


Bạn có thể đề xuất một phương pháp phân cụm thích hợp hơn cho dữ liệu vị trí địa lý không?
Alex Spurling

Bạn có để ý đoạn thứ ba không?
Anony-Mousse

7

Tọa độ GPS có thể được chuyển đổi trực tiếp thành geohash . Geohash chia Trái đất thành các "xô" có kích thước khác nhau dựa trên số chữ số (mã Geohash ngắn tạo ra các khu vực lớn và mã dài hơn cho các khu vực nhỏ hơn). Geohash là một phương pháp phân cụm chính xác có thể điều chỉnh.


Điều này dường như gặp phải vấn đề xoay quanh 180 độ tương tự mà K-Means thực hiện trên bài viết Wikipedia được liên kết trong câu trả lời.
Norman H

Vâng! Thêm mã tốt hơn nhiều plus.codes
Brian Spiering

Một lợi ích cho giải pháp này là miễn là bạn tính toán geohash một lần, các hoạt động so sánh lặp lại sẽ diễn ra nhanh hơn nhiều.
Norman H

Geohash sẽ có vấn đề với các trường hợp cạnh xô - hai điểm rất gần sẽ được đặt trong các nhóm khác nhau dựa trên các cạnh tùy ý của mỗi nhóm.
Dan G

5

Tôi có lẽ rất muộn với câu trả lời của mình, nhưng nếu bạn vẫn đang xử lý phân cụm địa lý, bạn có thể thấy nghiên cứu này thú vị. Nó liên quan đến việc so sánh hai cách tiếp cận khá khác nhau để phân loại dữ liệu địa lý: K-nghĩa là phân cụm và mô hình tăng trưởng lớp tiềm ẩn.

Một trong những hình ảnh từ nghiên cứu:

nhập mô tả hình ảnh ở đây

Các tác giả kết luận rằng kết quả cuối cùng là tương tự nhau, và có một số khía cạnh trong đó LCGM đã vượt quá K-nghĩa.


5

Bạn có thể sử dụng HDBSCAN cho việc này. Gói python có hỗ trợ khoảng cách haversine sẽ tính toán chính xác khoảng cách giữa các điểm lat / lon.

Như các tài liệu đã đề cập , trước tiên bạn sẽ cần chuyển đổi điểm của mình thành radian để điều này hoạt động. Các psuedocode sau đây nên thực hiện thủ thuật:

points = np.array([[lat1, lon1], [lat2, lon2], ...])
rads = np.radians(points)
clusterer = hdbscan.HDBSCAN(min_cluster_size=N, metric='haversine')
cluster_labels = clusterer.fit_predict(points)

0

Thuật toán k-mean để phân cụm các vị trí là một ý tưởng tồi. Vị trí của bạn có thể được trải rộng trên toàn thế giới và số lượng cụm không thể dự đoán được bởi bạn, không chỉ vậy nếu bạn đặt cụm là 1 thì các vị trí sẽ được nhóm thành 1 cụm. Tôi đang sử dụng phân cụm phân cấp cho cùng.



-1

Đi với Kmeans phân cụm vì HBScan sẽ mất mãi mãi. Tôi đã thử nó cho một trong các dự án và kết thúc nhưng sử dụng Kmeans với kết quả mong muốn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.