示例#1
0
def test_n_iter_without_progress():
    # Use a dummy negative n_iter_without_progress and check output on stdout
    random_state = check_random_state(0)
    X = random_state.randn(100, 10)
    for method in ["barnes_hut", "exact"]:
        tsne = TSNE(
            n_iter_without_progress=-1,
            verbose=2,
            learning_rate=1e8,
            random_state=0,
            method=method,
            n_iter=351,
            init="random",
        )
        tsne._N_ITER_CHECK = 1
        tsne._EXPLORATION_N_ITER = 0

        old_stdout = sys.stdout
        sys.stdout = StringIO()
        try:
            tsne.fit_transform(X)
        finally:
            out = sys.stdout.getvalue()
            sys.stdout.close()
            sys.stdout = old_stdout

        # The output needs to contain the value of n_iter_without_progress
        assert (
            "did not make any progress during the " "last -1 episodes. Finished." in out
        )
示例#2
0
def boostrap_do_embedding(X, shared_queue=None):
    """
    Boostrap to start doing embedding:
    Initialize the tsne object, setup params
    """
    print("[TSNEX] Thread to do embedding is starting ... ")

    shared_data['queue'] = shared_queue
    shared_data['fixed_ids'] = []
    shared_data['fixed_pos'] = []
    shared_data['errors'] = []
    shared_data['grad_norms'] = []
    shared_data['z_info'] = np.zeros(X.shape[0])

    sklearn.manifold.t_sne._gradient_descent = my_gradient_descent
    tsne = TSNE(
        n_components=2,
        random_state=0,
        init='random',
        method='exact',  # use this method to hook into kl_divergence
        perplexity=30.0,
        early_exaggeration=12.0,
        learning_rate=100.0,
        n_iter_without_progress=500,
        verbose=2)
    tsne._EXPLORATION_N_ITER = 150

    X_projected = tsne.fit_transform(X)
    return X_projected
示例#3
0
def test_bh_match_exact():
    # check that the ``barnes_hut`` method match the exact one when
    # ``angle = 0`` and ``perplexity > n_samples / 3``
    random_state = check_random_state(0)
    n_features = 10
    X = random_state.randn(30, n_features).astype(np.float32)
    X_embeddeds = {}
    n_iter = {}
    for method in ["exact", "barnes_hut"]:
        tsne = TSNE(
            n_components=2,
            method=method,
            learning_rate=1.0,
            init="random",
            random_state=0,
            n_iter=251,
            perplexity=30.0,
            angle=0,
        )
        # Kill the early_exaggeration
        tsne._EXPLORATION_N_ITER = 0
        X_embeddeds[method] = tsne.fit_transform(X)
        n_iter[method] = tsne.n_iter_

    assert n_iter["exact"] == n_iter["barnes_hut"]
    assert_allclose(X_embeddeds["exact"], X_embeddeds["barnes_hut"], rtol=1e-4)
示例#4
0
def main(args):
    data_path = './data/%s.pkl' % args.dataset
    with open(data_path, 'rb') as f:
        X, labels = pickle.load(f)

    tsne = TSNE(n_iter=args.early_iters, verbose=True)
    tsne._EXPLORATION_N_ITER = args.early_iters
    Y_seq = extract_sequence(tsne, X)
    with open('results/res.pkl', 'wb') as f:
        pickle.dump(Y_seq, f)

    if not os.path.exists('figures'):
        os.mkdir('figures')

    lo = Y_seq.min(axis=0).min(axis=0).max()
    hi = Y_seq.max(axis=0).max(axis=0).min()
    limits = ([lo, hi], [lo, hi])
    fig_name = '%s-%d-%d-tsne' % (args.dataset, args.num_iters,
                                  args.early_iters)
    fig_path = './figures/%s.gif' % fig_name
    savegif(Y_seq, labels, fig_name, fig_path, limits=limits)