Có hợp lệ để thực hiện phương tiện k trên ma trận khoảng cách như trên ma trận dữ liệu (dữ liệu khai thác văn bản) không?


8

(Bài đăng này là một bài đăng lại câu hỏi tôi đã đăng ngày hôm qua (hiện đã bị xóa), nhưng tôi đã cố gắng thu nhỏ lại khối lượng từ và đơn giản hóa những gì tôi đang hỏi)

Tôi hy vọng sẽ nhận được một số trợ giúp để diễn giải một kịch bản kmeans và đầu ra mà tôi đã tạo. Đây là trong bối cảnh phân tích văn bản. Tôi đã tạo ra kịch bản này sau khi đọc một số bài báo trực tuyến về phân tích văn bản. Tôi đã liên kết với một số trong số họ dưới đây.

Tập lệnh r mẫu và kho dữ liệu văn bản tôi sẽ đề cập đến trong suốt bài đăng này:

library(tm) # for text mining

## make a example corpus
# make a df of documents a to i
a <- "dog dog cat carrot"
b <- "phone cat dog"
c <- "phone book dog"
d <- "cat book trees"
e <- "phone orange"
f <- "phone circles dog"
g <- "dog cat square"
h <- "dog trees cat"
i <- "phone carrot cat"
j <- c(a,b,c,d,e,f,g,h,i)
x <- data.frame(j)    

# turn x into a document term matrix (dtm)
docs <- Corpus(DataframeSource(x))
dtm <- DocumentTermMatrix(docs)

# create distance matrix for clustering
m <- as.matrix(dtm)
d <- dist(m, method = "euclidean")

# kmeans clustering
kfit <- kmeans(d, 2)
#plot – need library cluster
library(cluster)
clusplot(m, kfit$cluster)

Đó là cho kịch bản. Dưới đây là đầu ra của một số biến trong tập lệnh:

Đây là x, khung dữ liệu x đã được chuyển thành một kho văn bản:

 x
                       j
    1 dog dog cat carrot
    2      phone cat dog
    3     phone book dog
    4     cat book trees
    5       phone orange
    6  phone circles dog
    7     dog cat square
    8      dog trees cat
    9   phone carrot cat

Đây là ma trận tài liệu kết quả dtm:

    > inspect(dtm)
<<DocumentTermMatrix (documents: 9, terms: 9)>>
Non-/sparse entries: 26/55
Sparsity           : 68%
Maximal term length: 7
Weighting          : term frequency (tf)

    Terms
Docs book carrot cat circles dog orange phone square trees
   1    0      1   1       0   2      0     0      0     0
   2    0      0   1       0   1      0     1      0     0
   3    1      0   0       0   1      0     1      0     0
   4    1      0   1       0   0      0     0      0     1
   5    0      0   0       0   0      1     1      0     0
   6    0      0   0       1   1      0     1      0     0
   7    0      0   1       0   1      0     0      1     0
   8    0      0   1       0   1      0     0      0     1
   9    0      1   1       0   0      0     1      0     0

Và đây là ma trận khoảng cách d

> d
         1        2        3        4        5        6        7        8
2 1.732051                                                               
3 2.236068 1.414214                                                      
4 2.645751 2.000000 2.000000                                             
5 2.828427 1.732051 1.732051 2.236068                                    
6 2.236068 1.414214 1.414214 2.449490 1.732051                           
7 1.732051 1.414214 2.000000 2.000000 2.236068 2.000000                  
8 1.732051 1.414214 2.000000 1.414214 2.236068 2.000000 1.414214         
9 2.236068 1.414214 2.000000 2.000000 1.732051 2.000000 2.000000 2.000000

Đây là kết quả, kfit:

> kfit
K-means clustering with 2 clusters of sizes 5, 4

Cluster means:
         1        2        3        4        5        6        7        8        9
1 2.253736 1.194938 1.312096 2.137112 1.385641 1.312096 1.930056 1.930056 1.429253
2 1.527463 1.640119 2.059017 1.514991 2.384158 2.171389 1.286566 1.140119 2.059017

Clustering vector:
1 2 3 4 5 6 7 8 9 
2 1 1 2 1 1 2 2 1 

Within cluster sum of squares by cluster:
[1] 13.3468 12.3932
 (between_SS / total_SS =  29.5 %)

Available components:

[1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss" "betweenss"    "size"         "iter"        
[9] "ifault"      

Đây là cốt truyện kết quả: nhập mô tả hình ảnh ở đây

Tôi có một số câu hỏi về điều này:

  1. Khi tính toán ma trận khoảng cách của tôi d (một tham số được sử dụng trong tính toán kfit) tôi đã làm điều này : d <- dist(m, method = "euclidean"). Một bài viết khác tôi gặp phải đã làm điều này : d <- dist(t(m), method = "euclidean"). Sau đó, riêng về một câu hỏi SO tôi đã đăng gần đây, một người nào đó đã nhận xét "kmeans nên được chạy trên ma trận dữ liệu, không phải trên ma trận khoảng cách!". Có lẽ họ có nghĩa là kmeans()nên lấy m thay vì d làm đầu vào. Trong số 3 biến thể đó / ai là "đúng". Hoặc, giả sử tất cả đều hợp lệ theo cách này hay cách khác, đó sẽ là cách thông thường để thiết lập một mô hình cơ sở ban đầu?
  2. Theo tôi hiểu, khi hàm kmeans được gọi trên d, điều xảy ra là 2 nhân ngẫu nhiên được chọn (trong trường hợp này là k = 2). Sau đó r sẽ xem xét từng hàng trong d và xác định tài liệu nào gần với centroid nhất. Dựa trên ma trận d ở trên, cái đó thực sự sẽ trông như thế nào? Ví dụ: nếu trọng tâm ngẫu nhiên đầu tiên là 1,5 và thứ hai là 2, thì tài liệu 4 sẽ được chỉ định như thế nào? Trong ma trận d doc4 là 2.645751 2.000000 2.000000 vì vậy (theo r) có nghĩa là (c (2.645751,2.000000,2.000000)) = 2.2 vì vậy trong lần lặp đầu tiên của kmeans trong ví dụ này, doc4 được gán cho cụm có giá trị 2 vì nó gần hơn với hơn 1,5. Sau đó, giá trị trung bình của cụm được lấy lại là một trọng tâm mới và các tài liệu được gán lại khi thích hợp. Điều này đúng hay tôi đã hoàn toàn bỏ lỡ quan điểm?
  3. Trong đầu ra kfit ở trên "cụm có nghĩa là gì"? Ví dụ, cụm 3 của Doc3 có giá trị là 1.312096. Con số này trong bối cảnh này là gì? [chỉnh sửa, vì nhìn lại điều này một vài ngày sau khi đăng tôi có thể thấy rằng đó là khoảng cách của mỗi tài liệu đến các trung tâm cụm cuối cùng. Vì vậy, số thấp nhất (gần nhất) là thứ xác định cụm nào mà mỗi tài liệu được gán].
  4. Trong đầu ra kfit ở trên, "vectơ phân cụm" trông giống như cụm mà mỗi tài liệu được gán cho. ĐỒNG Ý.
  5. Trong đầu ra kfit ở trên, "Trong tổng số bình phương theo cụm". Đó là gì? 13.3468 12.3932 (between_SS / total_SS = 29.5 %). Một thước đo của phương sai trong mỗi cụm, có lẽ có nghĩa là một số thấp hơn hàm ý một nhóm mạnh hơn so với một nhóm thưa thớt hơn. Đó có phải là một tuyên bố công bằng? Những gì về tỷ lệ cho 29,5%. Cái gì vậy Là 29,5% "tốt". Một số thấp hơn hoặc cao hơn sẽ được ưu tiên trong bất kỳ trường hợp nào của kmeans? Nếu tôi thử nghiệm với các số k khác nhau, tôi sẽ tìm kiếm gì để xác định xem số cụm tăng / giảm có giúp hoặc cản trở việc phân tích không?
  6. Ảnh chụp màn hình của cốt truyện đi từ -1 đến 3. Cái gì đang được đo ở đây? Trái ngược với giáo dục và thu nhập, chiều cao và cân nặng, số 3 ở đầu thang đo trong bối cảnh này là gì?
  7. Trong cốt truyện, thông báo "Hai thành phần này giải thích 50,96% độ biến thiên điểm" Tôi đã tìm thấy một số thông tin chi tiết ở đây (trong trường hợp có ai khác đi qua bài đăng này - chỉ để hiểu đầy đủ về đầu ra kmeans muốn thêm vào đây.).

Đây là một số bài viết tôi đọc đã giúp tôi tạo ra kịch bản này:


3
Nếu hạ cấp xin vui lòng để lại một bình luận cho tôi biết lý do tại sao tôi có thể cố gắng sửa đổi
Doug Fir

Đâu là kfittài liệu hướng dẫn chức năng có sẵn? Tôi đã xem bên trong tmthư viện cran.r-project.org/web/packages/tm/tm.pdf và không tìm thấy kfitở đó.
ttnphns

Hi @ttnphns kfit là một biến của kfit <- kmeans (d, 2) trong tập lệnh ví dụ tôi đã thực hiện. Không có chức năng kfit thực tế
Doug Fir

Những gì tôi đã làm trong SPSS với dữ liệu của bạn là cái này. Tôi đã chạy K-nghĩa với đầu vào (a) ma trận thuật ngữ tài liệu của bạn tdm; (b) với ma trận khoảng cách euclide của bạn d. K-SPS có nghĩa là luôn xử lý đầu vào như trường hợp X biến dữ liệu và phân cụm các trường hợp. Là trung tâm ban đầu, tôi nhập vào cả hai phân tích các trung tâm đầu ra của phân tích của bạn - cluster means. Kết quả: trong phân tích (b), nhưng không phải trong (a), tôi có các trung tâm cuối cùng giống hệt với các trung tâm đầu vào. Điều đó có nghĩa là K-nghĩa trong (b) không thể cải thiện hơn nữa các trung tâm cụm, điều này ngụ ý rằng phân tích (b) trùng với phân tích k-mean do bạn thực hiện.
ttnphns

(tt) Nhưng như đã nói trước đây, phân tích của tôi (b) coi dữ liệu đầu vào của nó là ma trận dữ liệu, không phải là ma trận khoảng cách. Do đó, phân tích của bạn đã làm điều đó quá. Tôi kết luận rằng hàm K-mean của bạn không được thiết kế để thực hiện các ma trận từ xa (hoặc bạn không thể chơi tùy chọn như vậy nếu nó tồn tại), đó là ma trận K tiêu chuẩn yêu cầu ma trận dữ liệu. Đó là một sai lầm khi cố gắng cho nó ăn với một ma trận khoảng cách. Do đó, kết quả phân cụm của bạn là sai lầm. Đó là kết luận của tôi.
ttnphns

Câu trả lời:


5

Để hiểu cách thức kmeans()hoạt động của chức năng, bạn cần đọc tài liệu và / hoặc kiểm tra mã bên dưới. Điều đó nói rằng, tôi chắc chắn rằng nó không mất một ma trận khoảng cách mà không cần bận tâm. Bạn có thể viết hàm riêng của mình để thực hiện phân cụm k-nghĩa từ ma trận khoảng cách, nhưng nó sẽ là một rắc rối khủng khiếp.

Thuật toán k-mean có nghĩa là hoạt động trên ma trận dữ liệu, không phải ma trận khoảng cách. Nó chỉ giảm thiểu khoảng cách Euclide bình phương (xem Tại sao thuật toán phân cụm k có nghĩa chỉ sử dụng số liệu khoảng cách Euclide? ). Nó chỉ hợp lý khi bạn có thể có khoảng cách Euclide như một thước đo khoảng cách có ý nghĩa. Điều này luôn luôn là trường hợp kể từ khi thuật toán được phát minh, nhưng dường như rất ít người nhận thức được điều này, với kết quả là k-mean có lẽ là thuật toán được sử dụng nhiều nhất trong học máy.

Khoảng cách Euclide không có ý nghĩa gì đối với dữ liệu phân loại thưa thớt (khai thác văn bản), vì vậy tôi thậm chí sẽ không thử bất cứ điều gì như thế này. Trước tiên bạn cần tìm ra số liệu khoảng cách nào phù hợp với dữ liệu của bạn (@ttnphns giải thích một số biện pháp có thể có ở đây: Hàm khoảng cách tối ưu cho các cá nhân khi các thuộc tính là danh nghĩa là gì? ). Sau đó, bạn có thể tính toán ma trận khoảng cách và sử dụng thuật toán phân cụm có thể hoạt động trên một (ví dụ: k-median / PAM, các thuật toán phân cấp khác nhau, v.v.).


Cảm ơn bạn @gung vì câu trả lời khá quyết đoán, đây là điều tôi đang tìm kiếm vì tôi không chắc chắn và đã đi xuống một lỗ thỏ của nghiên cứu internet dường như làm tôi bối rối hơn nữa. Tôi sẽ xem xét trung bình k và các thuật toán khác mà bạn đề cập.
Doug Fir

2
Ngoài ra, có vẻ như có một khoảng trống trong blogoshpere xung quanh vấn đề này vì hơn một bài viết sử dụng ma trận khoảng cách làm đầu vào cho kmeans, có lẽ một blogger đã sao chép từ một bài viết khác và có tác động xếp tầng cho một số bài viết sai.
Doug Fir
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.