python数据分类聚类案例_Python数据挖掘—聚类—KMeans划分法

概念

聚类分析:是按照个体的特征将它们分类,让同一个类别内的个体之间具有较高的相似度,不同类别之间具有较大差异性

无分类目标变量(Y)——无监督学习

1341737-20181009075843674-1562899999.png

K-Means划分法、DBSCAN密度法、层次聚类法

1、导入数据

ContractedBlock.gif

ExpandedBlockStart.gif

1 importpandas2 from sklearn.cluster importKMeans3 from sklearn.decomposition importPCA4

5 importmatplotlib.pyplot as plt6

7 f=open("D:\\学习资料\\Python数据挖掘实战课程课件\\7.1\\data.csv",encoding='UTF-8')8 data=pandas.read_csv(f)9

10 fColumns=[11 '工作日上班时电话时长', '工作日下半时电话时长',12 '周末电话时长',13 '国际电话时长', '总电话时长', '平均每次通话时长'

14 ]

View Code

2、确定特征变量,特征变量之间的相关系数,确定因变量,重新确定特征变量

ContractedBlock.gif

ExpandedBlockStart.gif

1 importmatplotlib2 from pandas.tools.plotting importscatter_matrix3

4 font={5 "family":"SimHei"}6

7 matplotlib.rc("font",**font)8 matplotlib.rcParams["axes.unicode_minus"]=False9

10 #%matplotlib qt

11

12 scatter_matrix(13 data[fColumns],14 figsize=(10,10),diagonal="hist")15

16

17 dCorr=data[fColumns].corr()18

19

20 fColumns=[21 '工作日上班时电话时长', '工作日下半时电话时长',22 '周末电话时长',23 '国际电话时长', '平均每次通话时长'

24 ]

View Code

3、降维、设定质心

ContractedBlock.gif

ExpandedBlockStart.gif

1 #降维

2 pca_2=PCA(n_components=2)3 data_pca_2=pandas.DataFrame(4 pca_2.fit_transform(data[fColumns]))5

6 plt.scatter(7 data_pca_2[0],8 data_pca_2[1])9

10

11 kmModel=KMeans(n_clusters=3)12 kmModel=kmModel.fit(data[fColumns])

View Code

4、对图像分类并画图

ContractedBlock.gif

ExpandedBlockStart.gif

1 #对图像进行分类

2 pTarget=kmModel.predict(data[fColumns])3

4 pandas.crosstab(pTarget,pTarget) #看每类别的个数

5

6

7 plt.scatter(8 data_pca_2[0],9 data_pca_2[1],10 c=pTarget11 )

View Code

5、不同特征量之间的相关性

ContractedBlock.gif

ExpandedBlockStart.gif

1 dMean=pandas.DataFrame(columns=fColumns+["分类"])2 data_gb=data[fColumns].groupby(pTarget)3

4 i=05 for g indata_gb.groups:6 print(g)7 rMean=data_gb.get_group(g).mean() #rMean是一个series结构

8 print(rMean)9 rMean["分类"]=g #在最后追加一行

10 dMean=dMean.append(rMean,ignore_index=True) #将series添加在dataframe中

11 subData=data_gb.get_group(g)12 for column infColumns:13 print(column)14 i=i+1

15 p=plt.subplot(3,5,i)16 p.set_title(column)17 p.set_ylabel(str(g)+"分类")18 plt.hist(subData[column],bins=20)

View Code

K—mans

k:聚类算法当中的个数

means:均值算法

K-Means:使用均值算法把数据分成K个类的算法

算法目标:

是把n个样本点划分到k个类中,使得每个点都属于离它最近的质心对应的类,以之作为聚类的标准

质心

是指一个类,内部所有样本点的均值

计算步骤

第一步:取得K个初始质心:从数据中随机抽取k个点作为初始聚类的中心,由这个中心代表各个类

1341737-20181009080456937-1227218434.png

第二步:把每个点划分进相应的类:根据欧式距离最小原则,把每个点划分配进距离最近的类中

1341737-20181009080441853-114315962.png

第三步:重新计算质心:根据均值等方法,重新计算每个类的质心

1341737-20181009080553692-1049302703.png

第四步:迭代计算质心:重复第二步和第三部,迭代计算质心

1341737-20181009080642103-354004662.png

第五步:聚类完成:聚类中心不再发生移动

1341737-20181009080722003-840368363.png

fit_transform是fit和transform的组合。

我们知道fit(x,y)在新手入门的例子中比较多,但是这里的fit_transform(x)的括号中只有一个参数,这是为什么呢?

fit(x,y)传两个参数的是有监督学习的算法,fit(x)传一个参数的是无监督学习的算法,比如降维、特征提取、标准化

然后解释为什么出来fit_transform()这个东西,下面是重点:

fit和transform没有任何关系,仅仅是数据处理的两个不同环节,之所以出来这么个函数名,仅仅是为了写代码方便,

所以会发现transform()和fit_transform()的运行结果是一样的。

注意:运行结果一模一样不代表这两个函数可以互相替换,绝对不可以!!!

transform函数是一定可以替换为fit_transform函数的

fit_transform函数不能替换为transform函数!!!理由解释如下:

sklearn里的封装好的各种算法都要fit、然后调用各种API方法,transform只是其中一个API方法,所以当你调用除transform之外的方法,必须要先fit,为了通用的写代码,还是分开写比较好

也就是说,这个fit相对于transform而言是没有任何意义的,但是相对于整个代码而言,fit是为后续的API函数服务的,所以fit_transform不能改写为transform。

--------------------- 本文来自 陈士林 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/appleyuchi/article/details/73503282?utm_source=copy

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值