Scikit-learn 中文教程

第二部分:Scikit-learn 核心基础
第 3 章 Scikit-learn 核心设计与 API 体系
第 4 章 数据集模块与数据划分
第三部分:数据预处理与特征工程
第 5 章 数据预处理核心模块(sklearn.preprocessing)
第 6 章 特征工程:提取、选择与构建
第四部分:模型评估与验证
第 7 章 模型评估指标(按任务类型划分)
第 8 章 模型验证与超参数调优
第五部分:Scikit-learn 核心算法模块
第 9 章 有监督学习:分类算法
第 10 章 有监督学习:回归算法
第 11 章 无监督学习:聚类与密度算法
第 12 章 半监督学习与其他常用算法
第八部分:性能优化与问题解决
第 18 章 Scikit-learn 性能优化
第 19 章 Scikit-learn 常见问题与解决方案

11.1 经典聚类算法

Scikit-learn经典聚类算法教程:K-Means、DBSCAN、层次聚类与GMM

Scikit-learn 中文教程

本教程详细讲解Scikit-learn中的经典聚类算法,包括K-Means聚类、层次聚类、密度聚类DBSCAN和高斯混合模型GMM。内容简单易懂,涵盖k值选择、距离度量等关键参数,适合机器学习新手学习。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

Scikit-learn经典聚类算法详解

聚类是机器学习中的无监督学习方法,用于将数据点分组为相似类别。Scikit-learn提供了多种经典聚类算法,本教程将介绍K-Means、层次聚类、DBSCAN和高斯混合模型(GMM),帮助新人快速上手。

1. K-Means聚类

K-Means是最常用的聚类算法之一,通过迭代分配数据点到最近的质心(簇中心)来形成簇。

关键概念

  • k值选择:确定簇的数量。常见方法包括:
    • 肘部法则:绘制不同k值下的失真(inertia)曲线,选择拐点对应的k值。
    • 轮廓系数:计算每个数据点的轮廓分数,分数越高表示聚类效果越好。
  • 初始质心:质心初始化可能影响结果。Scikit-learn默认使用k-means++方法以改善收敛。

Scikit-learn实现示例

from sklearn.cluster import KMeans
import numpy as np

# 示例数据
X = np.random.rand(100, 2)  # 100个二维数据点

# 使用K-Means
kmeans = KMeans(n_clusters=3, random_state=42)  # 设置k=3
kmeans.fit(X)
labels = kmeans.labels_  # 聚类标签
centroids = kmeans.cluster_centers_  # 质心

2. 层次聚类

层次聚类通过逐步合并或分裂数据点来构建树状结构(树状图),适合探索数据层次关系。

主要类型

  • 凝聚式(Agglomerative):从单个数据点开始,逐步合并最相似的簇。
  • 分裂式(Divisive):从整个数据集开始,逐步分裂为更小的簇。Scikit-learn主要支持凝聚式聚类。

距离度量

  • 在合并簇时,使用不同距离度量如欧氏距离、曼哈顿距离或cosine相似度。Scikit-learn通过linkage参数控制。

Scikit-learn实现示例

from sklearn.cluster import AgglomerativeClustering

# 使用凝聚式层次聚类
agg_clustering = AgglomerativeClustering(n_clusters=3, linkage='ward')  # ward连接基于方差最小化
labels = agg_clustering.fit_predict(X)

3. 密度聚类:DBSCAN

DBSCAN基于数据点的密度分布来发现簇,能自动识别任意形状的簇并有效处理噪声点。

核心思想

  • 核心点:在指定半径(eps)内拥有足够邻居(min_samples)的点。
  • 边界点:在核心点邻域内但本身不满足核心点条件的点。
  • 噪声点:不属于任何簇的点。

优势

  • 无需预先指定簇数量(如K-Means中的k值)。
  • 对噪声鲁棒,适合处理异常值。

Scikit-learn实现示例

from sklearn.cluster import DBSCAN

# 使用DBSCAN
dbscan = DBSCAN(eps=0.3, min_samples=5)  # eps为邻域半径,min_samples为最小邻居数
labels = dbscan.fit_predict(X)

4. 高斯混合模型(GMM)

GMM是一种概率聚类方法,假设数据由多个高斯分布混合生成,适合数据服从高斯分布的场景。

特点

  • 概率分配:每个数据点属于每个簇的概率,而不是硬分配标签。
  • 灵活建模:能捕捉簇的形状和大小差异。

Scikit-learn实现示例

from sklearn.mixture import GaussianMixture

# 使用GMM
gmm = GaussianMixture(n_components=3, random_state=42)  # n_components指定高斯分布数量
gmm.fit(X)
labels = gmm.predict(X)  # 预测簇标签
probabilities = gmm.predict_proba(X)  # 获取概率分布

5. 算法比较与总结

算法 适用场景 优点 缺点
K-Means 数据球形分布,簇大小均匀 简单高效,易于实现 对初始质心敏感,需指定k值
层次聚类 数据层次结构明显 可视化树状图,无需指定k值 计算复杂度高,不适合大数据集
DBSCAN 任意形状簇,噪声数据 抗噪声,自动发现簇数量 对参数eps和min_samples敏感
GMM 数据服从高斯分布 概率模型,能处理软聚类 假设数据高斯分布,可能过拟合

实用建议

  • 对于新手,从K-Means开始,通过肘部法则或轮廓系数选择k值。
  • 探索数据形状时,尝试DBSCAN或层次聚类。
  • 处理概率性数据时,使用GMM。

通过学习这些算法,你可以在Scikit-learn中灵活应用聚类分析来解决实际问题。练习时,建议使用内置数据集(如sklearn.datasets.make_blobs)进行实验。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包