python程序题:分别使用K-means和K-medoids算法对sklearn中的鸢尾花数据集进行聚类(聚类数目设置为3),并评估这两种聚类算法的准确率。
时间: 2024-12-27 18:32:58 浏览: 3
Python中,我们可以使用scikit-learn库中的`KMeans`和`DBSCAN`(K-medoids的一个实现)来对Iris数据集进行聚类。以下是步骤:
首先,确保安装了必要的库:
```bash
pip install numpy pandas scikit-learn matplotlib
```
然后,使用以下代码完成任务:
1. 导入库和数据集:
```python
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.cluster import KMeans, DBSCAN
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
# 加载Iris数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
```
2. 使用K-means聚类:
```python
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
# 预测标签
labels_kmeans = kmeans.labels_
# 计算准确率
accuracy_kmeans = accuracy_score(y, labels_kmeans)
cm_kmeans = confusion_matrix(y, labels_kmeans)
print("K-Means Accuracy:", accuracy_kmeans)
print("Confusion Matrix:\n", cm_kmeans)
```
3. 使用K-medoids(DBSCAN)聚类:
```python
db = DBSCAN(eps=0.5, min_samples=5) # 设置合适的参数
db.fit(X)
# 预测标签
labels_dbscan = db.labels_
# 计算准确率
accuracy_dbscan = accuracy_score(y, labels_dbscan)
cm_dbscan = confusion_matrix(y, labels_dbscan)
print("DBSCAN Accuracy:", accuracy_dbscan)
print("Confusion Matrix:\n", cm_dbscan)
```
注意:K-means算法通常不适用于非凸形状的数据分布,而DBSCAN更适合发现任意形状的集群,所以它的准确率可能会有所不同。
阅读全文