k-平均算法源于信号处理中的一种向量量化方法,现在更多作为一种聚类分析方法流行于数据挖掘领域。
聚类是一种无监督学习,它将相似的对象归到同一个簇中。簇内的对象越相似,聚类的效果越好。聚类与分类最大的不同在于,分类的目标事先已知,聚类则不一样。
k-均值是发现给定数据集的k个簇的算法。簇个数k是用户给定的,每个簇通过其质心,即簇中所有点的中心来描述。
目的
把n个点划分到k个聚类中,使得每个点都属于离他最近的均值(即聚类中心)对应的聚类,以此作为聚类的标准。
算法过程
- 从N个数据文档随机选取k个数据文档作为质心;
- 对剩余的每个数据文档测量其到每个质心的距离,并把它归到最近的质心的类;
- 重新计算已经得到的每个类的质心;
- 迭代2-3步直至新的质心与原质心相等或小于指定阀值。
程序过程
数据预处理,导入数据做成矩阵。distEclud方法计算两个向量之间的距离。
from numpy import *
def loadDataSet(fileName):
dataMat = []
fr = open(fileName)
for line in fr.readlines():
curLine = line.strip().split('\t')
fltLine = map(float, curLine)
dataMat.append(fltLine)
return dataMat
def distEclud(vecA, vecB):