R語言——實驗5-聚類分析


  1. 針對課件中的例子自己實現k-means算法
  2. 調用R語言自帶kmeans()對給定數據集表示的文檔進行聚類。
  3. 給定數據集:

 

 

a)         數據代表的是文本信息。

b)        第一行代表詞語,由於保密原因,詞語已經被轉意。第一列代表了文本的編號。

c)         紅框中的數字為對應詞的詞頻。

共113個樣本,用K-Means算法將樣本分為8類。

 

1、針對課件中的例子自己實現k-means算法

 

rm(list=ls())
#導入數據

id<-c(1:8)
x<-c(1,2,1,2,4,5,4,5)
y<-c(1,1,2,2,3,3,4,4)
inputdata<-data.frame(id,x,y)


#計算距離函數
cal_distance<-function(x1,y1,x2,y2){
  dis=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)
  dis=sqrt(dis)
  return(dis)
}

#假定隨機選擇的兩個對象,如序號1和序號3當作初始點
center1=matrix(c(inputdata[1,2],inputdata[1,3]))
center2=matrix(c(inputdata[3,2],inputdata[3,3]))

#一開始兩個簇都是空的
cu1<-c()
cu2<-c()

for(time in 1:5)
{
  #遍歷每一個點
  for(i in 1:length(inputdata$id))
  {
    distance1=cal_distance(inputdata$x[i],inputdata$y[i],center1[1],center1[2])
    distance2=cal_distance(inputdata$x[i],inputdata$y[i],center2[1],center2[2])
    if(distance1<=distance2)
    {
      cu1<-c(cu1,i)
    }
    else
    {
      cu2<-c(cu2,i)
    }
  }
  
  #更新簇1的質心
  sx=0
  sy=0
  for(i in 1:length(cu1))
  {
    sx=sx+inputdata$x[cu1[i]]
    sy=sy+inputdata$y[cu1[i]]
  }
  center1[1]=sx*1.0/length(cu1)
  center1[2]=sy*1.0/length(cu1)
  
  #更新簇2的質心
  sx=0
  sy=0
  for(i in 1:length(cu2))
  {
    sx=sx+inputdata$x[cu2[i]]
    sy=sy+inputdata$y[cu2[i]]
  }
  if(center2[1]==sx*1.0/length(cu2)&&center2[2]==sy*1.0/length(cu2))
  {
    break
  }
  center2[1]=sx*1.0/length(cu2)
  center2[2]=sy*1.0/length(cu2)
  cu1<-c()
  cu2<-c()
}

cat("簇1質心: ",center1[1]," ",center1[2])
print("簇1包含的元素有: ")
for(i in 1:length(cu1))
{
  print(cu1[i])
}
print("")
cat("簇2質心: ",center2[1]," ",center2[2])
print("")
print("簇1包含的元素有: ")
for(i in 1:length(cu2))
{
  print(cu2[i])
}

 

 

 

 

2、  調用R語言自帶kmeans()對給定數據集表示的文檔進行聚類。

 

rm(list=ls())

setwd("C:/Users/Administrator/Desktop/R語言與數據挖掘作業/實驗5-聚類分析")

data = read.table("data_cluster.txt")

kc <- kmeans(data, 8) #分類模型訓練

print(kc)

#fitted(kc) #查看具體分類情況  
#table(data$Species, data$cluster)#查看分類概括 

 

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com