GMatrixFactorization* GRecommenderLib::InstantiateMatrixFactorization(GArgReader& args) { if(args.size() < 1) throw Ex("The number of intrinsic dims must be specified for this algorithm"); size_t intrinsicDims = args.pop_uint(); GMatrixFactorization* pModel = new GMatrixFactorization(intrinsicDims); while(args.next_is_flag()) { if(args.if_pop("-regularize")) pModel->setRegularizer(args.pop_double()); else if(args.if_pop("-miniters")) pModel->setMinIters(args.pop_uint()); else if(args.if_pop("-decayrate")) pModel->setDecayRate(args.pop_double()); else if(args.if_pop("-nonneg")) pModel->nonNegative(); else if(args.if_pop("-clampusers")) { GMatrix tmp; tmp.loadArff(args.pop_string()); size_t offset = args.pop_uint(); pModel->clampUsers(tmp, offset); } else if(args.if_pop("-clampitems")) { GMatrix tmp; tmp.loadArff(args.pop_string()); size_t offset = args.pop_uint(); pModel->clampItems(tmp, offset); } else throw Ex("Invalid option: ", args.peek()); } return pModel; }
GMatrixFactorization* InstantiateMatrixFactorization(GRand& rand, GArgReader& args) { if(args.size() < 1) ThrowError("The number of intrinsic dims must be specified for this algorithm"); size_t intrinsicDims = args.pop_uint(); GMatrixFactorization* pModel = new GMatrixFactorization(intrinsicDims, rand); while(args.next_is_flag()) { if(args.if_pop("-regularize")) pModel->setRegularizer(args.pop_double()); else ThrowError("Invalid option: ", args.peek()); } return pModel; }