python聚类实例分析

发布时间:2021-12-17 17:14:17 作者:iii
来源:亿速云 阅读:315
# 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()

python聚类实例分析

四、K-Means聚类实现

1. 肘部法则确定K值

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()

2. 聚类结果可视化

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 = 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

八、实战建议

  1. 数据预处理

    • 标准化/归一化处理
    • 高维数据考虑PCA降维
  2. 参数调优技巧

    • K-Means:结合肘部法则和轮廓系数
    • DBSCAN:通过k-距离图确定eps参数
  3. 结果验证

    • 使用多种评估指标(轮廓系数、Calinski-Harabasz指数等)
    • 业务角度验证分群合理性

九、扩展应用场景

  1. 电商用户行为分群
  2. 新闻文本主题聚类
  3. 医学图像分割
  4. 异常检测(将稀疏区域识别为异常)

完整代码获取:GitHub仓库链接 “`

注:实际使用时需要: 1. 替换placeholder图片链接 2. 根据具体数据调整参数 3. 补充实际运行结果截图 4. 扩展案例分析部分可增加具体业务场景说明

推荐阅读:
  1. Scikit-learn文本聚类实例分析
  2. python实现canopy聚类的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:如何用Carlifornium实现使用PSK算法的DTLS协议

下一篇:如何进行springboot配置templates直接访问的实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》