Пример #1
0
        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();
        }
Пример #2
0
        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));
            }
        }
Пример #3
0
 public override Dictionary <string, string> GetModelParameters()
 {
     return(SetupParameters.Where(kv => kv.Key.ToLower() != "libfmpath").ToDictionary(kv => kv.Key, kv => kv.Value));
 }