(1)聚类的思想:
将数据集划分为若干个不想交的子集(称为一个簇cluster),每个簇潜在地对应于某一个概念。但是每个簇所具有现实意义由使用者自己决定,聚类算法仅仅会进行划分。
(2)聚类的作用:
1)可以作为一个单独的过程,用于寻找数据的一个分布规律
2)作为分类的预处理过程。首先对分类数据进行聚类处理,然后在聚类结果的每一个簇上执行分类过程。
(3)聚类的性能度量:
1)外部指标:该指标是由聚类结果与某个参考模型进行比较而获得的。这些外部指标性能度量的结果都在[0,1]之间,这些值越大,说明聚类的性能越好。
Jaccard系数:它刻画了所有属于同一类的样本对同时在C和C*中隶属于同一类的样本对的概率 JC=a/(a+b+c)
FM指数:它刻画了在C中属于同一类的样本对中,同时属于C*的样本对的比例为p1;在C*中属于同一类的样本对中,同时属于C的样本对比例为p2,FMI 就是p1和p2的几何平均 FMI=sqrt((a/(a+b))*(a/(a+c)))
Rand指数:它刻画的是同时隶属于C,C*的样本对于既不隶属于C,又不隶属于C*的样本对之和占所有样本对的比例 RI=2*(a+d)/(N*(N-1))
ARI指数:对于随机聚类,RI指数不保证接近0。而ARI指数就可通过利用个随机聚类情况下的RI(即E[RI])来解决这个问题。
2)内部指标:该指标直接由考察聚类结果而得到的,并不利用任何参考模型
DB指数:它刻画的是,给定两个簇,每个簇样本之间平均值之和比上两个簇的中心点之间的距离作为作为度量。然后考察该度量对所有簇的平均值。显 然DBI越小越好。如果每个簇样本之间的平均值越小(即簇内样本距离都很近),则DBI越小;如果簇间中心点的距离越大(即簇间样本距离相互越远),则 DBI越小
Dunn指数:它刻画的是任意两个簇之间最近的距离的最小值,除以任意一个簇内距离最远的两个点的距离的最大值。DI越大越好。
(4)距离度量:
1)闵可夫斯基距离
2)VDM距离:它刻画的是属性取值在各簇上的频率分布之间的差异(当属性取值为非数值类时)
通过高斯分布,随机生成聚类簇的样本数据,代码如下:
1 import numpy as np 2 import matplotlib.pyplot as plt 3 from sklearn.datasets.samples_generator import make_blobs 4 from sklearn import cluster 5 from sklearn.metrics import adjusted_rand_score 6 from sklearn import mixture 7 8 def create_data(centers,num=100,std=0.7): 9 X,labels_true=make_blobs(n_samples=num,centers=centers,cluster_std=std) 10 return X,labels_true 11 12 def plot_data(*data): 13 X,labels_true=data 14 labels=np.unique(labels_true) #the diffrent cluster(K numbers) 15 fig=plt.figure() 16 ax=fig.add_subplot(1,1,1) 17 colors=\'rgbyckm\' 18 for i,label in enumerate(labels): 19 position=labels_true==label 20 ax.scatter(X[position,0],X[position,1],label="cluster %d"%label,color=colors[i%len(colors)]) 21 22 ax.legend(loc="best",framealpha=0.5) 23 ax.set_xlabel("X[0]") 24 ax.set_ylabel("Y[1]") 25 ax.set_title("data") 26 plt.show() 27 28 X,labels_true=create_data([[1,1],[2,2],[1,2],[10,20]],1000,0.5) 29 plot_data(X,labels_true)