def power_iteration(m, iterations, v0): v = CuckooVector({}) v.add(v0) for i in range(iterations): v = m.mult_vec(v) mu = v.norm(2) v.scale(1.0/mu) return mu,v
def power_iteration_mmt(m, iterations, v0): v = CuckooVector({}) v.add(v0) for i in range(iterations): vp = CuckooVector({}) for c in m: vp.add_scale(c, c.dot(v)) mu = vp.norm(2) vp.scale(1.0/mu) v = vp return mu,v
def svm_primal_sgd(X, Y, lam, T): w = CuckooVector({}) x = CuckooVector({}) m = len(Y) for t in range(T): step = 1 / (lam * (t+1)) i = np.random.randint(m) y = Y[i] x.reset(X[i]) w.scale(1 - step * lam) if y * w.dot(x) < 1: w.add_scale(x, step * y) return w
def pegasos(lam): w = CuckooVector({}) wx = 0 t = 0 # while True: # example = yield (w,wx) # if example == None: break # x,y = example for xy in (yield (w, wx)): x, y = xy print(x) print(y) step = 1 / (lam * (t + 1)) w.scale(1 - step * lam) wx = w.dot(x) if y * wx < 1: w.add_scale(x, step * y) t = t + 1
def power_iteration_4(Y, X, U, S, iterations, v0): v = CuckooVector({}) v.add(v0) for i in range(iterations): v1 = CuckooVector({}) for (x,y) in zip(X,Y): v1.add_scale_dict(x, v.dot_dict(y)) v2 = CuckooVector({}) for (x,y) in zip(X,Y): v2.add_scale_dict(y, v1.dot_dict(x)) for (u,s) in zip(U,S): print(-s * u.dot(v)) v2.add_scale(u, -s * u.dot(v)) mu = v2.norm(2) v2.scale(1.0/mu) v = v2 return mu,v