用Python代码分别使用K-means、K-medoids和 DBSCAN 算法对sklearn 中的鸢尾花数据集进 行聚类(聚类数目设置为3),并评估这3种聚类算法的准确率的代码实现
时间: 2024-09-27 09:07:14 浏览: 60
R语言的聚类分析
首先,让我们安装必要的库,如果还没有安装的话:
```bash
pip install scikit-learn numpy pandas matplotlib
```
接下来,我们将分别使用 K-means、K-medoids 和 DBSCAN 进行聚类,并使用 sklearn 的鸢尾花数据集。由于 K-medoids 实现不在 sklearn 内置,我们通常需要使用第三方库如 `scipy` 或 `imblearn`,这里我将使用 `imblearn` 来简化 K-medoids 的实现。
```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
from imblearn.metrics import make_accuracy_scorer
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data[:, :2] # 只选择前两个主成分以便于展示
y = iris.target
# 对比的聚类算法
methods = [
('K-Means', KMeans(n_clusters=3)),
('K-Medoids', make.medoid_clustering(KMedoids(n_clusters=3))),
('DBSCAN', DBSCAN(eps=0.5, min_samples=5)) # 聚类参数调整可能会有所不同
]
# 计算每个方法的预测结果
results = []
for name, method in methods:
method.fit(X)
y_pred = method.predict(X)
results.append((name, y_pred))
# 评估聚类效果
accuracies = []
confusion_matrices = []
for name, pred in results:
acc = accuracy_score(y, pred)
accuracies.append(acc)
cm = confusion_matrix(y, pred, labels=np.arange(3))
print(f"{name} 准确率:{acc:.2f}")
print(f"混淆矩阵:\n{cm}\n")
confusions_matrices.append(cm)
# 结果对比
print("所有方法的准确率比较:")
for i, (method_name, acc) in enumerate(zip(methods, accuracies)):
print(f"{i+1}. {method_name[0]}: {acc*100:.2f}%")
#
阅读全文