要求:
随机生成x,y均在[0,10]范围内的10个点,k=2,训练一个简单的k-means模型。
K均值算法步骤如下:
1.在训练样本点中随机初始化[0,10]范围内的k个样本点作为k个簇各自的中心;
2.遍历一遍所有样本点,将每一个样本点分配到最近的簇中心,得到clusterDict。clusterDict的键为centroidList的下标,键值为属于该类的所有样本点。
3.计算第一次聚类迭代得到的结果的代价函数,即每一个样本点到其簇中心的距离的平方和newVar。令oldVar = -1
4.开始迭代,直到代价函数收敛(newVar-oldVar<=0.00001):
*对于计算每一类样本的均值,作为新的簇中心
*遍历一遍所有样本点,将每一个样本点分配到最近的簇中心。
import numpy as np
import matplotlib.pyplot as plt
def getCentroids(clusterDict):
# 得到k个质心
centroidList = []
for key in clusterDict.keys():
centroid = np.mean(clusterDict[key], axis=0) # 计算每列的均值,即找到质心
centroidList.append(centroid)
return np.array(centroidList).tolist()
def getVar(clusterDict,centroidList):
#