6

Tôi có 2000 bộ dữ liệu chứa ít hơn 1000 biến 2D mỗi. Tôi đang tìm cách để cụm các bộ dữ liệu vào bất cứ nơi nào từ 20-100 cụm dựa trên sự giống nhau. Tuy nhiên, tôi đang gặp khó khăn trong việc đưa ra một phương pháp đáng tin cậy để so sánh các bộ dữ liệu. Tôi đã thử một vài phương pháp tiếp cận (nguyên thủy) và thực hiện rất nhiều nghiên cứu, nhưng tôi dường như không thể tìm thấy bất cứ điều gì phù hợp với những gì tôi cần làm.So sánh bộ dữ liệu 2D/phân tán

Tôi đã đăng hình ảnh dưới 3 bộ dữ liệu của tôi được vẽ. Dữ liệu được giới hạn 0-1 trong trục y, và nằm trong khoảng ~ 0-0.10 trong trục x (trong thực tế, nhưng có thể lớn hơn 0,10 theo lý thuyết).

Hình dạng và tỷ lệ tương đối của dữ liệu có lẽ là những điều quan trọng nhất cần so sánh. Tuy nhiên, các vị trí tuyệt đối của mỗi tập dữ liệu cũng quan trọng. Nói cách khác, vị trí tương đối gần hơn của mỗi điểm riêng lẻ với các điểm riêng lẻ của một tập dữ liệu khác, chúng càng giống nhau và sau đó vị trí tuyệt đối của chúng sẽ cần được tính toán.

Xanh lá cây và đỏ nên được coi là rất khác nhau, nhưng đẩy đến xô, chúng phải giống với màu xanh và đỏ hơn.

http://img153.imageshack.us/img153/6730/screenshot20110204at004.png

tôi đã cố gắng:

  • so sánh dựa trên overages tổng thể và độ lệch
  • chia các biến thành phối hợp khu vực (ví dụ: (0-0,10, 0-0,10), (0.10 -0.20, 0.10-0.20) ... (0.9-1.0, 0.9-1.0)) và so sánh điểm tương đồng dựa trên các điểm được chia sẻ trong khu vực
  • Tôi đã thử đo khoảng cách euclide trung bình đến các láng giềng gần nhất giữa các bộ dữ liệu

Tất cả những điều này đã tạo ra kết quả bị lỗi. Câu trả lời gần nhất tôi có thể tìm thấy trong nghiên cứu của tôi là "Appropriate similarity metrics for multiple sets of 2D coordinates". Tuy nhiên, câu trả lời được đưa ra gợi ý so sánh khoảng cách trung bình giữa các nước láng giềng gần nhất với trọng tâm, mà tôi không nghĩ rằng sẽ làm việc cho tôi như một hướng, cũng quan trọng như khoảng cách cho mục đích của tôi. Tôi có thể thêm vào, điều này sẽ được sử dụng để tạo dữ liệu cho đầu vào của chương trình khác và sẽ chỉ được sử dụng một cách không thường xuyên (chủ yếu để tạo các tập dữ liệu khác nhau với số lượng cụm khác nhau), vì vậy thuật toán bán thời gian không ra câu hỏi.

+0

Đồng ý với Joe Blow - bạn có thể thử phù hợp tuyến tính với phương pháp hình vuông nhỏ nhất để có được 3 phương trình đường cho các chấm xanh, đỏ, đỏ và so sánh độ dốc và chặn cho ba phương trình này. –

+0

Ngoài ra, bạn có thể thử so sánh khoảng cách Hausdorff giữa các cụm. –

+0

Tất cả các tập dữ liệu có cùng số điểm không? Thứ tự của các điểm có ý nghĩa không (Điểm số 5 có ý nghĩa tương tự với tất cả các tập dữ liệu?) – tkerwin

Trả lời

1

Trong hai bước

1) Thứ nhất: Để nói ngoài blues.

Tính toán khoảng cách lân cận trung bình gần nhất, đến mức cắt. Chọn một cái gì đó cắt như khoảng cách màu đen trong hình dưới đây:

enter image description here

Các cấu hình màu xanh, như họ có nhiều rải rác sẽ cung cấp cho bạn kết quả lớn hơn nhiều so với màu đỏ và xanh.

2) Thứ hai: Để nói ngoài màu đỏ và xanh lá cây

Coi thường tất cả các điểm mà hàng xóm gần nhất khoảng cách là hơn một cái gì đó nhỏ hơn (ví dụ một phần tư của khoảng cách trước).Clusterize vì sự gần gũi như vậy để có được cụm có dạng:

enter image description hereenter image description here

Bỏ các cụm có ít hơn 10 điểm (hoặc lâu hơn). Đối với mỗi cụm chạy một tuyến tính phù hợp và tính hiệp phương sai. Các hiệp phương sai trung bình cho màu đỏ sẽ cao hơn nhiều so với màu xanh lá cây vì xanh là rất phù hợp trong quy mô này.

Hiện tại bạn đang ở đây.

HTH!

+0

Ít nhất, tôi tưởng tượng tính toán khoảng cách trung bình đến x hàng xóm gần nhất sẽ tốt hơn nhiều so với khoảng cách gần nhất trung bình của tôi với hàng xóm gần nhất. Tôi chưa có cơ hội để thử nghiệm với nó, nhưng tôi nghi ngờ nó sẽ làm cho một số liệu tốt kết hợp với một số người khác. Tôi không chắc chắn về phần thứ hai, nhưng tôi sẽ có một cái nhìn vào nó. Cảm ơn. – mcnulty

+0

@mcnulty Tôi đã làm những việc như thế này nhiều lần (như một nhà vật lí). Bạn phải thử nghiệm với các giá trị cắt. Nếu tất cả các màu đỏ, xanh lá cây và xanh dương của bạn cũng tương tự như những gì được đăng, bạn sẽ không tìm thấy nhiều rắc rối. Tất nhiên mong đợi rất nhiều thời gian cpu phía trước. –

1

Mặc dù Belisarius đã trả lời này tốt, dưới đây là một vài ý kiến:

nếu bạn có thể giảm mỗi bộ 1000 điểm để nói 32 cụm 32 điểm mỗi (hoặc 20 x 50 hoặc ...) , sau đó bạn có thể làm việc trong không gian 32 thay vì 1000 không gian. Hãy thử K-means clustering cho việc này; cũng xem SO questions/tagged/k-means.

Một cách để đo khoảng cách giữa các bộ A, B (điểm, cụm) là để lấy cặp gần như thế này:

def nearestpairsdistance(A, B): 
    """ large point sets A, B -> nearest b each a, nearest a each b """ 
     # using KDTree, http://docs.scipy.org/doc/scipy/reference/spatial.html 
    Atree = KDTree(A) 
    Btree = KDTree(B) 
    a_nearestb, ixab = Btree.query(A, k=1, p=p, eps=eps) # p=inf is fast 
    b_nearesta, ixba = Atree.query(B, k=1, p=p, eps=eps) 
    if verbose: 
     print "a_nearestb:", nu.quantiles5(a_nearestb) 
     print "b_nearesta:", nu.quantiles5(b_nearesta) 
    return (np.median(a_nearestb) + np.median(b_nearesta))/2 
     # means are sensitive to outliers; fast approx median ? 

Bạn thể sau đó cụm 2000 điểm của bạn trong 32-không gian đến 20 trung tâm cụm trong một shot: (. khoảng cách Euclide thông thường sẽ không làm việc ở đây ở tất cả)

centres, labels = kmeans(points, k=20, iter=3, distance=nearestpairsdistance) 

Hãy theo dõi — cho chúng tôi biết điều gì đã hiệu quả và kết quả là không.

Các vấn đề liên quan