K均值聚类(K-means)介绍
历史渊源
虽然其思想能够追溯到1957年的Hugo Steinhaus,术语“k-均值”于1967年才被James MacQueen首次使用。标准算法则是在1957年被Stuart Lloyd作为一种脉冲码调制的技术所提出,但直到1982年才被贝尔实验室公开出版。在1965年,E.W.Forgy发表了本质上相同的方法,所以这一算法有时被称为Lloyd-Forgy方法。更高效的版本则被Hartigan and Wong提出(1975/1979)
介绍
K-Means算法是无监督的聚类算法,算法简单,聚类效果好,即使是在巨大的数据集上也非常容易部署实施。正因为如此,它在很多领域都得到的成功的应用,如市场划分、机器视觉、 地质统计学、天文学和农业等。K-Means算法有大量的变体,包括初始化优化K-Means++以及大数据应用背景下的k-means||和Mini Batch K-Means
实现思想及数学公式
实现思想
- K-Means算法的思想很简单,对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。
- 优化目标是:使样本点到聚类中心的距离最小化
数学公式
- 计算样本点到聚类中心的距离:
距离 = (求和(样本点矩阵 - 聚类中心坐标)**2)1/2 - 重新规划聚类中心:
聚类中心坐标 = 所有样本点对应相加 / 样本点个数
KMeans代码实现
import numpy as np
# 数据
X = np.array([[1, 2], [2, 2], [6, 8], [7, 8]])
# 随机初始化的聚类中心
C = np.array([[1.0, 2.0], [2.0, 2.0]])
n = 5
for i in range(n):
# 求每个聚类中心到每个样本的距离
DIS = []
for c in C:
dis = np.sqrt(np.sum((X - c)**2,axis=1))
DIS.append(dis