10-10 采用k-means算法进行聚类分析 -R实现

背景:

回归分析:训练出已知的两个不同的数组间的函数关系,并作出预测;
分类分析:从一组样本中,找出方法作出分类,并对未参与训练的个体作出预测;
聚类分析: 对一组样本作出区分,成为继续探索几个簇间差异的依据。

聚类摘要:

很多问题没法给出明确的解决方法;
聚类是一种无监督的学习算法,没有严格意义的对错之分,不同的人
或者方法,聚类的结果很可能不一样;
对噪点敏感,需要提剔除噪点;
数据形状大都不会是规则的球形,分类算法需要能处理特殊形状的数据。

重点:

1.k-means是最常用的聚类算法;
2.k-means只能处理球状数据;
3.理论依据勾股定理。

k-means算法逻辑:

1.选择k个初始质心,初始质心随机选择即可,每一个质心为一个类;
2.把每个观测指标派到离他最近的质心,与质心形成新的类;
3.重新计算每个类的质心,所谓质心就是一个类中所有观测的平均向量(这里称为
  向量,是因为每一个观测都包含很多变量,所以我们把一个观测视为一个多维向
  量,维数由变量数决定);
4.重复2和3;
5.直到质心不在发生变化或者到达最大迭代次数。	

核心难点:

质心数的选择很重要,需反复测试找到最优解,实例如下:

聚类分析:

数据集user_duration是1000名用户使用app时长及次数的情
况,针对该数据集作出聚类分析,判断用户特征(R实现):
#1.导入并检查数据
library(cluster)
library(factoextra)
#cluster和factoextra 包是用来选取质心数的 第三方库

#读取数据集
user_data=read.csv('C:/Users/Administrator.USER-20200802SR/Desktop/聚类数据集/user_duration.csv')
#查看数据集特征(平均数、中位数、众位数、最值等)
summary(user_data)

在这里插入图片描述
数据特征结论:

查看结果可得: 两组数的中位数远小于均值,说明两组数是左偏
的数据,所以不可能是球状数据;
#标准化数据集
> user_2=scale(user_data)
#标准化后的数据作图(图如下:)
> plot(user_2)

在这里插入图片描述

#gapuse计算,挑取质心数
#K.max质心数上限 
#Nstat –聚类次数 ( 如 质心数为1时,聚类25次;)  共计10*25次数
>Gap_user=clusGap(user_z,FUN=kmeans,nstart=25,K.max=10,B=500)
#预测质心数,返回如下图:
>fviz_gap_stat(Gap_user)

在这里插入图片描述
由上图可得最佳质心数为2

#根据最佳质心数进行聚类
>user_km=kmeans(user_z, 2, nstart=25)
>fviz_cluster(User_km,user_data) 

在这里插入图片描述
结论:

	由上图可知:大量密集点是低时长低次数,少量点是高时长
高次数,中间交接区域为用户体验风水岭,即为高粘性用户和低粘
性用户的阈值。
#做轮廓系数图
> sil= silhouette(User_km$cluster,dist(user_2)) 
> fviz_silhouette(sil)
  cluster size ave.sil.width
1       1  122          0.22
2       2  878          0.78

在这里插入图片描述
总结:
轮廓系数为负:离质心较远的点;

#合并聚类结果
> User_duration2=cbind(User_km$cluster,user_data)

以上。

猜你喜欢

转载自blog.csdn.net/weixin_46400833/article/details/109138761