Cách hiệu quả để tính khoảng cách giữa các tâm từ ma trận khoảng cách


8

Chúng ta hãy có ma trận đối xứng vuông của khoảng cách euclide bình phương giữa điểm và vectơ dài biểu thị thành viên cụm hoặc nhóm ( cụm) của các điểm; một cụm có thể bao gồm điểm.n n k 1Dnnk1

Cách hiệu quả nhất hoặc thực sự hiệu quả (về tốc độ) để tính khoảng cách giữa các trọng tâm cụm ở đây là gì?

Cho đến nay tôi luôn luôn phân tích phối hợp hiệu trưởng trong tình huống này. Số tiền MDS của PCoA hoặc Torgerson để chuyển đổi thành ma trận các sản phẩm vô hướng ("định tâm kép") và sau đó thực hiện PCA của nó. Bằng cách này, chúng ta tạo tọa độ cho điểm trong không gian euclide mà chúng trải dài. Sau đó, thật dễ dàng để tính khoảng cách giữa các tâm theo cách thông thường - như bạn sẽ làm với dữ liệu. PCoA phải thực hiện phân rã eigen hoặc SVD của semidefinite dương đối xứng , nhưngS N S NDSngrouped points x variablesn x nSncó thể khá lớn Ngoài ra, nhiệm vụ không phải là giảm kích thước và chúng tôi thực sự không cần các trục chính trực giao đó. Vì vậy, tôi có cảm giác rằng những sự phân hủy này có thể là quá mức cần thiết.

Vì vậy, bạn có kiến ​​thức hoặc ý tưởng về một cách có khả năng nhanh hơn?

Câu trả lời:


6

Đặt các điểm được lập chỉ mục , tất cả chúng trong R d . Đặt tôi là chỉ mục cho một cụm và các chỉ mục cho một cụm khác. Các trung tâm làx1,x2,Giáo dục,xnRdTôiJ

cTôi= =1|Tôi|ΣTôiTôixTôi, cJ= =1|J|ΣjJxj

và mong muốn tìm khoảng cách bình phương của chúng về khoảng cách bình phương .D i j = | | x i - x j | | 2||cTôi-cJ||2DTôij= =||xTôi-xj||2

Chính xác như chúng ta sẽ phá vỡ các tổng bình phương trong tính toán ANOVA, một danh tính đại số là

||cTôi-cJ||2= =1|Tôi||J|(SS(TôiJ)-(|Tôi|+|J|)(1|Tôi|SS(Tôi)+1|J|SS(J)))

trong đó " " chỉ tổng bình phương khoảng cách giữa mỗi điểm trong một tập hợp và tâm của chúng. Các sắc phân cực tái hiện này về khoảng cách bình phương giữa tất cả các điểm:SS

SS(K)= =12ΣTôi,jK||xTôi-xj||2= =ΣTôi<jKDTôij.

Do đó, nỗ lực tính toán là , với hằng số ẩn rất nhỏ. Khi các cụm có cùng kích thước và có trong số chúng, đây là , tỷ lệ thuận với số lượng mục trong : đó sẽ là mục tốt nhất có thể hy vọng.k O ( n 2 / k 2 ) DÔi((|Tôi|+|J|)2)kÔi(n2/k2)D


R mã để minh họa và kiểm tra các tính toán sau.

ss <- function(x) {
  n <- dim(x)[2]
  i <- rep(1:n, n)
  j <- as.vector(t(matrix(i,n)))
  d <- matrix(c(1,1) %*% (x[,i] - x[,j])^2 , n) # The distance matrix entries for `x`
  sum(d[lower.tri(d)])
}
centroid <- function(x) rowMeans(x)
distance2 <- function(x,y) sum((x-y)^2)
#
# Generate two clusters randomly.
#
n.x <- 3; n.y <- 2
x <- matrix(rnorm(2*n.x), 2)
y <- matrix(rnorm(2*n.y), 2)
#
# Compare two formulae.
#
cat("Squared distance between centroids =",
    distance2(centroid(x), centroid(y)),
    "Equivalent value =", 
    (ss(cbind(x,y)) - (n.x + n.y) * (ss(x)/n.x + ss(y)/n.y)) / (n.x*n.y),
    "\n")

Hoàn hảo! Tôi phải thú nhận rằng tôi đã biết các đặc điểm nhận dạng hình bình hành mà bản thân tôi không thể thấy rõ liên kết đến nhiệm vụ của mình và để suy ra công thức. Rất cám ơn bạn. Tôi đã lập trình hàm (trong SPSS) dựa trên công thức của bạn cho bất kỳ số lượng nhân nào và nó thực sự nhanh hơn với ma trận D lớn hơn so với cách gián tiếp qua PCoA.
ttnphns

Tôi cũng nói thêm rằng công thức vẫn còn hiệu lực nếu các nhóm / cụm giao nhau bởi các thành phần của các đối tượng.
ttnphns

Vâng, đó là chính xác: danh tính tôi sử dụng không cho rằng các cụm là rời rạc.
whuber

Chỉ cần thêm một liên kết muộn: phương thức của bạn trong ký hiệu ma trận, trên đó tôi dựa vào chức năng mà tôi đã nói ở trên. stats.stackexchange.com/a/237811/3277
ttnphns

1
K{1,2,Giáo dục,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.