1. 程式人生 > >R語言Kmeans聚類例項

R語言Kmeans聚類例項

隨機數生成40對點,每一個點2維,聚成4類,並且畫出聚類圖形!

Kmeans演算法原理
K均值法先指定聚類數,目標是使每個資料到資料點所屬聚類中心的總距離的平方和最小,規定聚類中心點時則是以該類資料點的平均值作為聚類中心。
步驟

  1. 隨機選取K個數據點作為(起始的)聚類中心點;
  2. 按照距離最近原則分配資料點到對應類;
  3. 計算每類的資料點平均值,找到新的聚類中心;
  4. 計算資料點到聚類中心的總距離;
  5. 如果與上一次相比總距離下降,聚類中心替換;
  6. 直到總距離不再下降或者達到指定計算次數。

解決過程

  1. 隨機生成兩個長度為40的向量,並將其轉化為矩陣,則為2*40的矩陣
  2. 執行Kmeans分類
  3. 檢視分類之後的資訊
  4. 作圖

實現程式碼

n<-runif(40,10,100)
n2<-runif(40,100,200)
c3<-cbind(n,n2)
c3
plot(n,n2)
#在一個矩陣上執行K均值聚類
kc<-kmeans(c3,4)
#檢視資訊
summary(kc)
#檢視聚類的結果,也就是每個點聚到了那個類
kc$cluster
#檢視中心點(聚類點)
kc$centers
#匯入快速畫圖包
library(ggplot2)
#畫圖
qplot(n,n2,colour=kc$cluster)

結果展示

> summary(kc)
             Length Class  Mode   
cluster      40     -none- numeric
centers       8     -none- numeric
totss         1     -none- numeric
withinss      4     -none- numeric
tot.withinss  1     -none- numeric
betweenss     1     -none- numeric
size          4     -none- numeric
iter          1     -none- numeric
ifault        1     -none- numeric

> kc$cluster
 [1] 3 1 1 2 3 3 1 4 3 3 2 1 3 1 1 1 2 4 3 1 1 3 3 4 3 3 4 1 1 1 1 4 4 1 4 2 3 1 4 4
> kc$centers
         n       n2
1 38.61641 143.5943
2 73.16323 110.5277
3 75.97488 147.8338
4 72.60813 187.7726

plot(n,n2)
在這裡插入圖片描述

聚類之後的圖
在這裡插入圖片描述