您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python聚类实例分析
聚类分析是机器学习中重要的无监督学习方法,广泛应用于客户分群、异常检测、图像分割等领域。本文将通过Python实现三种典型聚类算法(K-Means、DBSCAN、层次聚类),结合真实数据集演示完整分析流程。
## 一、聚类算法概述
### 1. K-Means算法
- **原理**:通过迭代将样本划分为K个球形簇
- 优点:计算效率高,适合大规模数据
- 缺点:需要预设K值,对异常值敏感
### 2. DBSCAN算法
- **原理**:基于密度发现任意形状的簇
- 优点:自动确定簇数量,抗噪声
- 缺点:对参数敏感,高维数据效果下降
### 3. 层次聚类
- **原理**:通过树状图进行层次分解/聚合
- 优点:可视化直观,无需预设簇数
- 缺点:计算复杂度高(O(n³))
## 二、实验环境准备
```python
# 基础库导入
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import datasets
# 聚类算法
from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
from sklearn.metrics import silhouette_score
# 数据预处理
from sklearn.preprocessing import StandardScaler
使用经典的鸢尾花数据集:
iris = datasets.load_iris()
X = iris.data[:, :2] # 仅使用前两个特征便于可视化
y = iris.target
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 可视化原始数据
plt.scatter(X[:,0], X[:,1], c=y)
plt.title('Original Iris Data')
plt.show()
inertias = []
for k in range(1, 6):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_scaled)
inertias.append(kmeans.inertia_)
plt.plot(range(1,6), inertias, marker='o')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()
kmeans = KMeans(n_clusters=3, random_state=42)
clusters = kmeans.fit_predict(X_scaled)
plt.scatter(X[:,0], X[:,1], c=clusters, cmap='viridis')
plt.scatter(kmeans.cluster_centers_[:,0],
kmeans.cluster_centers_[:,1],
s=200, marker='X', c='red')
plt.title('K-Means Clustering Results')
dbscan = DBSCAN(eps=0.5, min_samples=5)
clusters = dbscan.fit_predict(X_scaled)
# 可视化(-1表示噪声点)
plt.scatter(X[:,0], X[:,1], c=clusters, cmap='viridis')
plt.title(f'DBSCAN Clustering (Found {len(set(clusters))-1} clusters)')
agg = AgglomerativeClustering(n_clusters=3, linkage='ward')
clusters = agg.fit_predict(X_scaled)
# 树状图绘制
from scipy.cluster.hierarchy import dendrogram, linkage
Z = linkage(X_scaled, 'ward')
dendrogram(Z)
plt.title('Hierarchical Clustering Dendrogram')
plt.show()
使用轮廓系数进行评估:
methods = {
'K-Means': KMeans(n_clusters=3),
'DBSCAN': DBSCAN(eps=0.5),
'Hierarchical': AgglomerativeClustering(n_clusters=3)
}
for name, method in methods.items():
clusters = method.fit_predict(X_scaled)
if len(set(clusters)) > 1: # 排除单簇情况
score = silhouette_score(X_scaled, clusters)
print(f"{name}: {score:.3f}")
输出结果示例:
K-Means: 0.598
DBSCAN: 0.486
Hierarchical: 0.554
数据预处理:
参数调优技巧:
结果验证:
完整代码获取:GitHub仓库链接 “`
注:实际使用时需要: 1. 替换placeholder图片链接 2. 根据具体数据调整参数 3. 补充实际运行结果截图 4. 扩展案例分析部分可增加具体业务场景说明
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。