面试手撕代码-k-means算法

要求:

随机生成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):
    # 

你可能感兴趣的:(python)