KMeans介绍
最基础的,常用的机器学习算法
k均值聚类算法是一种迭代求解的聚类分析算法。
聚类是无监督学习,将相似的对象归到一簇中,簇的对象越相似,效果越好。
优点
原理简单,容易实现
缺点
需要对K值进行指定,对初始的中心点选取较为敏感,初始的中心点影响了分类的结果
算法推导
本例子采用欧式距离算法,即两点之间的直线距离
用户需要对k值进行指定,k代表簇的个数
传入需要处理的数据,数据可以是任意维度的,个数可以是不确定的
对传入的数据随机选取k个作为中心点
遍历数据,把每个数据与中心点进行计算,把它归类为与之距离最近的点
计算每一类点的平均值,算出新的中心点
计算新的中心点与旧的中心点的平均距离,看平均距离是否符合误差范围,
符合就输出结果,不符合,就继续遍历
代码实现
import random
import copy
import matplotlib.pyplot as plt
class KMeans():
def __init__(self,data,k=1):
self.__data = data # 存放输入点数据
self.__k = k # 中心点个数
self.__centerPoint = [] # 中心点
self.__result = [] # 对输入点进行分类的结果
for i in range(k):
self.__result.append([]) #[[] [] [] [] [] ]
# 随机取k个中心点
def randomCenterPoint(self):
for i in range(self.__k):
# 随机出k个下标
index = random.randint(0,len(self.__data)-1)
# 判断取出的数是否在中心点中 防止取重复数 使中心点重复
if self.__data[