Пример #1
0
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()]