Python实现-Kmeans聚类算法
1. Kmeans聚类算法
Kmeans聚类算法: k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心。聚类中心以及分配给它们的对象就代表一个聚类。每分配一个样本,聚类的聚类中心会根据聚类中现有的对象被重新计算。这个过程将不断重复直到满足某个终止条件。来自 百度百科
本人理解: k均值聚类算法(k-means clustering algorithm)即通过随机得到的K个聚类对象作为聚类中心,把每个对象分配给距离它最近的聚类中心。每次迭代聚类求解都是对不同的聚类中心进行聚类分组求解,直到满足某个条件,不在进行迭代。
2. 问题描述
问题描述: 随机生成100个点,分成N类(N),在100个点中随机出N个点作为初始的分类中心点,计算其他点和这N个点之间的距离,将整个点分给距离最近的点.
收敛条件: 计算新的中心点(质心):通过新生成的聚类求取想x,y平均值 。当本次的聚类中心点和上次的聚类中心点距离差小于threshold(限制条件)时,迭代结束。
3. 代码实现
import random
import matplotlib.pyplot as plt
class Kmeans():
def __init__(self, k):
'''
初始化
:param k:代表聚类中心的个数
'''
self.__k = k
self.__data = [] #存放原始数据,初次生成的100个点
self.__pointCenter = [] #存放聚类中心点
self.__result = [] #存放最后的聚类结果
for i in range(k): #默认有5个聚类,即生成[[],[],[],[],[]]
self.__result.append([]) #五个子列表,存放分类的点
pass
pass
def calDistance(self,points1,points2):
'''
欧式距离:sprt((x1-x2)^2+(y1-y2)^2)
:param points1: 一维列表
:param points2: 一维列表
:return: 两个点之间的直线距离
'''
distance=(sum([(x1-x2)**2 for x1,x2 in zip(points1,points2)]))**0.5 #开平方等于乘以1/2次方
return distance
pass
def randomCenter(