分别使用K-means和K-medoids算法对sklearn中的鸢尾花数据集进行聚类(聚类数目设置为3),并评估这两种聚类算法的准确率。K-medoids算法需要使用第三方库scikit-learn-extra
时间: 2024-12-28 11:39:12 浏览: 12
首先,让我们了解K-means和K-medoids算法的区别。K-means是一种基于距离的聚类算法,它将数据分为k个簇,每个簇的质心(均值)由该簇内的所有点确定。而K-medoids算法类似于K-means,但它选择的是每个簇中的“中心”元素(通常是实际的数据点),而非平均值,因此对于非均匀分布的数据更有效。
现在,我们将在Python的sklearn库上使用这两个算法,并利用sklearn_extra库来实现K-medoids。
```python
# 导入所需库
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn_extra.cluster import KMedoids
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y_true = iris.target
# 使用K-means
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
y_pred_km = kmeans.labels_
# 使用K-medoids
km = KMedoids(n_clusters=3)
km.fit(X)
y_pred_km_extra = km.medoids_.tolist()
# 转换medoids索引到真实标签
y_pred_km_extra = [iris.target_names[medoid] for medoid in y_pred_km_extra]
# 计算准确率
accuracy_km = accuracy_score(y_true, y_pred_km)
accuracy_km_extra = accuracy_score(y_true, y_pred_km_extra)
print("K-means 准确率:", accuracy_km)
print("K-medoids (通过额外库) 准确率:", accuracy_km_extra)
```
注意:由于K-medoids在sklearn中并未直接提供,所以我们需要引入第三方库`sklearn_extra`来实现。这个库可能不是所有环境中都预装,所以确保已经安装了。
阅读全文