예제 #1
0
        /// <summary>
        ///     Trigger a recommendation build for the given model.
        ///     Note: unless configured otherwise the u2i (user to item/user based) recommendations are enabled too.
        /// </summary>
        public long CreateFbtBuild(string modelId, string buildDescription, bool enableModelInsights,
                                   out string operationLocationHeader)
        {
            // only used if splitter strategy is set to RandomSplitter
            var randomSplitterParameters = new RandomSplitterParameters
            {
                RandomSeed  = 0,
                TestPercent = 10
            };

            var parameters = new FbtBuildParameters
            {
                MinimalScore             = 0,
                SimilarityFunction       = FbtSimilarityFunction.Lift,
                SupportThreshold         = 3,
                MaxItemSetSize           = 2,
                EnableModelingInsights   = enableModelInsights,
                SplitterStrategy         = SplitterStrategy.LastEventSplitter,
                RandomSplitterParameters = randomSplitterParameters
            };

            var requestInfo = new BuildRequestInfo
            {
                BuildType       = BuildType.Fbt,
                BuildParameters = new BuildParameters
                {
                    Fbt = parameters
                },
                Description = buildDescription
            };

            return(BuildModel(modelId, requestInfo, out operationLocationHeader));
        }
예제 #2
0
        /// <summary>
        ///     Submit a model build, with passed build parameters.
        /// </summary>
        /// <param name="modelId">Unique identifier of the model</param>
        /// <param name="buildRequestInfo">Build parameters</param>
        /// <param name="operationLocationHeader">Build operation location</param>
        /// <returns>The build id.</returns>
        public long BuildModel(string modelId, BuildRequestInfo buildRequestInfo, out string operationLocationHeader)
        {
            var uri        = BaseUri + "/models/" + modelId + "/builds";
            var response   = _httpClient.PostAsJsonAsync(uri, buildRequestInfo).Result;
            var jsonString = response.Content.ReadAsStringAsync().Result;

            if (!response.IsSuccessStatusCode)
            {
                throw new Exception(
                          $"Error {response.StatusCode}: Failed to start build for model {modelId}, \n reason {ExtractErrorInfo(response)}");
            }

            operationLocationHeader = response.Headers.GetValues("Operation-Location").FirstOrDefault();
            var buildModelResponse = JsonConvert.DeserializeObject <BuildModelResponse>(jsonString);

            return(buildModelResponse.BuildId);
        }
예제 #3
0
        /// <summary>
        ///     Trigger a recommendation build for the given model.
        ///     Note: unless configured otherwise the u2i (user to item/user based) recommendations are enabled too.
        /// </summary>
        /// <param name="modelId">the model id</param>
        /// <param name="buildDescription">a description for the build</param>
        /// <param name="enableModelInsights">
        ///     true to enable modeling insights, selects "LastEventSplitter" as the splitting
        ///     strategy by default.
        /// </param>
        /// <param name="operationLocationHeader">
        ///     operation location header, can be used to cancel the build operation and to get
        ///     status.
        /// </param>
        /// <returns>Unique indentifier of the build initiated.</returns>
        public long CreateRecommendationsBuild(string modelId,
                                               string buildDescription,
                                               bool enableModelInsights,
                                               out string operationLocationHeader)
        {
            // only used if splitter strategy is set to RandomSplitter
            var randomSplitterParameters = new RandomSplitterParameters
            {
                RandomSeed  = 0,
                TestPercent = 10
            };

            var parameters = new RecommendationBuildParameters
            {
                NumberOfModelIterations  = 10,
                NumberOfModelDimensions  = 20,
                ItemCutOffLowerBound     = 1,
                EnableModelingInsights   = enableModelInsights,
                SplitterStrategy         = SplitterStrategy.LastEventSplitter,
                RandomSplitterParameters = randomSplitterParameters,
                EnableU2I              = true,
                UseFeaturesInModel     = false,
                AllowColdItemPlacement = false
            };

            var requestInfo = new BuildRequestInfo
            {
                BuildType       = BuildType.Recommendation,
                BuildParameters = new BuildParameters
                {
                    Recommendation = parameters
                },
                Description = buildDescription
            };

            return(BuildModel(modelId, requestInfo, out operationLocationHeader));
        }