k-means聚类的python实现。 k-means 是一种无监督学习技术,尝试将相似的数据点分组到用户指定数量的组中。下面的示例显示了使用 k-means++ 质心初始化算法的 Iris 数据集的聚类进展。
k-means 尝试从一组 N d 维实值向量中识别用户指定的 k(<N) 个簇。该算法通过尝试最小化从簇中心到簇成员的距离平方和来进行。规范算法分三个阶段进行:
该算法的输出是每个数据点的聚类分配以及最终的“失真”级别。该算法不会产生可证明的最优解,并且初始聚类中心可能会导致算法陷入明显次优的局部最优解(请参阅结果部分中的基本 2d 示例)。
许多研究集中在:
k-means++ 不是像上面的步骤 1 那样初始化随机质心,而是概率性地分散初始质心以避免初始配置不佳,算法为:
该技术优先考虑不靠近另一个初始质心的数据点,并使用让人想起遗传算法中经常使用的轮盘赌(或适应度比例)选择的选择策略。
K-Means 在数据挖掘的十大算法中进行了描述;
K-Means 在《信息论、推理和学习算法》中进行了概述,摘录如下;
卡内基梅隆大学的安德鲁摩尔教授在这里有一些很好的笔记;
Edureka 示例,使用犯罪数据
K-Means++,完整论文请点击此处
K-Means聚类算法高效初始化方法的比较研究
SciPy 有 k-means 实现。这项工作的目标是构建一个纯 python 实现以用于学习目的,并帮助其他人学习 k-means 算法。仅具有最少 Python 经验的感兴趣的读者将能够阅读并单步执行此代码,而不会增加 SciPy 等库的复杂性。它绝不是用于生产用途:)
使用 python 解释器运行代码:
python kmeans.py ./resources/<config.cfg>
其中 config.cfg 是纯文本配置文件。配置文件的格式是一个包含以下字段的 python 字典:
{
'data_file' : '\resources\iris.csv',
'data_project_columns' : ['sepal_length','sepal_width','petal_length','petal_width','class'],
'k' : 3,
'cluster_atts' : ['sepal_length','sepal_width','petal_length','petal_width'],
'init_cluster_func' : 'kmeans_plus_plus',
'plot_config' :
{'output_file_prefix' : 'iris',
'plots_configs': [
{'plot_atts' : ['sepal_length','sepal_width']},
{'plot_atts' : ['sepal_length','petal_length']},
{'plot_atts' : ['sepal_length','petal_width']},
{'plot_atts' : ['sepal_width','petal_length']},
{'plot_atts' : ['sepal_width','petal_width']},
{'plot_atts' : ['sepal_width','petal_width']}
]
}
}
您必须指定:
Iris 数据集 (iris.config),来自 Lichman, M. (2013)。 UCI 机器学习存储库。加利福尼亚州欧文市:加利福尼亚大学信息与计算机科学学院,是机器学习社区中非常知名的数据集。以下是我的随机初始聚类的结果:
该数据是出于调试目的而生成的(请参阅 basic2d.config),并说明了初始随机簇选择不当的影响。以下结果展示了初始质心配置,该配置阻止算法达到明显的聚类分配。在这种情况下,红色质心的放置意味着蓝色质心捕获左下象限和右下象限中的所有数据点。
犯罪数据集 (crime.config) 来自 Edureka,此处。