聚類分析 Kmeans演算法理解及R語言實現

2021-08-13 18:56:13 字數 2443 閱讀 2525

一、基本解釋(演算法思想、名詞解釋)

演算法:

1、在總體中隨機選擇k個值作為初始質心。

2、計算每個樣本點到每個質心的距離(一般為歐式距離),將每個點指派到最近的質心點,形成k個聚類。

3、重新這個簇的樣本點的平均值,作為簇的新質心。

4、重複2-3直至質心不再發生變化,或者只發生很微小的變化。

名詞解釋:

關於距離的定義請參考:數學演算法中的各種距離

二、數學推導

三、r中自帶包及案例介紹

在r語言中,只需要呼叫knn包中的kmeans函式,主要引數有資料集以及要分的類別數量。

下面是呼叫kmeans函式對經典資料集iris進行聚類的**

#r語言**

# 用r自帶的kmeans包實現kmeans聚類

#讀取iris 資料集

## 設定路徑為algorithmpractise-r,讀取當前工作目錄子資料夾格式,windows格式參考 "d:\\myspace\\機器學習\\r\\rsourse"

iris

#處理資料集,去掉分類資料列class

#剩餘引數有四個:sepal萼片的長寬、petal 花瓣的長寬

newiris

#呼叫kmeans,將樣本分為3類

kckc$cluster

#檢視fitted(kc) #此函式用於檢視之前樣本點通過模型之後的擬合值,這裡其實就是樣本點所屬分類簇質心的座標

table(iris$class,kc$cluster)

#聚類的視覺化

#按照萼片的長寬來顯示

plot(newiris[c("sepal.length","sepal.width")],

col=kc$cluster,pch=as.integer(iris$class))

#按照花瓣的長寬來顯示

plot(newiris[c("petal.length","petal.width")],

col=kc$cluster,pch=as.integer(iris$class))

#以上引數中 col 代表顏色,這裡用聚類結果kc$cluster 來顯示,pch (plot charater簡稱),用之前的分類來顯示

#這樣能清楚的看出通過聚類後的分類和之前分類的區別

#畫出分類的中心點,col代表三種顏色、pch代表中心點形狀、cex代表大小

points(kc$centers,col=1:3,pch=16,cex=2)

以下為其中乙個輸出結果:

四、用r語言自定義函式來實現kmeans功能

iris

#歐式距離計算函式

eudist

#初始質心的計算

initpoints

return(centerpointset)

}#自定義kmeans的函式函式體

customkmeans

#下面要建乙個記錄矩陣,矩陣行數跟樣本點數相同,列數為兩列,第一列記錄該樣本點所屬的類別,第二列記錄誤差值

m=nrow(dataset) #請注意,這裡既代表了樣本檔案有幾行,也代表了有幾個樣本點

pointproperty=matrix(data=0,nrow = m,ncol = 2,byrow = false,dimnames = null)

#初始質心

centroid=initpoints(dataset,k)

colnames(centroid)=colnames(dataset)

#設定遞迴結束位,即當質心還變化的時候,則繼續遞迴,當然這裡也可以改為變化範圍的限制,即當質心只發生微小變化的時候,就停止遞迴

changeflag=true

while(changeflag){

changeflag=false

for (i in 1:m) {

#該for迴圈的次數為資料集的樣本的個數,每行都是乙個樣本點,對每個樣本點計算到每個質心的字段距離,判斷屬於那個簇,以及更新分類標誌位

mindist=inf #預設每個樣本點離所有質心的最短距離為正無窮

minindex=-1 #預設每個樣本點的分類為-1,其實也就是初始是沒有分類

for (j in 1:k) {

#該for迴圈的迴圈次數為質心的個數,即計算第i個樣本點到所有質心的距離,並記錄下最短距離是多少,以及離哪個質心最近

distij=eudist(dataset[i,],centroid[j,]) #計算樣本中第i個點與第j個質心之間的歐式距離

if(is.na(distij)) distij = inf

if(distij

五、自定義函式模型評估

聚類分析 K Means演算法

k means演算法 這是基於劃分的聚類演算法,該演算法效率較高,對大規模資料進行聚類時被廣泛使用。基本思路 把資料集劃分成k 個簇,每個簇內部的樣本非常相似,不同簇之間的差異非常大。k means演算法是乙個迭代演算法,先隨機選擇 k個物件,每個物件代表了起中心,對於剩下的物件,將其賦給最近的簇,...

k means聚類分析

k means演算法是machine learning領域內比較常用的演算法之一。首先從n個資料物件任意選擇 k 個物件作為初始聚類中心 而對於所剩下其它物件,則根據它們與這些聚類中心的相似度 距離 分別將它們分配給與其最相似的 聚類中心所代表的 聚類 然 後再計算每個所獲新聚類的聚類中心 該聚類中...

K means聚類分析

主成分分析 pca pca n components 0.9 data pca.fit transform cross 降維x data 500 x.shape 對類別預設為4 km kmeans n clusters 4 km.fit x predict km.predict x 顯示聚類結果 p...