编写一个Python程序。 层次聚类算法、K-means、K-medoids算法、DBSCAN算法 对鸢尾花数据集 进行聚类 k=3 聚类结果可视化+模型评价 对比出哪个算法效果好
时间: 2024-09-27 07:06:52 浏览: 44
要编写一个Python程序来比较层次聚类(Hierarchical Clustering)、K-means、K-medoids和DBSCAN这四种聚类算法在鸢尾花数据集上进行k=3的聚类,并结合可视化和模型评价,首先你需要安装必要的库如`scikit-learn`, `matplotlib`, 和 `seaborn`。以下是代码的一个简略示例:
```python
# 导入所需的库
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.cluster import (
AgglomerativeClustering,
KMeans,
KMedoids,
DBSCAN,
)
from sklearn.metrics import silhouette_score, calinski_harabasz_score
import matplotlib.pyplot as plt
import seaborn as sns
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 设置k值为3
k = 3
# 定义各种聚类算法
algorithms = {
"层次聚类": AgglomerativeClustering(n_clusters=k),
"K-means": KMeans(n_clusters=k),
"K-medoids": KMedoids(n_clusters=k),
"DBSCAN": DBSCAN(eps=0.5, min_samples=5), # 示例设置,实际需要调整参数
}
# 对每个算法进行聚类
cluster_results = {}
for name, algorithm in algorithms.items():
algorithm.fit(X)
cluster_labels = algorithm.labels_
cluster_results[name] = {
'labels': cluster_labels,
'metrics': {
'Silhouette Score': silhouette_score(X, cluster_labels),
'Calinski-Harabasz Score': calinski_harabasz_score(X, cluster_labels),
}
}
# 可视化聚类结果
sns.pairplot(pd.DataFrame(X, columns=iris.feature_names), hue=cluster_results['层次聚类']['labels'])
plt.show()
# 模型评价
results_df = pd.DataFrame.from_dict(cluster_results, orient='index')
print(results_df[['metrics.Silhouette Score', 'metrics.Calinski-Harabasz Score']])
# 结论 - 通常,评价指标较高的算法效果较好,但要根据具体场景选择最合适的算法
best_algorithm = results_df.sort_values(by='metrics.Silhouette Score', ascending=False).iloc[0].name
print(f"根据Silhouette Score,{best_algorithm} 算法的效果最好.")
```
阅读全文