能否提供一个Python代码示例,展示如何使用层次聚类(如Agglomerative Clustering)算法来进行数据聚类?
时间: 2024-10-29 07:09:10 浏览: 41
当然可以。这里是一个简单的Python代码示例,使用`scikit-learn`库中的层次聚类模块`AgglomerativeClustering`进行数据聚类:
```python
# 导入所需库
import numpy as np
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
# 假设我们有一个二维数据集
data = np.random.rand(100, 2) # 创建一个随机生成的数据集
# 定义聚类层数 (n_clusters),这里设置为3
n_clusters = 3
# 实例化AgglomerativeClustering模型
agglom = AgglomerativeClustering(n_clusters=n_clusters)
# 训练模型
clusters = agglom.fit_predict(data)
# 绘制数据点及其所属簇
plt.scatter(data[:, 0], data[:, 1], c=clusters)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Hierarchical Clustering Result')
plt.show()
#
相关问题
能否给出一个使用Python实现的层次聚类(例如Agglomerative Clustering)算法的数据聚类代码示例,并解释相关的评估指标?
当然可以。这里是一个使用scikit-learn库实现层次聚类(Hierarchical Agglomerative Clustering, HAC)的例子:
```python
import numpy as np
import pandas as pd
from sklearn.cluster import AgglomerativeClustering
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import dendrogram, silhouette_score
# 假设我们有一个二维数据集
data = pd.read_csv('your_data.csv')
X = data.values
# 数据预处理:标准化数据(如果需要)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 实现层次聚类
cluster = AgglomerativeClustering(n_clusters=3, affinity='euclidean', linkage='ward')
labels = cluster.fit_predict(X_scaled)
# 绘制 dendrogram 来可视化聚类过程
plt.figure(figsize=(15, 6))
dendrogram(cluster.dendrogram_, labels=data.columns)
plt.title("Hierarchical Clustering Dendrogram")
plt.xlabel("Samples")
plt.ylabel("Distance")
# 计算轮廓系数(Silhouette Score),评估聚类质量
score = silhouette_score(X_scaled, labels)
print(f"Silhouette Score: {score:.3f}")
```
在这个例子中,`n_clusters`设置为3,表示我们将数据分为3个簇。`affinity`参数决定了相似度计算的方式(这里使用欧氏距离),`linkage`参数指定了合并策略(这里是ward方法,倾向于形成均匀大小的簇)。
**评估指标:**
1. **轮廓系数(Silhouette Score)**:它衡量的是样本与其所在簇的紧密度与与其他簇的分离度之间的平衡。范围从-1到1,数值越高,聚类效果越好。当分数接近0时,表示样本可能不属于其所属的簇;负数则表示样本更接近其他簇。
2. **Dendrogram(树状图)**:通过树状图可以直接观察聚类过程中的聚合顺序,帮助理解数据的自然结构。每个节点代表一个簇,从根部开始,随着聚合的进行,节点越来越小直到达到最终的聚类结果。
写一段python代码,要求用近邻传播算法和Ward凝聚层次聚类算法对豆瓣读书数据聚类
以下是使用近邻传播算法和Ward凝聚层次聚类算法对豆瓣读书数据进行聚类的Python代码:
```python
import numpy as np
import pandas as pd
from sklearn.cluster import AffinityPropagation, AgglomerativeClustering
from sklearn.metrics import silhouette_score
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 读取豆瓣读书数据
data = pd.read_csv('douban_books.csv')
# 特征选择,选择评分、评论数、价格三个特征
X = data[['rating', 'comment_num', 'price']]
# 数据标准化
X = (X - X.mean()) / X.std()
# 使用PCA降维,降到2维便于可视化
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
# 近邻传播算法聚类
af = AffinityPropagation(damping=0.6, preference=-5)
af_labels = af.fit_predict(X_pca)
af_silhouette = silhouette_score(X_pca, af_labels)
print("Affinity Propagation Silhouette Score: ", af_silhouette)
# Ward凝聚层次聚类算法聚类
ward = AgglomerativeClustering(n_clusters=3, linkage='ward')
ward_labels = ward.fit_predict(X_pca)
ward_silhouette = silhouette_score(X_pca, ward_labels)
print("Ward Silhouette Score: ", ward_silhouette)
# 将聚类结果可视化
fig, ax = plt.subplots(1, 2, figsize=(12, 6))
ax[0].scatter(X_pca[:, 0], X_pca[:, 1], c=af_labels)
ax[0].set_title('Affinity Propagation Clustering')
ax[1].scatter(X_pca[:, 0], X_pca[:, 1], c=ward_labels)
ax[1].set_title('Ward Agglomerative Clustering')
plt.show()
```
其中,`douban_books.csv`是豆瓣读书数据集,包含书籍的评分、评论数、价格等特征。首先,我们选择评分、评论数、价格三个特征,对数据进行标准化。然后,使用PCA降维到2维便于可视化。接着,使用近邻传播算法和Ward凝聚层次聚类算法对数据进行聚类,并计算聚类的轮廓系数。最后,将聚类结果可视化。
阅读全文