一、GapStatistic概述
GapStatistic是一种确定聚类数量的统计方法,通过比较一组数据在k个聚类情况下的误差平方和,给出最佳的聚类数。
其核心思想是将原始数据集与随机分布数据集进行比较,即对原始数据集中每个维度生成一个符合相同分布的随机数据集,从而得到空隙统计量。在聚类数目选定前后,我们比较实际数据的空隙统计量和期望随机数据的空隙统计量来计算Gap Statistic值。Gap Statistic值最大的位置对应于使分组更优,使得实际观测数据的空隙统计量显著高于基准随机数据集的空隙统计量的k值。
下面我们着重分析GapStatistic在聚类分析中的应用。
二、GapStatistic在聚类分析中的应用
1、GapStatistic在KMeans中的应用
KMeans算法是最常见的聚类算法之一,而GapStatistic可以在KMeans中用于选择最佳聚类数量。
import numpy as np from sklearn.cluster import KMeans from gap_statistic import OptimalK X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) optimalK = OptimalK(n_jobs=4, parallel_backend='joblib') n_clusters = optimalK(X, cluster_array=np.arange(1, 10)) kmeans = KMeans(n_clusters=n_clusters, random_state=0).fit(X) labels = kmeans.labels_
首先我们需要导入相应的库和数据,接着使用OptimalK函数确定最佳聚类数量n_clusters,最后用n_clusters聚类并拟合数据(使用KMeans算法)。
2、GapStatistic在DBSCAN中的应用
DBSCAN也是一种流行的聚类算法,使用GapStatistic可以更加直观地确定最佳的epsilon值和min_samples值。
from sklearn.neighbors import NearestNeighbors from gap_statistic import OptimalDensityKmeans X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) # find k nbrs = NearestNeighbors(n_neighbors=10).fit(X) distances, indices = nbrs.kneighbors(X) my_optimal_cluster = OptimalDensityKmeans(X, indices=indices) k = my_optimal_cluster.n_clusters # cluster points labels = my_optimal_cluster.labels_
首先我们还是需要导入相关的库和数据,接着我们使用NearestNeighbors计算每个数据点到其最近邻的距离,然后使用OptimalDensityKMeans确定最佳簇数k,并且聚类。这里通过indices参数将数据传递给OptimalDensityKMeans。
3、GapStatistic在层次聚类中的应用
层次聚类是一种递归的聚类方法,可以根据距离或相似度将样本分成一组组。GapStatistic可以在层次聚类中用于确定最佳的聚类数量。
from scipy.spatial.distance import pdist, squareform from gap_statistic import OptimalClusters X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) distance_mat = pdist(X, metric='euclidean') distance_mat = squareform(distance_mat) optimal_clusters = OptimalClusters(n_jobs=4) n_clusters = optimal_clusters(distance_mat)
在层次聚类中,我们需要计算样本之间的距离(在这里使用了欧几里得距离),然后将距离矩阵传递给OptimalClusters函数,该函数可以确定最佳聚类数量。
三、总结
今天我们介绍了GapStatistic在聚类分析中的应用,GapStatistic方法可以用于选择最佳聚类数量,同时也可以通过与其他方法相结合,来更好地实现聚类分析的目标。