(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"
Tôi có một số câu hỏi về điều này:
- 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? - 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?
- 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].
- 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 Ý.
- 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? - Ả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ì?
- 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:
kfit
tài liệu hướng dẫn chức năng có sẵn? Tôi đã xem bên trong tm
thư viện cran.r-project.org/web/packages/tm/tm.pdf và không tìm thấy kfit
ở đó.
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.