聚類算法作為無監督的學習方法,在不給出Y的情況下對所有的樣本進行聚類。以動態聚類為基礎的K均值聚類方法是其中最簡單而又有深度的一種方法。K均值的好處是我們可以在了解數據的情況下進行對樣本的聚類,當然他也有自己的弱點就是對大數據的運作存在一定的局限。我們以R基礎包自帶的鳶尾花(Iris)數據進行聚類分析的演示。利用R語言的K均值聚類函數kmeans(),進行聚類,首先我們介紹下kmeans()的構成
官方的解釋查看代碼:?kmeans
如圖:
我們主要用的參數是:
X:我們要用來聚類的數據,作為一個矩陣輸入。
Centers:我們要聚類的數量,需要自己進行填寫。
Method:分為single(最短距離),complete(最長距離),median(中間距離),average(類平均),centroid(重心),ward(離差平均和)
1. 我們看下iris 的數據結構:
代碼: dim(iris) #查看數據的行列數
str(iris)#查看數據的變量
2. 獲取我們聚類需要的數據。也就是去掉最後一列的物種標記信息。
代碼:train=iris[1:150,1:4] # 獲取數據的前四列
3. 利用kmeans() 進行聚類分析,並查看模型結果的構成。
代碼:model=kmeans(train)
如圖:
Cluster means: 每個聚類中各個列值生成的最終平均值
Clustering vector: 每行記錄所屬的聚類(2代表屬於第二個聚類,1代表屬於第一個聚類,3代表屬於第三個聚類)
Within cluster sum of squares by cluster: 每個聚類內部的距離平方和
Available components: 運行kmeans函數返回的對象所包含的各個組成部分
"cluster"是一個整數向量,用於表示記錄所屬的聚類
"centers"是一個矩陣,表示每聚類中各個變量的中心點
"totss"表示所生成聚類的總體距離平方和
"withinss"表示各個聚類組內的距離平方和
"tot.withinss"表示聚類組內的距離平方和總量
"betweenss"表示聚類組間的聚類平方和總量
"size"表示每個聚類組中成員的數量
4. 可視化展示結果:
代碼:result=cbind(train,as.character(model$cluster)) #將數據與聚類結果整合
plot(result,col=model$cluster)#繪製散點圖矩陣
歡迎大家學習交流: