def compute_bench(samples_range, features_range, q=3, rank=50): it = 0 results = defaultdict(lambda: []) max_it = len(samples_range) * len(features_range) for n_samples in samples_range: for n_features in features_range: it += 1 print '====================' print 'Iteration %03d of %03d' % (it, max_it) print '====================' X = make_low_rank_matrix(n_samples, n_features, effective_rank=rank, tail_strength=0.2) gc.collect() print "benching scipy svd: " tstart = time() svd(X, full_matrices=False) results['scipy svd'].append(time() - tstart) gc.collect() print "benching scikit-learn fast_svd: q=0" tstart = time() fast_svd(X, rank, q=0) results['scikit-learn fast_svd (q=0)'].append(time() - tstart) gc.collect() print "benching scikit-learn fast_svd: q=%d " % q tstart = time() fast_svd(X, rank, q=q) results['scikit-learn fast_svd (q=%d)' % q].append(time() - tstart) return results
def compute_bench(samples_range, features_range, rank=50, tolerance=1e-7): it = 0 timeset = defaultdict(lambda: []) err = defaultdict(lambda: []) max_it = len(samples_range) * len(features_range) for n_samples in samples_range: for n_features in features_range: it += 1 print '====================' print 'Iteration %03d of %03d' % (it, max_it) print '====================' X = np.abs(make_low_rank_matrix(n_samples, n_features, effective_rank=rank, tail_strength=0.2)) gc.collect() print "benching nndsvd-nmf: " tstart = time() m = NMF(n_components=30, tol=tolerance, init='nndsvd').fit(X) tend = time() - tstart timeset['nndsvd-nmf'].append(tend) err['nndsvd-nmf'].append(m.reconstruction_err_) print m.reconstruction_err_, tend gc.collect() print "benching nndsvda-nmf: " tstart = time() m = NMF(n_components=30, init='nndsvda', tol=tolerance).fit(X) tend = time() - tstart timeset['nndsvda-nmf'].append(tend) err['nndsvda-nmf'].append(m.reconstruction_err_) print m.reconstruction_err_, tend gc.collect() print "benching nndsvdar-nmf: " tstart = time() m = NMF(n_components=30, init='nndsvdar', tol=tolerance).fit(X) tend = time() - tstart timeset['nndsvdar-nmf'].append(tend) err['nndsvdar-nmf'].append(m.reconstruction_err_) print m.reconstruction_err_, tend gc.collect() print "benching random-nmf" tstart = time() m = NMF(n_components=30, init=None, max_iter=1000, tol=tolerance).fit(X) tend = time() - tstart timeset['random-nmf'].append(tend) err['random-nmf'].append(m.reconstruction_err_) print m.reconstruction_err_, tend gc.collect() print "benching alt-random-nmf" tstart = time() W, H = alt_nnmf(X, r=30, R=None, tol=tolerance) tend = time() - tstart timeset['alt-random-nmf'].append(tend) err['alt-random-nmf'].append(np.linalg.norm(X - np.dot(W, H))) print np.linalg.norm(X - np.dot(W, H)), tend return timeset, err