การวิเคราะห์ข้อมูลขนาดใหญ่ - K-mean Clustering
k-mean clustering มีจุดมุ่งหมายเพื่อแบ่งการสังเกต n ในคลัสเตอร์ k ซึ่งการสังเกตแต่ละครั้งเป็นของคลัสเตอร์ที่มีค่าเฉลี่ยใกล้เคียงที่สุดซึ่งทำหน้าที่เป็นต้นแบบของคลัสเตอร์ ส่งผลให้มีการแบ่งพื้นที่ข้อมูลลงในเซลล์ Voronoi
กำหนดชุดการสังเกต(x 1 , x 2 , …, x n )โดยที่การสังเกตแต่ละครั้งเป็นเวกเตอร์จริง d มิติการจัดกลุ่ม k-mean มีจุดมุ่งหมายเพื่อแบ่งการสังเกต n ออกเป็น k กลุ่มG = {G 1 , G 2 , …, G k }เพื่อลดผลรวมภายในคลัสเตอร์ของกำลังสอง (WCSS) ที่กำหนดไว้ดังนี้ -
$$ argmin \: \ sum_ {i = 1} ^ {k} \ sum_ {x \ in S_ {i}} \ parallel x - \ mu_ {i} \ parallel ^ 2 $$
สูตรต่อมาแสดงฟังก์ชันวัตถุประสงค์ที่ย่อเล็กสุดเพื่อค้นหาต้นแบบที่เหมาะสมที่สุดในการทำคลัสเตอร์ k-mean สัญชาตญาณของสูตรคือเราต้องการค้นหากลุ่มที่แตกต่างกันและสมาชิกแต่ละคนของแต่ละกลุ่มควรมีความคล้ายคลึงกับสมาชิกอื่น ๆ ของแต่ละคลัสเตอร์
ตัวอย่างต่อไปนี้สาธิตวิธีการรันอัลกอริทึมการทำคลัสเตอร์ k-mean ใน R
library(ggplot2)
# Prepare Data
data = mtcars
# We need to scale the data to have zero mean and unit variance
data <- scale(data)
# Determine number of clusters
wss <- (nrow(data)-1)*sum(apply(data,2,var))
for (i in 2:dim(data)[2]) {
wss[i] <- sum(kmeans(data, centers = i)$withinss)
}
# Plot the clusters
plot(1:dim(data)[2], wss, type = "b", xlab = "Number of Clusters",
ylab = "Within groups sum of squares")
เพื่อหาค่า K ที่ดีเราสามารถพล็อตผลรวมภายในกลุ่มของกำลังสองสำหรับค่าต่าง ๆ ของ K โดยปกติเมตริกนี้จะลดลงเมื่อมีการเพิ่มกลุ่มมากขึ้นเราต้องการหาจุดที่การลดลงของผลรวมภายในกลุ่ม ของกำลังสองเริ่มลดลงอย่างช้าๆ ในพล็อตค่านี้แสดงได้ดีที่สุดด้วย K = 6
เมื่อกำหนดค่า K แล้วจำเป็นต้องรันอัลกอริทึมด้วยค่านั้น
# K-Means Cluster Analysis
fit <- kmeans(data, 5) # 5 cluster solution
# get cluster means
aggregate(data,by = list(fit$cluster),FUN = mean)
# append cluster assignment
data <- data.frame(data, fit$cluster)