Tôi đã thực hiện một số nghiên cứu. Tôi đã lấy một số điểm trong hai hệ tọa độ phi số liệu (WGS84) và số liệu (Ba Lan 1992).
Tôi đã sử dụng mã này:
from scipy import loadtxt
from sklearn.cluster import Birch
import matplotlib.pyplot as plt
data84 = loadtxt("/home/damian/workspace/84.csv", delimiter=",")
data90 = loadtxt("/home/damian/workspace/90.csv", delimiter=",")
brc = Birch(threshold=0.5)
Sau đó, tôi phù hợp với mô hình của chúng tôi với dữ liệu số liệu:
brc.fit(data90)
Và vẽ kết quả, trong đó các đường chéo là điểm và vòng tròn của tôi là các phân nhóm của tôi:
c = brc.subcluster_centers_
plt.plot(data90[:,0], data90[:,1], '+')
plt.plot(c[:,0], c[:,1], 'o')
plt.show()
Đây là những gì tôi nhận được:
Bạn có thể thấy, giá trị ngưỡng đó quá nhỏ, bởi vì nó tìm thấy phần tử con trong mỗi điểm.
Định nghĩa ngưỡng:
Bán kính của phần tử con thu được bằng cách hợp nhất một mẫu mới và phần tử con gần nhất phải nhỏ hơn ngưỡng. Nếu không, một subcluster mới được bắt đầu.
Vì vậy, trong trường hợp này chúng ta cần tăng giá trị này.
Dành cho:
brc = Birch(threshold=5000)
nó đã tốt hơn nhiều
Và điểm WGS84 cho ngưỡng 0,5:
brc = Birch(threshold=0.5)
brc.fit(data84)
Chỉ có một subcluster, không tốt. Nhưng trong trường hợp này, chúng ta nên giảm giá trị ngưỡng, vì vậy 0,05:
brc = Birch(threshold=0.05)
brc.fit(data84)
Chúng tôi đã có kết quả tốt đẹp.
Phần kết luận:
Vấn đề CRS. Bạn cần tìm một giá trị ngưỡng thích hợp, tùy thuộc vào hệ thống tọa độ dữ liệu của bạn và khoảng cách giữa các điểm. Nếu bạn có CRS không số liệu, ngưỡng sẽ tương đối nhỏ hơn so với hệ thống số liệu. Bạn phải biết sự khác biệt giữa mét và độ, nếu khoảng cách giữa hai điểm bằng 10000m, nó sẽ nhỏ hơn 1 độ trong WGS84. Kiểm tra google để giá trị chính xác hơn.
Ngoài ra có nhiều điểm hơn giá trị n_cl cluster. Không sao, không có các cụm sao, mà là các cụm. Nếu bạn cố gắng dự đoán một cái gì đó hoặc in nhãn, nó sẽ phân loại điểm của bạn đến một trong các khu vực n_cl cluster (hoặc các điểm in được phân loại thành 0,1,2, ..., nhãn n_cl cluster).
Nếu bạn không muốn thử các tham số khác nhau, bạn luôn có thể sử dụng thuật toán khác. Thuật toán rất đơn giản và phổ biến để phân cụm là thuật toán K-mean.
http://scikit-learn.org/urdy/modules/generated/sklearn.cluster.KMeans.html
Nó sẽ tìm n cụm cho dữ liệu của bạn mà không cần quan tâm đến ngưỡng, v.v.