Exemple #1
0
        public ProcessConfiguration GetConfiguration(PipelineContext context)
        {
            var pc = new ProcessConfiguration();

            pc["Recommender"] = _recommender.GetType().Name;
            pc["TrainFile"]   = context.GetAsString("TrainFile");
            pc["TestFile"]    = context.GetAsString("TestFile");

            return(pc);
        }
Exemple #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));
            }
        }
Exemple #3
0
        /// <summary>Sets a property of a MyMediaLite recommender</summary>
        /// <param name="recommender">An <see cref="IRecommender"/></param>
        /// <param name="key">the name of the property (case insensitive)</param>
        /// <param name="val">the string representation of the value</param>
        public static void SetProperty(IRecommender recommender, string key, string val)
        {
            Type type           = recommender.GetType();
            var  property_names = new List <string>();

            foreach (var p in type.GetProperties())
            {
                property_names.Add(p.Name);
            }
            property_names.Sort();

            key = NormalizeName(key);
            foreach (string property_name in property_names)
            {
                if (NormalizeName(property_name).StartsWith(key))
                {
                    var property = type.GetProperty(property_name);

                    if (property.GetSetMethod() == null)
                    {
                        throw new ArgumentException(string.Format("Parameter '{0}' has no setter", key));
                    }

                    switch (property.PropertyType.ToString())
                    {
                    case "System.Double":
                        property.GetSetMethod().Invoke(recommender, new Object[] { double.Parse(val, CultureInfo.InvariantCulture) });
                        break;

                    case "System.Single":
                        property.GetSetMethod().Invoke(recommender, new Object[] { float.Parse(val, CultureInfo.InvariantCulture) });
                        break;

                    case "System.Int32":
                        property.GetSetMethod().Invoke(recommender, new Object[] { int.Parse(val) });
                        break;

                    case "System.UInt32":
                        property.GetSetMethod().Invoke(recommender, new Object[] { uint.Parse(val) });
                        break;

                    case "System.Boolean":
                        property.GetSetMethod().Invoke(recommender, new Object[] { bool.Parse(val) });
                        break;

                    default:
                        throw new ArgumentException(string.Format("Parameter '{0}' has unknown type '{1}'", key, property.PropertyType));
                    }
                }
            }
        }