def crowding_distance(models, *attrs):
"""
Assumes models in lexicographical sorted.
"""
get_fit = _get_fit(models, attrs)
f = np.array(sorted([get_fit(m) for m in models]))
scale = np.max(f, axis=0) - np.min(f, axis=0)
with np.errstate(invalid="ignore"):
dist = np.sum(abs(np.roll(f, 1, axis=0) - np.roll(f, -1, axis=0) ) / scale, axis=1)
dist[0] = np.infty
dist[-1] = np.infty
return dist
评论列表
文章目录