def bandwidth_kdeCV(X, kde=None, bw=10**np.linspace(-2, 1), cv=1, verbose=True, kernel='gaussian', metric='euclidean', atol=0, leaf_size=40): """ Estimate the bandwidth using cross validation. """ if kde is None: kde = KernelDensity(kernel=kernel, metric=metric, atol=atol, leaf_size=leaf_size) Jh = np.array([]) for i, h in enumerate(bw): kde.bandwidth = h kde.fit(X) log_pdf = kde.score_samples(X) pdf = np.exp(log_pdf) jh_ = cross_val_loss_kdeCV_loo( X, kde, fx=pdf) if cv == 1 else cross_val_loss_kdeCV_kFold( X, kde, fx=pdf, n_splits=cv) Jh = np.append(Jh, jh_) if verbose: print('Completed: {0:.2f} %'.format(100 * (i + 1) / bw.size)) return bw[Jh.argmin()]