巨鹿网站建设,广州正规网站建设,菜鸟教程网页制作模板,权重查询站长工具目录1、分层聚类算法2、方法3、分析步骤4、案例1、分层聚类算法层次聚类算法又称为树聚类算法#xff0c;它根据数据之间的距离#xff0c;透过一种层次架构方式#xff0c;反复将数据进行聚合#xff0c;创建一个层次以分解给定的数据集。2、方法01 聚类方法linkagescipy.…目录1、分层聚类算法2、方法3、分析步骤4、案例1、分层聚类算法层次聚类算法又称为树聚类算法它根据数据之间的距离透过一种层次架构方式反复将数据进行聚合创建一个层次以分解给定的数据集。2、方法01 聚类方法linkagescipy.cluster.hierarchy.linkage(data,methodsingle)data 训练样本method 类距离的计算公式1、single l两个类之间最短距离的点的距离2、complete 两个类之间最长距离的点的距离3、centroid 两个所有点的中点的距离02 层次聚类绘图scipy.cluster.hierarchy.dendrogram(linkage)linkage 层次聚类的结果03 层次聚类分类方法scipy.cluster.hierarchy.fcluster(linkage,n,criterionmaxclust)linkage 层次聚类的结果n 要聚类的个数criterion 划分方法使用maxclust最大划分法3、分析步骤01 计算每两个点距离的平方计算公式也就是两个点距离的平方。02 找出他们之间的最近距离进行合并两点的均值作为新值归为一类03 重新计算新生成的这个类与各个旧类之间的相似度04 重复胡2和3的步骤4、案例import pandas as pdimport matplotlib.pyplot as pltdatapd.read_csv(D:\\DATA\\pycase\\7.1\\data.csv)# 提取关键特征 data.columnsfColumns[ 工作日上班时电话时长, 工作日下半时电话时长, 周末电话时长, 国际电话时长, 总电话时长,平均每次通话时长]# 导入距离计算公式并且进行训练数据import scipy.cluster.hierarchy as hclusterlinkagehcluster.linkage(data[fColumns],methodcentroid)# 查看层次聚类的结果hcluster.dendrogram(linkage)# 仅仅查看其中一部分的数据,这里查看12个数据hcluster.dendrogram(linkage,truncate_modelastp,p12,leaf_font_size12.)# 进行层次聚类pTargethcluster.fcluster(linkage,3,criterionmaxclust)# 对样本量进行统计交叉pd.crosstab(pTarget,pTarget)# 通过PCA对数据进行降维from sklearn.decomposition import PCApca_2PCA(n_components2)data_pcapca_2.fit_transform(data[fColumns])# 转化为数据框data_pca_2pd.DataFrame(data_pca)# 绘图plt.scatter(data_pca_2[0],data_pca_2[1],cpTarget)# 绘制每个数据特征的影响和表现# 3 定义空的数据框dMeanpd.DataFrame(columnsfColumns[分类])data_gbdata[fColumns].groupby(pTarget)i0;for g in data_gb.groups:rMeandata_gb.get_group(g).mean()rMean[分类]gdMeandMean.append(rMean,ignore_indexTrue)subDatadata_gb.get_group(g)for column in fColumns:ii1pplt.subplot(3,5,i)p.set_title(column)p.set_ylabel(str(g)分类)plt.hist(subData[column],bins20)# 绘制折线图data.columnspTargetpTarget-1 # 下面绘图从0开始绘制rdata[[工作日上班时电话时长, 工作日下半时电话时长, 周末电话时长, 国际电话时长]]r.indexdata.客户编号r[聚类类别]pTargetplt.rcParams[font.sans-serif][SimHei] #用来正常显示中文标签plt.rcParams[axes.unicode_minus]False #用来正常显示负号#有中文出现的情况需要u内容style[ro-,go-,bo-]fColumns2[ 工作日上班时电话时长, 工作日下半时电话时长, 周末电话时长, 国际电话时长]xlabelsfColumns2# # %matplotlib qt 弹窗k3for i in range(k): #注意作图、做出不同样式plt.figure()tmpr[r[u聚类类别]i].iloc[:,:4] # 提取每一类for j in range(len(tmp)):plt.plot(range(1,5),tmp.iloc[j],style[i])plt.xticks(range(1,5),xlabels,rotation20) #坐标标签plt.subplots_adjust(bottom0.15) # 调整底部plt.savefig(u%s%s,png%(D:\\DATA\\pycase\\7.1\\scipy,i)) #保存图片