R中----Kmeans聚类分析

数据集[user_duration]是1000名用户使用APP时长及次数的情况,针对该数据集做出聚类
R实现:

library(cluster) 
library(factoextra)
#加载数据
user_duration=read.csv('/user_duration.csv')  
#查看数据 
head(user_duration)
>>>结果
duration launch_cnt
1 3681.6350          4
2  488.7920          3
3  504.2426          3
4   40.2190          4
5  163.1598         14
6  716.0249          1
#观察数据特征
summary(user_duration)
>>>结果
    duration          launch_cnt    
 Min.   :   0.019   Min.   : 1.000  
 1st Qu.: 102.964   1st Qu.: 1.000  
 Median : 300.020   Median : 3.000  
 Mean   : 629.259   Mean   : 4.601  
 3rd Qu.: 737.318   3rd Qu.: 5.000  
 Max.   :4924.707   Max.   :34.000  
#标准化数据集
use_z=scale(user_duration)
#对标准化后数据集进行绘图
plot(use_z)

绘图结果如下图1所示:
数据集标准化后可视化.png
#由于k均值聚类需要指定要生成的聚类数量,使用函数clusGap()来计算用于估计最优聚类数。
gap_user=clusGap(use_z,FUN=kmeans,nstart=25,K.max=10,B=500)

>>>结果
Clustering k = 1,2,..., K.max (= 10): .. done
Bootstrapping, b = 1,2,..., B (= 500)  [one "." per sample]:
.................................................. 50 
.................................................. 100 
.................................................. 150 
.................................................. 200 
.................................................. 250 
.................................................. 300 
.................................................. 350 
.................................................. 400 
.................................................. 450 
.................................................. 500 

#可视化最优聚类数
fviz_gap_stat(gap_user)

从下图上可以看到最优聚类数为2。
最优聚类数可视化.png
#根据最有聚类数进行聚类
user_km=kmeans(use_z,2,nstart=25)
#计算和可视化k均值聚类
fviz_cluster(user_km,user_duration)

得到聚类结果:
聚类结果.png
#判断聚类结果好坏
sil=silhouette(user_km$cluster,dist(use_z))
fviz_silhouette(sil)

>>>结果
cluster size ave.sil.width
1       1  122          0.22
2       2  878          0.78

轮廓系数图:
轮廓系数图.png
#将聚类结果合并
user_duration2=cbind(user_km$cluster,user_duration)

你可能感兴趣的:(R中----Kmeans聚类分析)