一、算法2流程:
1. 根据梯度计算相似性矩阵,相似性用cosine来衡量。
2. 对相似性矩阵进行层次凝聚聚类,cluster之间的距离用ward方式衡量。
3. 根据聚类结果得到新的权重矩阵,(最大的10种类——worker数量最多,权重保持不变)
4. 剩余的类别的权重更新,得到新的权重矩阵distri_cluster作为clients被抽样的概率矩阵,抽样的clients子集的样本作为训练数据集进行训练。
注:此处权重不是模型参数,而是作为clients被抽样的概率权重。
def get_clusters_with_alg2(
linkage_matrix: np.array, n_sampled: int, weights: np.array
):
"""Algorithm 2"""
epsilon = int(10 ** 10)
# associate each client to a cluster
link_matrix_p = deepcopy(linkage_matrix)
augmented_weights = deepcopy(weights)
for i in range(len(link_matrix_p)):
idx_1, idx_2 = int(link_matrix_p[i, 0]), int(link_matrix_p[i, 1])
new_weight = np.array(