[五]机器学习之聚类

5.1 实验概要

通过K-Mean,谱聚类,DBSCAN三种算法解决基本的聚类问题,使用sklearn提供的聚类模块和鸢尾花数据集,对聚类效果进行横向比较。

5.2 实验输入描述

数据集:鸢尾花数据集,详情见[机器学习之回归]的Logistic回归实验

5.3 实验步骤

导入数据集:

from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target

为每一个算法创建预测器:

from sklearn import cluster
kMeans = cluster.KMeans(n_clusters = 3)
spectral = cluster.SpectralClustering(n_clusters = 3,eigen_solver = 'arpack')
dbscan = cluster.DBSCAN(eps = 1.0)

其中,n_clusters表示聚类结果的个数,eigen_solver表示谱聚类算法所采用的特征值分解方法,这里选用"arpack";eps表示在基于密度的聚类算法中,属于同一个类的任意两个数据点之间的最大距离。

预测并评价据类:

from sklearn.metrics import *
import time
clustering_names = ['KMeans', 'SpectralClustering','DBSCAN']
clustering_algorithms = [kMeans, spectral, dbscan]
for name,algorithm in zip(clustering_names,clustering_algorithms):
    t0 = time.time()
    algorithm.fit(X)
    t1 = time.time()
    ari = adjusted_rand_score(algorithm.labels_,y)
    homo = homogeneity_score(algorithm.labels_,y)
    compl = completeness_score(algorithm.labels_,y)
    print '%-12s %-12.7f %-10f %-10f %-10f' %(name,t1-t0,ari,homo,compl)

5.4 评价标准

(1)Adjusted Rand Index(ARI)

用来计算两组标签之间的相似性,本实验计算了算法聚类之后得到的标签algorithm.label_与数据集中真实类别标签y之间的相似性。取值范围为-1~1,值越大相似度越高。

(2)Homogeneity(同质性)

对于聚类结果中的每一个聚类,它只包含真实类别中的一个类的数据对象,取值范围为0-1,值越大同质性越高。

(3)Completeness(完整性)

对于真实类别中的一个类的全部数据对象,都被聚类到一个聚类中。取值范围为0-1,值越大完整性越高。

5.5 实验结果及分析

分析可知,DBSCAN聚类速度最快,同质性指标最高,达到了1.0,即,在DBSCAN算法中,聚类出来的每一个聚类都只包含真实类别中的一个类的数据对象,而完整性指标值最低,这是因为DBSCAN算法将低密度区域中的边缘数据对象当作噪声点抛弃,导致完整性不高。

猜你喜欢

转载自blog.csdn.net/gengkui9897/article/details/83050316