code: def svd_training(args):
      """
      Train Surprise SVD using the given hyper-parameters
      """
      print("Start training...")
      train_data = pd.read_pickle(
          path=os.path.join(args.datastore, args.train_datapath)
      )
      validation_data = pd.read_pickle(
          path=os.path.join(args.datastore, args.validation_datapath)
      )
  
      svd = surprise.SVD(
          random_state=args.random_state,
          n_epochs=args.epochs,
          verbose=args.verbose,
          biased=args.biased,
          n_factors=args.n_factors,
          init_mean=args.init_mean,
          init_std_dev=args.init_std_dev,
          lr_all=args.lr_all,
          reg_all=args.reg_all,
          lr_bu=args.lr_bu,
          lr_bi=args.lr_bi,
          lr_pu=args.lr_pu,
          lr_qi=args.lr_qi,
          reg_bu=args.reg_bu,
          reg_bi=args.reg_bi,
          reg_pu=args.reg_pu,
          reg_qi=args.reg_qi,
      )
  
      train_set = surprise.Dataset.load_from_df(
          train_data, reader=surprise.Reader(args.surprise_reader)
      ).build_full_trainset()
      svd.fit(train_set)
  
      print("Evaluating...")
  
      rating_metrics = args.rating_metrics
      if len(rating_metrics) > 0:
          predictions = predict(
              svd,
              validation_data,
              usercol=args.usercol,
              itemcol=args.itemcol,
          )
          for metric in rating_metrics:
              result = eval(metric)(validation_data, predictions)
              print(metric, result)
              if HAS_AML:
                  run.log(metric, result)
  
      ranking_metrics = args.ranking_metrics
      if len(ranking_metrics) > 0:
          all_predictions = compute_ranking_predictions(
              svd,
              train_data,
              usercol=args.usercol,
              itemcol=args.itemcol,
              remove_seen=args.remove_seen,
          )
          k = args.k
          for metric in ranking_metrics:
              result = eval(metric)(
                  validation_data,
                  all_predictions,
                  col_prediction="prediction",
                  k=k,
              )
              print("{}@{}".format(metric, k), result)
              if HAS_AML:
                  run.log(metric, result)
  
      if len(ranking_metrics) == 0 and len(rating_metrics) == 0:
          raise ValueError("No metrics were specified.")
  
      return svd
  
file_path: recommenders/examples/04_model_select_and_optimize/train_scripts/svd_training.py
imports: import argparse
  import os
  import pandas
  import surprise
  from recommenders.evaluation.python_evaluation import *
  from recommenders.models.surprise.surprise_utils import predict, compute_ranking_predictions
label_desc: Use image node_id 1 for calling a global function with example usage: svd_training(args) and returns: svd