Source code for aijack.collaborative.fedmd.nfdp
import math
[docs]def get_epsilon_of_fedmd_nfdp(n, k, replacement=True):
"""Return epsilon of FedMD-NFDP
Args:
n (int): training set size
k (int): sampling size
replacement (bool, optional): sampling w/o replacement. Defaults to True.
Returns:
float: epsilon of FedMD-NFDP
"""
if replacement:
return k * math.log((n + 1) / n)
else:
return math.log((n + 1) / (n + 1 - k))
[docs]def get_delta_of_fedmd_nfdp(n, k, replacement=True):
"""Return delta of FedMD-NFDP
Args:
n (int): training set size
k (int): sampling size
replacement (bool, optional): sampling w/o replacement. Defaults to True.
Returns:
float: delta of FedMD-NFDP
"""
if replacement:
return 1 - ((n - 1) / n) ** k
else:
return k / n
[docs]def get_k_of_fedmd_nfdp(epsilon, n, replacement=True):
"""Return k of FedMD-NFDP
Args:
epsilon (float): epsilon
n (int): training set size
replacement (bool, optional): sampling w/o replacement. Defaults to True.
Returns:
int: k
"""
if replacement:
return int(epsilon / math.log((n + 1) / n))
else:
return int((n + 1) * (1 - 1 / math.exp(epsilon)))