Python数据挖掘—聚类—KMeans划分法
概念
- 聚类分析:是按照个体的特征将它们分类,让同一个类别内的个体之间具有较高的相似度,不同类别之间具有较大差异性
- 无分类目标变量(Y)——无监督学习
K-Means划分法、DBSCAN密度法、层次聚类法
1、导入数据
1 import pandas 2 from sklearn.cluster import KMeans 3 from sklearn.decomposition import PCA 4 5 import matplotlib.pyplot as plt 6 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 ]
2、确定特征变量,特征变量之间的相关系数,确定因变量,重新确定特征变量
1 import matplotlib 2 from pandas.tools.plotting import scatter_matrix 3 4 font={ 5 "family":"SimHei"} 6 7 matplotlib.rc("font",**font) 8 matplotlib.rcParams["axes.unicode_minus"]=False 9 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 ]
3、降维、设定质心
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])
4、对图像分类并画图
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=pTarget 11 )
5、不同特征量之间的相关性
1 dMean=pandas.DataFrame(columns=fColumns+["分类"]) 2 data_gb=data[fColumns].groupby(pTarget) 3 4 i=0 5 for g in data_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 in fColumns: 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)
K—mans
k:聚类算法当中的个数
means:均值算法
K-Means:使用均值算法把数据分成K个类的算法
算法目标:
是把n个样本点划分到k个类中,使得每个点都属于离它最近的质心对应的类,以之作为聚类的标准
质心
是指一个类,内部所有样本点的均值
计算步骤
第一步:取得K个初始质心:从数据中随机抽取k个点作为初始聚类的中心,由这个中心代表各个类
第二步:把每个点划分进相应的类:根据欧式距离最小原则,把每个点划分配进距离最近的类中
第三步:重新计算质心:根据均值等方法,重新计算每个类的质心
第四步:迭代计算质心:重复第二步和第三部,迭代计算质心
第五步:聚类完成:聚类中心不再发生移动
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