public override void Setup() { if (SetupParameters.ContainsKey("dim")) { SetupParameters["dim"] = SetupParameters["dim"].Replace('-', ','); } if (SetupParameters.ContainsKey("regular")) { SetupParameters["regular"] = SetupParameters["regular"].Replace('-', ','); } if (!SetupParameters.ContainsKey("libFmPath")) { SetupParameters["libFmPath"] = "libfm.net.exe"; } LibFmArguments = SetupParameters.Where(kv => kv.Key.ToLower() != "libfmpath") .ToDictionary(kv => "-" + kv.Key, kv => kv.Value) .SelectMany(kv => new string[] { kv.Key, kv.Value }).ToList(); if (!SetupParameters.ContainsKey("save_model")) { LibFmArguments.Add("-save_model train.model"); } // default data type DataType = DataType.Ratings; FeatureBuilder = new FmFeatureBuilder(); }
public override void Setup() { try { // build recommender object Type mmlRecommenderType = Helpers.ResolveType(SetupParameters["ml-class"]); MmlRecommenderInstance = (IRecommender)mmlRecommenderType.GetConstructor(Type.EmptyTypes).Invoke(null); if (typeof(ITimeAwareRatingPredictor).IsAssignableFrom(mmlRecommenderType)) { DataType = DataType.TimeAwareRating; } else if (typeof(IRatingPredictor).IsAssignableFrom(mmlRecommenderType)) { DataType = DataType.Ratings; } else if (typeof(ItemRecommender).IsAssignableFrom(mmlRecommenderType)) { DataType = DataType.PosFeedback; } else { throw new WrapRecException(string.Format("Unknown MmlRecommender class: {0}", SetupParameters["ml-class"])); } // Set properties foreach (var param in SetupParameters.Where(kv => kv.Key != "ml-class" && kv.Key != "numGroups" && kv.Key != "ingoreFeatures")) { PropertyInfo pi = MmlRecommenderInstance.GetType().GetProperty(param.Key); // in case the value of attribute is empty ignore // empty attributes are only used for logging purposes if (string.IsNullOrEmpty(param.Value)) { continue; } object paramVal; if (pi.PropertyType.IsEnum) { paramVal = Enum.Parse(pi.PropertyType, param.Value); } else { paramVal = param.Value; } pi.SetValue(MmlRecommenderInstance, Convert.ChangeType(paramVal, pi.PropertyType)); } } catch (Exception ex) { throw new WrapRecException(string.Format("Cannot resolve MmlRecommender: {0}\n{1}", ex.Message, ex.StackTrace)); } }
public override Dictionary <string, string> GetModelParameters() { return(SetupParameters.Where(kv => kv.Key.ToLower() != "libfmpath").ToDictionary(kv => kv.Key, kv => kv.Value)); }