INNER CODE UNIT · Python
prepare_LDS_weights
timeseriesAI/tsai · tsai/callback/core.py:183
def prepare_LDS_weights(labels, n_bins=None, label_range=None, reweight='inv', lds_kernel='gaussian', lds_ks=9, lds_sigma=1,
max_rel_weight=None, show_plot=True):
assert reweight in {'inv', 'sqrt_inv'}
labels_shape = labels.shape
if n_bins is None:
labels = labels.astype(int)
n_bins = np.max(labels) - np.min(labels)
num_per_label, bin_edges = np.histogram(labels, bins=n_bins, range=label_range)
new_labels = np.searchsorted(bin_edges, labels, side='left')
new_labels[new_labels == 0] = 1
if reweight == 'sqrt_inv':
num_per_label = np.sqrt(num_per_label)
lds_kernel_window = get_lds_kernel_window(lds_kernel=lds_kernel, lds_ks=lds_ks, lds_sigma=lds_sigma)
smoothed_value = convolve1d(num_per_label, weights=lds_kernel_window, mode='constant')
if show_plot:
plt.bar(bin_edges[:-1], num_per_label / num_per_label.sum(), width=(bin_edges[1]-bin_edges[0]), color='lime', edgecolor='black', label='original')
plt.plot(bin_edges[:-1], smoothed_value / smoothed_value.sum(), color='red', label='smoothed')