k-means算法步骤:
- 1.随机选取k个质心(k值取决于你想聚成几类)
- 2.计算样本到质心的距离,距离质心距离近的归为一类,分为k类
- 3.求出分类后的每类的新质心
- 4.判断新旧质心是否相同,如果相同就代表已经聚类成功,如果没有就循环2-3直到相同
Python实现
from numpy import *
def loadDataSet(fileName):
dataMat=[]
fr=open(fileName)
for line in fr.readlines():
arr=line.strip().split('\t')
#map (回调函数,列表)-》循环列表中的每个值,调用回归函数得到结果,存到map -》 list
l=list(map(float,arr))#float 强制类型转换
dataMat.append(l)
return dataMat
dataMat=loadDataSet('dataset/testSet.txt')
#距离 度量方式:
#1.欧氏距离
def disEuclid(vecA,vecB):
return sqrt(sum(power((vecA-vecB),2)))
#测试
vecA=[1.658985,4.285136]
vecB=[-3.453687,3.424321]
disEuclid(mat(vecA),mat(vecB))
#2.余弦