海林老師《資料探勘》(韓佳煒書)課程作業系列
要求:自己寫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...