分别使用k-means、k medoids和DBSCAN算法对Sklearn中的鸢尾花数据集进行聚类(聚类数目设置为3),并评估这3种聚类算法的准确率。
时间: 2024-10-23 08:12:39 浏览: 27
首先,让我们了解这三种聚类算法:
1. **K-means**:这是一种基于距离的迭代算法,通过不断调整质心(中心点)使得每个样本点与其所属的簇中心的距离最小。它需要预先设定聚类的数量k。
2. **K-medoids (PAM)**:类似于K-means,但它选择的是每个簇内的代表样本(medoid),而非质心。这种方法对于离群值更鲁棒,因为它考虑了簇内所有样本。
3. **DBSCAN**:是一种密度聚类算法,不需要指定聚类数量。它将高密度区域视为一个簇,并能自动发现任意形状的簇和噪声点。
为了对sklearn的鸢尾花数据集进行聚类,我们可以按照以下步骤操作:
```python
from sklearn import datasets
from sklearn.cluster import KMeans, DBSCAN, MiniBatchKMeans, OPTICS
from sklearn.metrics import accuracy_score, confusion_matrix
# 加载数据
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 使用K-means
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
y_pred_kmeans = kmeans.labels_
accuracy_kmeans = accuracy_score(y, y_pred_kmeans)
# 使用K-medoids
k_medoids = MiniBatchKMedoids(n_clusters=3)
k_medoids.fit(X)
y_pred_kmedoids = k_medoids.labels_
accuracy_kmedoids = accuracy_score(y, y_pred_kmedoids)
# 使用DBSCAN
dbSCAN = DBSCAN(eps=0.5, min_samples=10) # 调整超参数可能影响结果
dbSCAN.fit(X)
y_pred_dbscan = dbSCAN.labels_
accuracy_dbscan = accuracy_score(y, y_pred_dbscan)
# 由于DBSCAN无需预先指定聚类数,这里我们可能需要找到最佳的核心半径(epsilon)和邻域大小(min_samples)
# 可使用 elbow method 或 silhouette score 来确定合适的参数
confusion_matrices = {
'K-Means': confusion_matrix(y, y_pred_kmeans),
'K-Medoids': confusion_matrix(y, y_pred_kmedoids),
'DBSCAN': confusion_matrix(y, y_pred_dbscan)
}
print(f"Accuracy for K-Means: {accuracy_kmeans}")
print(f"Accuracy for K-Medoids: {accuracy_kmedoids}")
print(f"Accuracy for DBSCAN: {accuracy_dbscan}")
#
阅读全文