引自百度~K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。
k均值算法原理:
(1)从n个数据对象任意选择k个对象作为初始聚类中心。
(2)根据每个聚类对象的均值,计算每个对象与这些中心对象的距离,并根据最小距离重新对相应对象进行划分。
(3)重新计算每个聚类的均值。
(4)循环2.3步骤,知道每个聚类不再发生变化为止。
源代码实现:
k_means.py,主要实现k-均值的功能:
#!/usr/bin/python
#coding=utf-8
from numpy import *
import matplotlib.pyplot as plt
#计算欧氏距离
def euclDistance(v1,v2):
#
return sqrt(sum(power(v2 - v1, 2)))
#使用随机样本初始化质心
def initCentroids(dataSet,k):
numSamples, dim = dataSet.shape
centroids = zeros((k, dim))
for i in range(k):
index = int(random.uniform(0, numSamples))
centroids[i, :] = dataSet[index, :]
return centroids
#k-均值聚类
def kmeans(dataSet,k):
numSamples = dataSet.shape[0]
clusterAssment &#