任务描述
本关实现一个函数来计算各簇的中心。
相关知识
在前一个关卡中,我们实现了一个函数来计算距离每个样本最近的簇中心,这样每一个样本都有了所属的簇团,从而将一堆数据分成了 n 个簇,也就是 n 个类。
K-means 算法是一个迭代优化算法,每次迭代我们需要重新计算簇的中心。一般就是通过计算每个簇类所有样本的平均值来获得。可以使用 Numpy 里面的 mean 方法np.mean(x,0)
来计算均值。
编程任务
本关卡要求你实现函数 estimate_centers,在右侧编辑器 Begin-End 区间补充代码,需要填充的代码块如下:
# -*- coding: utf-8 -*-
import numpy as np
def estimate_centers(X, y_estimated, centers):
"""重新计算各聚类中心
参数:
X - numpy二维数组,代表数据集的样本特征矩阵
y_estimated - numpy数组,估计的各个样本的聚类中心索引
n_clusters - 整数,设定的聚类个数
返回值:
centers - numpy二维数组,各个样本的聚类中心
"""
centers = np.zeros((n_clusters, X.shape[1]))
# 请在此添加实现代码 #
#********** Begin *********#
#********** End ***********#
return centers
测试说明
输入一组向量(数据集)、一个数组(每个元素分配的类中心编号)和一组向量(各聚类中心),输出一组向量(各聚类中心)。平台比对函数 estimate_centers 的输出结果与正确结果的差异,只有完全正确才能进入下一关。
代码:
python
# -*- coding: utf-8 -*-
def estimate_centers(X, y_estimated, n_clusters):
"""重新计算各聚类中心
参数:
X - numpy二维数组,代表数据集的样本特征矩阵
y_estimated - numpy数组,估计的各个样本的聚类中心索引
n_clusters - 整数,设定的聚类个数
返回值:
centers - numpy二维数组,各个样本的聚类中心
"""
import numpy as np
centers = np.zeros((n_clusters, X.shape[1]))
# 请在此添加实现代码 #
#********** Begin *********#
for i in range(n_clusters):
centers[i] = np.mean(X[y_estimated==i], 0)
#********** End ***********#
return centers