R 資料探勘 聚類Kmeans(六)

2021-09-19 20:49:28 字數 3022 閱讀 5156

海林老師《資料探勘》(韓佳煒書)課程作業系列

要求:自己寫r/python**、函式實現一系列演算法

其他參見:

r-資料探勘-求混合型資料物件距離(一)

r-資料探勘-主成分分析pca(二)

r-資料探勘-關聯規則(三)

r-資料探勘-決策樹id3(四)

r-資料探勘-貝葉斯分類(五)

r-資料探勘-聚類kmeans(六)

r-資料探勘-聚類dbscan(七)

分析

演算法/函式

測試資料

測試**

測試結果(截圖)

分析:

#繪圖包:library(ggplot2)

#測試資料:iris及自定義資料

##輸入:n維數值型物件

##返回:[[1]]聚類中心;[[2]]每個簇中包含的物件序號

###可能的問題:error in if (distance < mindis)

#隨機初始化k個質心(質心滿足資料邊界之內)

###返回初始質心矩陣

randheart

return(results)

} #獲採樣本數

m=nrow(data)

n=ncol(data)#列數

#建立初始化質心矩陣

heart=randheart(data,k)

#建立聚類結果是否發生變化-布林變數

ischanged=t

#建立向量儲存-物件屬於哪一類

fenlei=rep(0,m)

#只要聚類結果一直發生變化,就一直執行聚類演算法,直至所有資料點聚類結果不變化

while(ischanged){

#先將聚類結果改為f

ischanged=f

#遍歷資料集

for (i in 1:m) {

#初始化資料與質心之間最小距離為inf,

mindis=inf

minlei=-1

#遍歷初始化質心

for(j in 1:k){

#計算每條資料與每個質心的距離

distance=osdis(data[i,],heart[j,])

if(distance測試資料:第乙個測試資料iris

#########################第乙個測試資料iris

library(ggplot2)

newiris

kc##為畫圖做準備!!即給每個物件新增類標籤

newiris[kc[[2]][[1]],3]=1

newiris[kc[[2]][[2]],3]=2

newiris[kc[[2]][[3]],3]=3

##對類中心的處理(為了畫圖)

newiris_heart=kc[[1]]

newiris_heart=as.data.frame(newiris_heart)

newiris_heart[,3]=0

names(newiris_heart)=names(newiris)

newiris=rbind(newiris,newiris_heart)

####畫圖!!標註類中心

ggplot(newiris,aes(sepal.length,sepal.width)) + geom_point(size=2.5)+

labs(title="iris原資料分布")

ggplot(newiris,aes(sepal.length,sepal.width)) + geom_point(size=2.5, aes(colour=factor(newiris[,3])))+

labs(title="iris kmeans分為三類聚類結果")

labs(title="原資料展示")

p##############################################指定聚為兩類

mm2=k_means(data,2)

data[mm2[[2]][[1]],3]=1

data[mm2[[2]][[2]],3]=2

p + geom_point(size=2.5, aes(colour=factor(data[,3])))+

labs(title="kmeans分為兩類聚類結果")

################################################指定聚為三類

mm3=k_means(data,3)

data[mm3[[2]][[1]],3]=1

data[mm3[[2]][[2]],3]=2

data[mm3[[2]][[3]],3]=3

p + geom_point(size=2.5, aes(colour=factor(data[,3])))+

labs(title="kmeans分為三類聚類結果")

資料探勘 K Means聚類演算法

聚類分析是根據資料本身結構特徵對資料點進行分類的方法。實質是按照彼此距離 的遠近將資料分為若干個類別,以使得類別內資料的 差異性 盡可能小 即 同質 性 盡可能大 類別間 差異性 盡可能大。聚類的目標 將一組資料分成若干組,組 內資料是相似的,而組間資料是有較明顯 差異。與分類區別 分類與聚類最大的...

資料探勘1 K means均值聚類演算法

一.k means均值聚類演算法原理 對於給定的樣本集,按照樣本之間的距離大小,將樣本集劃分為k個簇。讓簇內的點盡量緊密的連在一起,而讓簇間的距離盡量的大。如果用資料表示式表示,假設簇劃分為 c1,c2,ck 則我們的目標是最小化平方誤差e 其中 i是簇ci的均值向量,有時也稱為質心,表示式為 二....

R語言中K Means聚類演算法

設定工作空間 把 資料及程式 資料夾拷貝到f盤下,再用setwd設定工作空間 setwd e r workspace r語言資料分析與挖掘實戰 chp5 讀入資料 data read.csv data consumption data.csv header true 2 4 view data fi...