赞
踩
目录
Calinski-Harabasz Index(Calinski-Harabasz指数):
这些方法(肘部法则、轮廓系数、Gap Statistic、Calinski-Harabasz Index)都是用于确定聚类算法中的 n_clusters
(簇的数量)参数,但它们之间存在一些区别。下面是它们的主要特点以及适用情况的总结:
肘部法则(Elbow Method):
n_clusters
的关系图,找到“肘部”处的拐点作为最佳 n_clusters
。n_clusters
。轮廓系数(Silhouette Coefficient):
n_clusters
。Gap Statistic(间隙统计量):
n_clusters
。Gap Statistic 值越大,表示聚类效果越好。Calinski-Harabasz Index(Calinski-Harabasz指数):
n_clusters
。Calinski-Harabasz 指数值越大,表示聚类效果越好。在选择适当的方法时,应综合考虑以下因素:
- import matplotlib.pyplot as plt
- from sklearn.datasets import load_iris
- from sklearn.cluster import KMeans
- from sklearn.metrics import silhouette_score
- # 肘部法则(Elbow Method):绘制不同 n_clusters 下的聚类误差平方和(SSE)曲线。
- # 观察 SSE 曲线的形状,找到一个"肘部弯曲点",
- # 即在该点后,SSE 的下降速度变得缓慢。
- # "肘部弯曲点"对应的 n_clusters 值就是一个合适的选择。
- #
- # 例如,在上述代码示例中,使用 plt.plot(k_range, sse, 'bx-') 绘制了 SSE 曲线。观察曲线,如果在某个 n_clusters 值处出现明显弯曲,且在该点之后 SSE 的下降速度变得缓慢,那么该 n_clusters 值可以被认为是一个合适的选择。
-
-
-
- # 加载Iris数据集
- iris = load_iris()
-
- # 构造K-Means聚类模型
- model = KMeans()
-
- # 肘部法则选择n_clusters
- sse = []
- k_range = range(2, 10) # 需要尝试的n_clusters范围
- for k in k_range:
- model.set_params(n_clusters=k)
- model.fit(iris.data)
- sse.append(model.inertia_)
-
- plt.plot(k_range, sse, 'bx-')
- plt.xlabel('Number of Clusters (k)')
- plt.ylabel('SSE')
- plt.title('The Elbow Method')
- plt.show()
-
- # 轮廓系数选择n_clusters
- silhouette_scores = []
- for k in k_range:
- model.set_params(n_clusters=k)
- labels = model.fit_predict(iris.data)
- score = silhouette_score(iris.data, labels)
- silhouette_scores.append(score)
-
- plt.plot(k_range, silhouette_scores, 'bx-')
- plt.xlabel('Number of Clusters (k)')
- plt.ylabel('Silhouette Coefficient')
- plt.title('Silhouette Score')
- plt.show()
-
- import matplotlib.pyplot as plt
- from sklearn.datasets import load_iris
- from sklearn.cluster import KMeans
- from sklearn.metrics import silhouette_score
-
- # 加载Iris数据集
- iris = load_iris()
-
- # 构造K-Means聚类模型
- model = KMeans()
-
- k_range = range(2, 10) # 需要尝试的n_clusters范围
- silhouette_scores = []
- for k in k_range:
- model.set_params(n_clusters=k)
- labels = model.fit_predict(iris.data)
- score = silhouette_score(iris.data, labels)
- silhouette_scores.append(score)
-
- plt.plot(k_range, silhouette_scores, 'bx-')
- plt.xlabel('Number of Clusters (k)')
- plt.ylabel('Silhouette Coefficient')
- plt.title('Silhouette Score')
- plt.show()
- import numpy as np
- import matplotlib.pyplot as plt
- from sklearn.datasets import load_iris
- from sklearn.cluster import KMeans
- from sklearn.metrics import pairwise_distances
- from sklearn.metrics import silhouette_score
- # 选择 Gap Statistic 最大的 n_clusters 值。
- # 加载Iris数据集
- iris = load_iris()
-
- # 构造K-Means聚类模型
- model = KMeans()
-
- k_range = range(2, 10) # 需要尝试的n_clusters范围
- gap_scores = []
- for k in k_range:
- model.set_params(n_clusters=k)
- labels = model.fit_predict(iris.data)
- dist_matrix = pairwise_distances(iris.data)
- gap = np.mean(np.log(np.mean(np.min(dist_matrix[:, labels], axis=1))))
- gap_scores.append(gap)
-
- plt.plot(k_range, gap_scores, 'bx-')
- plt.xlabel('Number of Clusters (k)')
- plt.ylabel('Gap Statistic')
- plt.title('Gap Statistic')
- plt.show()
- import matplotlib.pyplot as plt
- from sklearn.datasets import load_iris
- from sklearn.cluster import KMeans
- from sklearn.metrics import calinski_harabasz_score
- # 选择具有最大 Calinski-Harabasz 指数的 n_clusters 值。
- # 加载Iris数据集
- iris = load_iris()
-
- # 构造K-Means聚类模型
- model = KMeans()
-
- k_range = range(2, 10) # 需要尝试的n_clusters范围
- calinski_scores = []
- for k in k_range:
- model.set_params(n_clusters=k)
- labels = model.fit_predict(iris.data)
- score = calinski_harabasz_score(iris.data, labels)
- calinski_scores.append(score)
-
- plt.plot(k_range, calinski_scores, 'bx-')
- plt.xlabel('Number of Clusters (k)')
- plt.ylabel('Calinski-Harabasz Index')
- plt.title('Calinski-Harabasz Index')
- plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。