数据聚类与挖掘分析,数据挖掘的聚类算法
聚类是在没有给定分类的情况下,根据数据的相似性对样本进行分组的方法。
与需要由有类别标记的样本组成的训练数据的分类模型不同,聚类模型可以建立在无类别标记的数据上,这是一种非监督的学习算法。
聚类的输入是一组未标记的样本,聚类根据它们各自的距离或相似度将它们分成若干组。划分的原则是组内距离最小,组间距离最大。
在聚类之前,删除值大多为0的变量和相关性高的变量。然后通过主成分分析变换得到不相关的主成分值。
常用的聚类分析算法
名称算法描述K-Means K- means聚类,也叫快速聚类法,是在最小化误差函数的基础上,将数据分成预定数量的类K。
该算法原理简单,易于处理大量数据。
K- center K- means算法对离群点比较敏感,而K- center算法不使用一个聚类中对象的平均值作为聚类中心,选择最接近平均值的对象作为聚类中心系统。聚类也称为多级聚类。被分类的单元是由高到低的树形结构,位置越低,过度包含的对象越少,但这些对象之间的共同特征越多。
这种聚类方法只适合数据量小的情况,但是数据量大的时候速度很慢。
聚类分析结果的评价
1.纯度评估方法
计算正确聚类在总数中的比例。
2.RI评估方法
r是分组在一起的两个对象被正确分类;w表示不应组合在一起的两个对象被正确分离;m表示不应该分组在一起的对象被错误地放在一个类中;d表示不该分离的物体被误分离。
3.f值评估法
基于从RI评估方法导出的方法,
其中,
实际上,RI方法认为准确率P和召回率R同等重要。我们可能更需要某个特征,然后用F值法比较合适。
本文以K-Means算法为例:
根据以下数据将客户分为不同的客户群,并评估这些客户的价值。
R语言实现:
1.建立聚类模型。
KM=KMeans (data,centers=3) # K-means聚类分析,分为三种。print(km)的输出结果如下:
可以看出,样本被分成了三类,每类的数量分别为367、346、227。
2.根据聚类分析的结果,样品分为3组:
AAA=data.frame (data,km $ cluster)data 1=data[which(AAA $ km . cluster==1),]data 2=data[which(AAA $ km . cluster==2),]data 3=data[which(AAA $ km . cluster==3
par(M flow=c(3,3))plot(密度(data1[,2]),col=red ,main=R)plot(密度(data1[,3]),col=red ,main=F)plot(密度(data1[,4]),col=red ,main=M)plot(密度(data2[,2]),col=red ,main=R)plot(密度(data2[,3]),col=red ,main=F)plot(密度(data2[,4])
对图形的分析表明:
1组特点:R 0-20天派发,F 1-10次派发,M 200-600元派发,属于低价值客户群;
2组特点:R分10-30天,F分1-20次,M分900-1500元,属于中级客户群;
组3特点:R 0-20天分布,F 1-15次分布,M 1600-2000元分布,属于高价值客户群体。
Python实现:
导入熊猫as pdk=3 #聚类类别迭代=500 #最大循环数data=PD . read _ excel( consumption _ data . xls ),Index _ col= id )data _ zs=(data-data . mean())/data . STD()#数据标准化from sk learn . cluster import kmeanmodel=kmeans(n _ clusters=k,n _ jobs=4,Max_iter=iteration) #并发数设置为4model.fit(data_zs) #开始聚类#简单打印结果R1=.value _ counties () # Count类别数R2=PD . data frame(model . cluster _ centers _)#找出聚类中心r=pd.concat([r2,r1],axis=1) #横向连接,0为纵向r . columns=list(data . columns)[u cluster category ]#重命名表头打印(r
#详细输出原始数据及类别r=pd.concat([data,pd .Series(model.labels_,index=data.index)],axis=1)r . columns=list(data。列)[u 聚类类别]r.to_excel(1.xls )输出结果如下:
绘制不同客户分群的概率密度函数图,通过这些图可以直观地比较不同客户群的价值。
定义密度_绘图(数据):#自定义作图函数将matplotlib.pyplot导入为PLT PLT。RC params[ font。sans-serif ]=[ sim hei ]#用来正常显示中文标签PLT。RC params[轴。unicode _ MINUS ]=False #用来正常显示负号p=data.plot(kind=kde ,linewidth=2,subplots=True,sharex=False) [p[i].set_ylabel(u 密度)对于范围(k)内的I)PLT。legend()返回PLT pic _ output= PD _ #概率密度图文件名前缀对于范围(k)中的I:density _ plot(data[r[u 聚类类别]==i]).保存fig(u % s % s . png %(pic _ output,I))输出结果如下:
聚类结果可视化106 .TSNE工具提供了一种有效的数据降维方式,可以在2维或3维的空间中展示聚类结果。
从sklearn.manifold导入tsne。fit _ transform(data _ zs)#进行数据降维tsne=pd .DataFrame(tsne.embedding_,index=data_zs.index) #转换数据格式将matplotlib.pyplot作为PLT PLT。rcparams[ font。sans-serif ]=[ sim hei ]PLT。rcparams[轴。unicode _ MINUS ]=False d=tsne[r[u 聚类类别]==0]plt.plot(d[0],d[1], r.)d=tsne[r[u 聚类类别]==1]plt.plot(d[0],d[1], go)d=tsne[r[u 聚类类别]==2]plt.plot(d[0],d[1], b*)plt.show()输出结果如下:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。