Exemplo n.º 1
0
        private (Guid GroupModelId, Guid PriorityModelId, Guid ServiceModelId) GetNewestCaseModels(UserConnection userConnection)
        {
            var caseModels = Get <ICompositeObjectList <ICompositeObject> >("ReadDataUserTask.ResultCompositeObjectList");

            IDictionary <Guid, DateTime> modelsCreationDictionary = caseModels.ToDictionary(
                caseModelInfo => GetValue <Guid>(caseModelInfo, "Id"),
                caseModelInfo => GetValue <DateTime>(caseModelInfo, "CreatedOn")
                );
            IMLModelLoader modelLoader = ClassFactory.Get <IMLModelLoader>();
            var            ids         = modelsCreationDictionary.Keys.ToList();

            if (ids.Count == 0)
            {
                return(Guid.Empty, Guid.Empty, Guid.Empty);
            }
            var caseModelConfigs = modelLoader.LoadEnabledModels(userConnection, modelsCreationDictionary.Keys.ToList());

            var groupModelIds = caseModelConfigs.Where(item => item.PredictedResultColumnName == "GroupId")
                                .Select(item => item.Id);
            Guid groupModelId =
                groupModelIds.OrderByDescending(id => modelsCreationDictionary[id]).FirstOrDefault();

            var priorityModelIds = caseModelConfigs.Where(item => item.PredictedResultColumnName == "PriorityId")
                                   .Select(item => item.Id);
            Guid priorityModelId =
                priorityModelIds.OrderByDescending(id => modelsCreationDictionary[id]).FirstOrDefault();

            var serviceModelIds = caseModelConfigs.Where(item => item.PredictedResultColumnName == "ServiceItemId")
                                  .Select(item => item.Id);
            Guid serviceModelId =
                serviceModelIds.OrderByDescending(id => modelsCreationDictionary[id]).FirstOrDefault();

            return(groupModelId, priorityModelId, serviceModelId);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Sets human-readable localized captions and display values for feature weights.
        /// </summary>
        /// <param name="userConnection">The user connection.</param>
        /// <param name="features">The features.</param>
        /// <param name="modelId">The model identifier.</param>
        /// <param name="isPrediction"><c>true</c> if it's for prediction, false - for training.</param>
        public static void LocalizeFeatures(UserConnection userConnection, List <LocalizedFeatureWeight> features,
                                            Guid modelId, bool isPrediction)
        {
            IMLModelLoader loader = ClassFactory.Get <IMLModelLoader>();

            if (!loader.TryLoadModel(userConnection, modelId, out MLModelConfig model))
            {
                return;
            }
            loader.LoadModelMetadataCaptions(userConnection, model);
            var modelQueryBuilder = ClassFactory.Get <IMLModelQueryBuilder>(
                new ConstructorArgument("userConnection", userConnection));
            var query  = isPrediction ? model.BatchPredictionQuery : model.TrainingSetQuery;
            var select = modelQueryBuilder.BuildSelect(model.EntitySchemaId, query, model.ColumnExpressions);
            IMLMetadataGenerator metadataGenerator = ClassFactory.Get <IMLMetadataGenerator>();
            var metadata = metadataGenerator.GenerateMetadata(select, model.MetaData, fillColumnsInfo: true);
            var columnExpressionMapping = modelQueryBuilder.GetColumnExpressionMapping(model.EntitySchemaId,
                                                                                       query, model.ColumnExpressions);

            FillCaptions(userConnection, features, columnExpressionMapping, model.EntitySchemaId, metadata);
            FillDisplayValues(userConnection, features, columnExpressionMapping, model.EntitySchemaId, metadata);
        }
Exemplo n.º 3
0
        private static List <IGrouping <string, MLModelConfig> > GetModelsGroupedByEntityName(
            UserConnection userConnection)
        {
            IMLModelLoader modelLoader   = ClassFactory.Get <IMLModelLoader>();
            var            schemaManager = userConnection.EntitySchemaManager;
            var            models        = modelLoader.LoadAllModels(userConnection, safe: true)
                                           .Where(item => {
                if (item.PredictedResultColumnName.IsNullOrEmpty())
                {
                    _log.Warn($"PredictedResultColumnName is empty for model {item.Id}{Environment.NewLine}"
                              + $"Metadata: {item.MetaData}{Environment.NewLine}"
                              + $"Entity schemaUid: {item.EntitySchemaId}{Environment.NewLine}");
                    return(false);
                }
                return(true);
            })
                                           .GroupBy(config => {
                var entitySchema = schemaManager.FindInstanceByUId(config.EntitySchemaId);
                return(entitySchema?.Name ?? "unknownSchema");
            })
                                           .ToList();

            return(models);
        }