写出python代码:对鸢尾花数据集进行K 均值聚类 (K=3),并分别从外部指标(同质性、完全性、V-measure、调整的rand 指数)和内部指标 (SSE、DBI、轮廓系数) 等方面分析聚类的效果。
时间: 2025-02-02 10:11:06 浏览: 44
好的,我可以为您提供一个使用Python对鸢尾花数据集进行K均值聚类并分析聚类效果的代码示例。以下是具体的实现步骤:
```python
import numpy as np
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.metrics import homogeneity_score, completeness_score, v_measure_score, adjusted_rand_score, silhouette_score
from sklearn.metrics import davies_bouldin_score
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
# 设置K值并进行K均值聚类
k = 3
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X)
labels = kmeans.labels_
# 计算外部指标
homogeneity = homogeneity_score(iris.target, labels)
completeness = completeness_score(iris.target, labels)
v_measure = v_measure_score(iris.target, labels)
adjusted_rand = adjusted_rand_score(iris.target, labels)
# 计算内部指标
sse = kmeans.inertia_
db_index = davies_bouldin_score(X, labels)
silhouette = silhouette_score(X, labels)
# 打印结果
print(f"K均值聚类结果 (K={k}):")
print(f"同质性: {homogeneity:.4f}")
print(f"完全性: {completeness:.4f}")
print(f"V-measure: {v_measure:.4f}")
print(f"调整的rand指数: {adjusted_rand:.4f}")
print(f"SSE: {sse:.4f}")
print(f"DBI: {db_index:.4f}")
print(f"轮廓系数: {silhouette:.4f}")
```
这段代码首先导入了所需的库,然后加载了鸢尾花数据集。我们设置了K值为3,并使用KMeans类进行聚类。之后,我们计算了外部指标(同质性、完全性、V-measure、调整的rand指数)和内部指标(SSE、DBI、轮廓系数)。
最后,代码打印出了所有计算出的指标值。这些指标可以帮助我们评估聚类的效果:
1. 同质性: 衡量每个簇是否只包含单个类的成员。
2. 完全性: 衡量给定类的所有成员是否被分配到同一个簇。
3. V-measure: 同质性和完全性的调和平均。
4. 调整的rand指数: 衡量聚类结果与真实标签的一致性。
5. SSE (误差平方和): 衡量簇内样本与质心的距离。
6. DBI (Davies-Bouldin指数): 评估簇之间的分离程度和簇内的紧凑程度。
7. 轮廓系数: 评估聚类的密度和分离情况。
通过这些指标,我们可以全面地评估K均值聚类的效果。通常情况下,我们希望同质性、完全性、V-measure和调整的rand指数越高越好,而SSE、DBI则越低越好。轮廓系数越接近1,聚类效果越好。
阅读全文