当前位置:文档之家› 2 kmeans用户聚类R

2 kmeans用户聚类R

#代码功能:利用kmeans聚类模型对用户进行分类
#输入数据:第一列:用户ID,第二列:ID对应值

#载入包文件
library(readxl)
library(cluster)
library(klaR)
library(scatterplot3d)

#加载本地数据
data <- as.data.frame(read_xlsx(path = "syy.xlsx"))
df1 <- data[-1]

#定义一个函数,用于绘制聚类树结构
wssplot <- function(data,nc=15,seed=1234){
wss <- (nrow(data)-1) *sum(apply(data,2,var))
for (i in 2:nc) {
set.seed(seed)
wss[i] <- sum(kmeans(data,centers = i)$withinss)
}
plot(1:nc,wss,type="b",pch =1,lwd=0.5,lty=4,cex=2,col="blue",xlab="number of clusters",ylab="squares errors")
}

#对输入数据进行标准化
df <- scale(df1)

#基于图形得出K值
wssplot(df)

#设置随机数
set.seed(1234)

#调用包得出聚类结果,k=3,取之前观测结果
fit.km<- kmeans(df,3,nstart = 25)
cl<- kmeans(df,3,nstart = 25)

#绘制一个3D的聚类散点图
sort(cl$cluster)
scatterplot3d(df[,1],df[,2],df[,3],highlight.3d=TRUE,color =cl$cluster,pch = 8,col.axis = "Violet", col.grid = "Violet",xlab = "brand",ylab = "media",zlab = "ec")

#重新初始化一个窗口
dev.new()

#画出一个二维的聚类图
plot(data[,c(1:2)],col = fit.km$cluster)

#结果输出到本地
data <- as.data.frame(data)
data$cluster1 <- fit.km$cluster
write.csv(data,file = "clusterresult1.csv")




相关主题
文本预览
相关文档 最新文档