首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
1.1 为何选择机器学习
1.1.1 机器学习能够解决的问题
1.1.2 熟悉任务和数据
1.2 为何选择Python
1.3 scikit-learn
1.4 必要的库和工具
1.4.1 Jupyter Notebook
1.4.2 NumPy
1.4.3 SciPy
1.4.4 matplotlib
1.4.5 pandas
1.4.6 mglearn
1.5 Python 2 与Python 3 的对比
1.7 第 一个应用:鸢尾花分类
1.7.1 初识数据
1.7.2 衡量模型是否成功:训练数据与测试数据
1.7.3 要事第 一:观察数据
1.7.4 构建第 一个模型:k 近邻算法
1.7.5 做出预测
1.7.6 评估模型
2.1 分类与回归
2.2 泛化、过拟合与欠拟合
2.3 监督学习算法
2.3.1 一些样本数据集
2.3.2 k 近邻
2.3.3 线性模型
2.3.4 朴素贝叶斯分类器
2.3.5 决策树
2.3.6 决策树集成
2.3.7 核支持向量机
2.3.8 神经网络(深度学习)
2.4 分类器的不确定度估计
2.4.1 决策函数
2.4.2 预测概率
2.4.3 多分类问题的不确定度
3.1 无监督学习的类型
3.2 无监督学习的挑战
3.3 预处理与缩放
3.3.1 不同类型的预处理
3.3.2 应用数据变换
3.3.3 对训练数据和测试数据进行相同的缩放
3.3.4 预处理对监督学习的作用
3.4 降维、特征提取与流形学习
3.4.1 主成分分析
3.4.2 非负矩阵分解
3.4.3 用t-SNE 进行流形学习
3.5 聚类
3.5.1 k 均值聚类
3.5.2 凝聚聚类
3.5.3 DBSCAN
3.5.4 聚类算法的对比与评估
3.5.5 聚类方法小结
当前位置:
首页>>
技术小册>>
Python机器学习基础教程(上)
小册名称:Python机器学习基础教程(上)
### 3.5.1 k均值聚类 在Python机器学习的基础教程中,聚类分析作为一种无监督学习方法,占据着举足轻重的地位。它能够在没有标签信息的情况下,将数据集划分为多个组或“簇”,使得同一簇内的数据点相似度高,而不同簇之间的数据点相似度低。在众多聚类算法中,k均值(k-means)聚类因其简单、高效而被广泛应用。本章将深入探讨k均值聚类算法的原理、实现步骤、Python应用实例以及优化策略。 #### 3.5.1.1 k均值聚类算法原理 k均值聚类算法的核心思想是:通过迭代的方式,将数据集中的样本点分配到最近的均值(即聚类中心)所代表的簇中,然后更新每个簇的均值作为新的聚类中心,直到满足某种终止条件(如聚类中心不再发生变化或达到预设的迭代次数)。 1. **选择初始聚类中心**:首先,需要从数据集中随机选择k个样本点作为初始的聚类中心。这些点的选择对最终聚类结果有很大影响,可能导致算法陷入局部最优解。 2. **分配样本到簇**:对于数据集中的每一个样本点,计算其与各个聚类中心的距离(常用欧氏距离),并将其分配到距离最近的聚类中心所属的簇中。 3. **更新聚类中心**:重新计算每个簇内所有样本点的均值,并将该均值作为新的聚类中心。 4. **迭代**:重复步骤2和步骤3,直到聚类中心不再发生变化或达到预设的迭代次数。 #### 3.5.1.2 Python实现k均值聚类 在Python中,`scikit-learn`库提供了非常方便的k均值聚类实现。下面是一个简单的示例,展示了如何使用`scikit-learn`中的`KMeans`类来进行k均值聚类。 ```python from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot as plt # 示例数据集(二维空间中的点) X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0], [4, 5], [0, 2], [0, 4], [2, 2], [2, 3], [3, 3]]) # 指定聚类数k k = 3 # 创建KMeans实例,设置聚类数为k kmeans = KMeans(n_clusters=k, random_state=0).fit(X) # 聚类中心 centers = kmeans.cluster_centers_ # 每个样本的簇标签 labels = kmeans.labels_ # 可视化结果 plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis') plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75); plt.title('K-Means Clustering') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.show() ``` #### 3.5.1.3 初始聚类中心的选择与优化 k均值聚类的一个主要问题是初始聚类中心的选择。不同的初始选择可能导致不同的聚类结果,甚至陷入局部最优解。为了缓解这个问题,可以采用以下几种策略: 1. **多次运行,选择最优解**:通过多次运行k均值算法,每次选择不同的初始聚类中心,然后选择具有最小总内平方和(Within-Cluster Sum of Square, WCSS)的聚类结果作为最终解。 2. **K-Means++**:`scikit-learn`中的`KMeans`类默认使用K-Means++算法来选择初始聚类中心。K-Means++通过考虑样本点之间的距离,使初始聚类中心尽可能分散,从而减少陷入局部最优的风险。 3. **智能初始化方法**:还可以使用更复杂的初始化策略,如基于密度的初始化方法,这些方法通常需要根据具体数据集的特性来设计。 #### 3.5.1.4 聚类数的选择 在实际应用中,聚类数k通常不是已知的,需要通过某种方法来确定。常用的方法包括: 1. **肘部法则**:通过绘制WCSS随k值变化的曲线,选择“肘点”对应的k值作为最优聚类数。肘点是指曲线开始趋于平稳的点,表示增加更多的簇对总内平方和的减少贡献不大。 2. **轮廓系数**:轮廓系数结合了凝聚度和分离度两个指标,用于评估聚类效果的好坏。轮廓系数的值范围在-1到1之间,值越大表示聚类效果越好。通过计算不同k值下的轮廓系数,选择使轮廓系数最大的k值作为最优聚类数。 3. **基于领域知识的选择**:有时,聚类数的选择可以基于对数据集领域的了解。例如,在市场营销中,可能根据产品的不同特性或市场细分策略来预设聚类数。 #### 3.5.1.5 k均值聚类的局限性与优化 尽管k均值聚类算法简单高效,但它也存在一些局限性: - 对初始聚类中心敏感。 - 只能处理数值型数据,对于分类数据需要进行适当的预处理。 - 聚类结果可能受到异常值的影响。 - 需要事先指定聚类数k。 为了优化k均值聚类算法,可以采取以下措施: - 使用更稳健的距离度量或聚类中心更新策略。 - 对数据进行预处理,如标准化或归一化,以减少异常值的影响。 - 结合其他算法(如层次聚类、DBSCAN等)来辅助确定聚类数或处理特殊类型的数据。 #### 3.5.1.6 结论 k均值聚类作为一种基础且广泛使用的聚类算法,在数据分析、图像处理、市场细分等多个领域发挥着重要作用。通过理解其原理、掌握Python实现方法以及了解优化策略,可以有效地利用k均值聚类算法解决实际问题。然而,也应注意到其局限性,并结合具体应用场景和数据特性选择合适的聚类算法和参数。
上一篇:
3.5 聚类
下一篇:
3.5.2 凝聚聚类
该分类下的相关小册推荐:
实战Python网络爬虫
Python合辑3-字符串用法深度总结
Python3网络爬虫开发实战(下)
Python合辑9-判断和循环
Python机器学习基础教程(下)
Python合辑11-闭包函数
Python神经网络入门与实践
Python合辑5-格式化字符串
剑指Python(磨刀不误砍柴工)
Python数据分析与挖掘实战(下)
Python合辑10-函数
Python编程轻松进阶(二)