原理
K-means算法是一种无监督的聚类算法,其利用近邻信息来标注类别。
核心思想:由用户指定的k个初始质心,作为聚类的类别,重复一定迭代次数直至收敛。
算法流程
1、从样本集中随机选取k个样本作为初始向量(初始cluster)。
2、对每个样本,计算得到距离其最近的质心,将类别标注为该质心的类。
3、对于每一类,计算新的质心。若质心改变,则更新质心。
停止条件:各类质心均不再发生变化,或达到一定的迭代次数。
优缺点
优点:(1)容易实现。(2)无监督
缺点:(1)聚类的结果时局部最优的,容易受到质心的影响。(2)在大规模的数据集上收敛较慢。(3)K值得选择会影响聚类的结果。
源码如下
import numpy as np
import matplotlib.pyplot as plt
# 加载数据
def loadDataSet(fileName):
data = np.loadtxt(fileName,delimiter='\t')
return data
# 欧氏距离计算
def distEclud(x,y):
return np.sqrt(np.sum((x-y)**2)) # 计算欧氏距离
# 为给定数据集构建一个包含K个随机质心的集合
def randCent(dataSet,k):
m,n = da