การวิเคราะห์ข้อมูลขนาดใหญ่ - 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)