ImageVerifierCode 换一换
格式:DOCX , 页数:9 ,大小:83.66KB ,
资源ID:5602027      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5602027.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(使用python进行聚类分析.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

使用python进行聚类分析.docx

1、使用python进行聚类分析使用 python 进行聚类分析一、研究意义 经济管理类研究中,在分析某些变量的时候我们通常需要找出具有相似特征 的数据,先将他们进行分类,例如在分析我们在看每个城市的经济增长率的时候, 我们可能需要将手里的城市先分为大、中、小城市,然后再进行分析,避免不同 类数据之间波动过大影响分析, 这种分析在管理学上叫做聚类分析。 聚类分析的 基本思想就是认为研究的样本或变量之间存在不同程度的相似性(亲疏关系) , 它根据一批样本的多个观测指标, 做出一些能够度量样本或变量之间的相似程度 的统计量,将这些统计量作为分类的依据, 将一些相似程度较大的样本 (或指标) 聚合为一类

2、,直到把所有的样本(或指标)都聚合完毕,形成一个由小到大的分 类系统,这里的类被定义为若干个观测值组成的群组, 并且群组内的观测值的相 似度要比不同的群之间相似度高。 聚类分析在经济管理的社会网络, 竞争网络以 及合作网络等网络分析中使用频率很高。Python中可以是用 K-Means分析来帮助我们达到这一目的。 Kmeans 又称为 非监督学习, 它是数据点到原型的某种距离作为优化的目标函数, 利用函数求极 值的方法得到迭代运算的调整规则。首先从 n 个数据对象任意选择 k 个对象作为初始聚类中心;而对于所剩下 其它对象,则根据它们与这些聚类中心的相似度(距离) ,分别将它们分配给与 其最相

3、似的 (聚类中心所代表的) 聚类;然后再计算每个所获新聚类的聚类中心 (该聚类中所有对象的均值) ;不断重复这一过程直到标准测度函数开始收敛为 止,一般都采用均方差作为标准测度函数。K-Means算法的基础是最小误差平方和准则 , 其代价函数是:?J( c,) = ?(?)- ?(?)2?=1式中, ?(?)表示第 i 个聚类的均值。各类簇内的样本越相似,其与该类均值间的 误差平方越小, 对所有类所得到的误差平方求和, 即可验证分为 k 类时,各聚类 是否是最优的。上式的代价函数无法用解析的方法最小化,只能有迭代的方法。二、数据描述在简单聚类分析中,生成一个 100*2 的随机矩阵。data

4、= np.random.rand(100,2)#生成一个 100*2 的随机矩阵 print(data)在复杂聚类分析中, 因为 scikit-learn 中带有一些标准数据集, 因此直接从系 统自带的 digits 数据集中导入数据来进行聚类分析。from sklearn import datasets #Import datasets from sklearn digits = datasets.load_digits() # 加载 digits 数据集 print(digits) #显示 digits 数据data: array( 0., 0.,5., ., 0., 0., 0., 0.

5、,0., 0., ., 10.,0.,0., 0.,0., 0., ., 16.,9.,0., 0.,0., 1., ., 6.,0.,0., 0.,0., 2., ., 12.,0.,0., 0.,0., 10.,., 12., 1., 0.), target: array(0, 1, 2, ., 8, 9, 8),target_names: array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), images: array( 0., 0., 5., .,1., 0., 0., 0., 0.,0., 13., .3., 15., ., 15., 5.,., 11., 8.,

6、0.,0., 0.,4., 11., ., 12., 7.,0., 0.,2., 14., ., 12., 0.,0., 0.,0.,6., ., 0.,0.,0., 0.,0.,0., ., 5.,0.,0., 0.,0.,0., ., 9.,0.,0., 0.,0.,3., ., 6.,0.,0., 0.,0.,1., ., 6., 0., 0., 0.,0.,1., ., 6., 0., 0., 0.,0.,0., ., 10., 0., 0., 0.,0.,0., ., 12., 0., 0., 0.,0.,3., ., 14., 0., 0., 0.,0.,8., ., 16., 0

7、., 0., 0.,9., 16., ., 0., 0., 0., 0.,3., 13., ., 11., 5., 0., 0.,0.,0., ., 16., 9., 0., 0.,0.,1., ., 1., 0., 0., 0.,0., 13., ., 2., 1., 0., 0.,0., 16., ., 16., 5., 0., 0.,0., 16., ., 15., 0., 0., 0.,0., 15., ., 16., 0., 0., 0.,0.,2., ., 6., 0., 0., 0.,0.,2., ., 0., 0., 0., 0.,0., 14., ., 15., 1., 0.

8、, 0.,4., 16., ., 16., 7., 0., 0.,0.,0., ., 16., 2., 0., 0.,0.,4., ., 16., 2., 0., 0.,0.,5., ., 12., 0., 0., 0.,0., 10., ., 1., 0., 0., 0.,2., 16., ., 1., 0., 0., 0.,0., 15., ., 15., 0., 0., 0.,4., 16., ., 16., 6.,0., 0.,8., 16., ., 16., 8.,0., 0.,1., 8., ., 12., 1.,0.)三、模型描述模型数据处理过程解析:从系统自带的 digits

9、数据集中导入数据并规定簇的数目 k; 运行结果产生 k 个簇,若是满足平方误差准则函数收敛则停止聚类。(1)任意选择 k 个数据对象作为初始聚类中心。(2)计算各个数据到所选出来的各个中心的距离,将数据对象指派到最近 的簇中,然后计算每个簇的均值。(3)根据簇中对象的平均值,将每个对象赋给最类似的簇。(4)更新簇的平均值,即计算每个对象簇中对象的平均值。(5)计算聚类准则函数 E。(6)直到准则函数 E 值不再进行变化。 整个数据处理和聚类分析流程如下图 1 所示。四、 算法实现1.首先我们来看一下 K-means算法的格式:sklearn.cluster.KMeans (n_clusters

10、,init,n_init,max_iter,tol,precompute_dista nces,verbose,random_state,copy_x,n_jobs,algorithm) n_clusters:簇的个数,即聚成几类init: 初始簇中心的获取方法 (一般有 K-means+,random ,和 PCA) n_init: 获取初始簇中心的更迭次数,为了弥补初始质心的影响,算法默认会初 始 10 次质心,实现算法,然后返回最好的结果max_iter: 最大迭代次数(因为 kmeans 算法的实现需要迭代)tol: 容忍度,即 kmeans运行准则收敛的条件precompute_di

11、stances :是否需要提前计算距离,这个参数会在空间和时间之间 做权衡,如果是 True 会把整个距离矩阵都放到内存中, auto 会默认在数据样本 大于 featurs*samples 的数量大于 12e6 的时候 False,False 时核心实现的方法是 利用 Cpython 来实现的 verbose: 冗长模式 , 反正一般不去改默认值 random_state: 随机生成簇中心的状态条件 copy_x: 对是否修改数据的一个标记, 如果 True,即复制了就不会修改数据。 bool 在 scikit-learn 很多接口中都会有这个参数的, 就是是否对输入数据继续 copy 操

12、作,以便不修改用户的输入数据 n_jobs: 并行设置algorithm: kmeans的实现算法,有: auto , full, 其,中 elfkual表ln示用 EM 方 式实现2.首先我们先随机生成一个二维数组,进行一个简单的聚类分析。from sklearn.cluster import KMeansfrom sklearn.externals import joblibfrom sklearn import clusterimport numpy as n p import matp lotlib.pyplot as plt data = np.random.rand(100,2)

13、#生成 100*2 的随机矩阵 estimator=K Means(n_clusters=3) # 将形成的数据的聚类分为 3 类 res=estimator.fit_predict(data) #fit_predict 表示拟合 +预测,也可以分开写 lable_pred=estimator.labels_ # 预测类别标签结果 centroids= estimator.cluster_centers_ # 各个类别的聚类中心值 inertia =estimator.inertia_ # 聚类中心均值向量的总和print (lable_pred) print (centroids) prin

14、t (inertia)for i in range(len(data): # 绘图,根据已经生成的 label_pred,将相同类别的数据 以同样的颜色画出来if int(lable_predi)= 0:plt.scatter(datai0,datai1,color=red)if int(lable_predi)= 1: plt.scatter(datai0,datai1,color=black)if int(lable_predi)= 2:plt.scatter(datai0,datai1,color=blue)plt.show ()3.接下来我们进行更复杂一些的聚类分析。from time

15、 import time import numpy as np import matplotlib.pyplot as plt from sklearn import metrics from sklearn.cluster import KMeans from sklearn.datasets import load_digits from sklearn.decomposition import PCA from sklearn.preprocessing import scale#导入模块 np.random.seed(42) digits = load_digits() #导入数据集

16、data = scale(digits.data)# scale 函数是用来将数据标准化,它沿任意轴标准化数据 集,使其以平均值为中心 n_samples, n_features = data.shape n_digits = len(np.unique(digits.target) #统计没有重复的数字数目,输出为 10 labels = digits.target#数字真实标签 sample size = 300print(n_digits: %d, t n_samples %d, t n_features %d% (n_digits, n_samples,n_features)print

17、(79 * _)print(% 9s % init time inertia homo compl v-meas ARI AMI silhouette)K-means聚类的结果会随着制定类别数和初始点的选择有所不同。 我们这里 总是聚成十类,因为手写数字一共有十种。至于初始点的选取我们定义三种, k-means+, random,和 PCA 降到十个维度后的中心点。#算法评估函数,包括处理时间、最终代价函数值、以及不同的聚类评价指标def bench_k_means(estimator, name, data):t0 = time()estimator.fit(data) #estimator

18、.fit 函数是将数据进行聚类print(% 9s %.2fs %i %.3f %.3f %.3f %.3f %.3f %.3f% (name, (time() - t0),estimator.inertia_,metrics.homogeneity_score(labels, estimator.labels_), pleteness_score(labels, estimator.labels_), metrics.v_measure_score(labels, estimator.labels_), #同质性 homogeneity:每个群集只包含单个类的成员。 #完整性 complet

19、eness:给定类的所有成员都分配给同一个群集 #Homogeneity 和 completeness 表示簇的均一性和完整性。 V 值是他们的调 和平均,值越大,说明分类效果越好。metrics.adjusted_rand_score(labels, estimator.labels_),metrics.adjusted_mutual_info_score(labels, estimator.labels_), metrics.silhouette_score(data, estimator.labels_,metric=euclidean,sample_size=sample_size)

20、bench_k_means(KMeans(init=k-means+, n_clusters=n_digits, n_init=10), name=k-means+, data=data)#Kmeans+,随机初始化 10 次 bench_k_means(KMeans(init=random, n_clusters=n_digits, n_init=10), name=random, data=data)pca = PCA(n_components=n_digits).fit(data)#对数据进行降维处理 bench_k_means(KMeans(init=ponents_, n_clust

21、ers=n_digits, n_init=1), name=PCA-based,data=data#) 在 PCA这种情况下,中心的种子是确定的, 因此我们只用 n_init=1 运行算法一次print(79 * _)高维数据要经过 PCA 降维归一化后才可以进行分类,要不然欧几里得距离 往往会变得膨胀, 出现维度诅咒。 我们可以将原始数据用 PCA降到两维, 这样所 有的数据就可以在二维空间中画出来。 然后我们再用降维后的只有两个特征的数 据进行 K-means 分析,聚成十类,然后再画在 Voronoi diagram 图的背景上。在 PCA处理后的数据上进行可视化, 在以上内容中是将数据

22、从 64降维 10,再进行 K-means聚类;接下来为方便可视化,将数据降到 2 维,进行聚类,可视化。reduced_data = PCA(n_components=2).fit_transform(data)# fit_transform 得到 是用降维度处理后的数据kmeans = KMeans(init=k-means+, n_clusters=n_digits, n_init=10) kmeans.fit(reduced_data) #对删减后的数据进行聚类h = .02 # 定义网格步长#定义边界坐标,定义网格坐标x_min, x_max = reduced_data:, 0.m

23、in() + 1, reduced_data:, 0.max() - 1 y_min, y_max = reduced_data:, 1.min() + 1, reduced_data:, 1.max() - 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h) Z = kmeans.predict(np.c_xx.ravel(), yy.ravel() #用训练模型获得网格预测每一点的类值Z = Z.reshape(xx.shape)plt.figure(1)plt.clf()plt.ims

24、how(Z, interpolation=nearest,extent=(xx.min(), xx.max(), yy.min(), yy.max(),cmap=plt.cm.Paired,aspect=auto, origin=lower)plt.plot(reduced data:, 0, reduced data:, 1, k., markersize=2)centroids = kmeans.cluster_centers_plt.scatter(centroids:, 0, centroids:, 1,marker=x, s=169, linewidths=3,color=w, zo

25、rder=10)plt.title(K-means clustering on the digits dataset (PCA-reduced data)nCentroids are marked with white cross)plt.xlim(x_min, x_max)plt.ylim(y_min, y_max)plt.xticks()plt.yticks() plt.show()五、运行结果及意义说明运行结果:1.进行简单聚类分析的结果如下图 2 所示:图 2 简单聚类分析结果图 这样,我们就将这些随机生成的数据根据其数据特征, 将相似的数据分为了 三个类别,并将他们在图中表示出来。2

26、.进行更为复杂聚类分析的结果如下图 3 所示:上述程序运行完就会出现这样的结果:图 3 复杂聚类分析结果图性能上: Kmeans+random KmeansPca Kmea,ns但差别不大。时间上: Pca Kmeans处理时间远快于另两种算法。并且降维度越低,处理 速度越快,但代价函数会逐渐上升,因此寻找一个合适的处理的维度是关键。3.降维后的可视化结果如下图 4 所示:获得的视图如下:图 4 降维可视化结果图六、总结K-means算法的优缺点。K-means算法的优点是:首先,算法能根据较少的已知聚类样本的类别对树 进行剪枝确定部分样本的分类; 其次,为克服少量样本聚类的不准确性, 该算法

27、 本身具有优化迭代功能, 在已经求得的聚类上再次进行迭代修正剪枝确定部分样 本的聚类, 优化了初始监督学习样本分类不合理的地方; 第三,由于只是针对部 分小样本,这样可以降低总的聚类时间复杂度。K-means算法的缺点是:首先,在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。 很多时候, 事先并不知道给定的数据集应该分成 多少个类别才最合适;其次,在 K-means 算法中,首先需要根据初始聚类中心 来确定一个初始划分, 然后对初始划分进行优化。 这个初始聚类中心的选择对聚 类结果有较大的影响,一旦初始值选择的不好,可能无法得到有效的聚类结果; 最后,该算法需要不断地进行样本分类调整, 不断地计算调整后的新的聚类中心, 因此当数据量非常大时,算法的时间开销是非常大的。K-meams算法的能够保证收敛,但不能保证收敛于全局最优点,当初始中心 点选取不好时, 只能达到局部最优点, 整个聚类的效果也会比较差。 可以采用以 下方法:1)K-means中心点选择彼此距离尽可能远的那些点作为中心点;2)先采用层次进行初步聚类输出 K 个簇,以簇的中心点的作为 K-means的 中心点的输入;3)多次随机选择中心点训练 K-means,选择效果最好的聚类结果。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1