in ridge_sketch.py [0:0]
def sketch_solver(self, A, b):
"""Solver using a subsample sketching matrix"""
if self.solver == "direct":
return self.direct_solver(A.get_matrix(), b)
elif self.solver == "cg":
return self.cg_solver(A, b)
m = A.shape[0]
# Initialize sketching object
sketch_class_name = self.solver.title().replace(" ", "") + "Sketch"
SketchClass = getattr(sketching, sketch_class_name)
sketch_method = SketchClass(A, b, self.sketch_size)
# Initialize weights to 0
w = np.zeros((m, 1))
# Run the iterations of sketch project method until relative residual norm below tol
if self.algo_mode == "accel": # Accelerated option
w = self.iterations_accel_sketch_proj(b, w, sketch_method, m)
elif self.algo_mode == "mom": # Momentum option
w = self.iterations_mom_sketch_proj(b, w, sketch_method, m)
elif self.algo_mode == "auto": # Non-accelerated option, no momentum
w = self.iterations_sketch_proj(b, w, sketch_method, m)
else:
raise ValueError(
"Unsupported algo_mode. It should be 'auto', 'accel' or 'mom'."
)
if self.verbose:
current_residual = self.residual_norms[-1]
if self.iterations != (self.max_iter - 1):
print(
f"Tolerance ({self.tol:.2e}) in {self.iterations:d}"
f" iterations, relative residual norm = {current_residual:.2e}"
)
else:
print(
f"Max iteration ({self.max_iter:d}) reached, "
f"relative residual norm = {current_residual:.2e}"
)
return w