def test_minibatch_nmf_transform(): # Test that fit_transform is equivalent to fit.transform for MiniBatchNMF # Only guaranteed with fresh restarts rng = np.random.mtrand.RandomState(42) A = np.abs(rng.randn(6, 5)) m = MiniBatchNMF( n_components=3, random_state=0, tol=1e-3, fresh_restarts=True, ) ft = m.fit_transform(A) t = m.transform(A) assert_allclose(ft, t)
# data does not fit into memory. import numpy as np from sklearn.decomposition import MiniBatchNMF rng = np.random.RandomState(0) n_samples, n_features, n_components = 10, 10, 5 true_W = rng.uniform(size=(n_samples, n_components)) true_H = rng.uniform(size=(n_components, n_features)) X = true_W @ true_H nmf = MiniBatchNMF(n_components=n_components, random_state=0) for _ in range(10): nmf.partial_fit(X) W = nmf.transform(X) H = nmf.components_ X_reconstructed = W @ H print( f"relative reconstruction error: ", f"{np.sum((X - X_reconstructed) ** 2) / np.sum(X**2):.5f}", ) # %% # BisectingKMeans: divide and cluster # ----------------------------------- # The new class :class:`cluster.BisectingKMeans` is a variant of :class:`KMeans`, using # divisive hierarchical clustering. Instead of creating all centroids at once, centroids # are picked progressively based on a previous clustering: a cluster is split into two # new clusters repeatedly until the target number of clusters is reached, giving a