Связать настоящий именованный вход X с новой точкой

Учебные задачи

Сначала обучается собственная модель на шести точках, затем подключается отдельный источник двух новых точек и выполняется прогноз.

Где и как запускать

Сервер своего учебного общего модуля; только шесть обучающих и две новые точки в памяти.

Подготовка

  1. Свой серверный общий модуль учебной обработки. Основной блок без заголовка — тело процедуры ВыполнитьПример() Экспорт, все дополнительные функции / процедуры разместите отдельно на верхнем уровне того же модуля.

  2. Источник создаётся только в памяти: Код Строка, X и Y Число; две группы собственных точек около (0,0) и (10,10). Новые точки A / B не подменяют обучающие шесть строк.

  3. Серверный анализ не требует объектов конфигурации. Клиентские директивы у дополнительных функций отсутствуют намеренно; не смешивайте их с клиентским уроком дендрограммы.

Модель = СвояМодельПрогнозаТочек();
НастройкаX = Модель.НастройкаВходныхКолонок.X;
НастройкаX.КолонкаИсточникаДанных = Модель.Колонки.Найти("X", ТипКолонкиМоделиПрогноза.КолонкаИсточникаДанных);
Сообщить("Именованный вход модели: " + НастройкаX.КолонкаМоделиПрогноза.Имя);
Сообщить("Его источник: " + НастройкаX.КолонкаИсточникаДанных.Имя);
Прогноз = Модель.Выполнить();
Для Каждого Точка Из Прогноз Цикл
    Для Каждого Колонка Из Прогноз.Колонки Цикл
        Сообщить(Колонка.Имя + ": " + Строка(Точка[Колонка.Имя]));
    КонецЦикла;
КонецЦикла;
Тот же модуль: реальные шесть обучающих точек
Функция УчебныеТочкиДерева()
    Точки = Новый ТаблицаЗначений;
    Точки.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Точки.Колонки.Добавить("X", Новый ОписаниеТипов("Число"));
    Точки.Колонки.Добавить("Y", Новый ОписаниеТипов("Число"));
    Для Индекс = 0 По 5 Цикл
        Точка = Точки.Добавить();
        Точка.Код = "Учебная точка " + Строка(Индекс + 1);
        База = ?(Индекс < 3, 0, 10);
        Точка.X = База + ?(Индекс % 3 = 2, 1, 0);
        Точка.Y = База + ?(Индекс % 3 = 1, 1, 0);
    КонецЦикла;
    Возврат Точки;
КонецФункции
Тот же модуль: получить реальный параметр анализа
Функция ПараметрУчебногоДерева(Параметры, Русское, Английское)
    Параметр = Параметры.Найти(Русское);
    Если Параметр = Неопределено Тогда
        Параметр = Параметры.Найти(Английское);
    КонецЕсли;
    Если Параметр = Неопределено Тогда
        ВызватьИсключение "Не найден параметр анализа: " + Русское;
    КонецЕсли;
    Возврат Параметр;
КонецФункции
Тот же модуль: отдельные две новые точки
Функция СвоиНовыеТочкиПрогноза()
    Точки = УчебныеТочкиДерева().СкопироватьКолонки();
    Первая = Точки.Добавить();
    Первая.Код = "Новая учебная точка A";
    Первая.X = 0.2;
    Первая.Y = 0.1;
    Вторая = Точки.Добавить();
    Вторая.Код = "Новая учебная точка B";
    Вторая.X = 10.2;
    Вторая.Y = 10.1;
    Возврат Точки;
КонецФункции
Тот же модуль: обучение и привязка входов модели
Функция СвояМодельПрогнозаТочек()
    Анализатор = Новый АнализДанных;
    Анализатор.ТипАнализа = Тип("АнализДанныхКластеризация");
    Анализатор.ИсточникДанных = УчебныеТочкиДерева();
    Колонки = Анализатор.НастройкаКолонок;
    Колонки.Найти("Код").ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Ключ;
    Колонки.Найти("Код").ВидДанных = ВидДанныхАнализа.Дискретные;
    Для Каждого Имя Из СтрРазделить("X,Y", ",") Цикл
        Колонки.Найти(Имя).ТипКолонки = ТипКолонкиАнализаДанныхКластеризация.Входная;
        Колонки.Найти(Имя).ВидДанных = ВидДанныхАнализа.Непрерывные;
    КонецЦикла;
    ЧислоКластеров = ПараметрУчебногоДерева(Анализатор.Параметры, "КоличествоКластеров", "ClusterCount");
    ЧислоКластеров.Значение = 2;
    Метод = ПараметрУчебногоДерева(Анализатор.Параметры, "МетодКластеризации", "ClusterizationMethod");
    Метод.Значение = МетодКластеризации.ДальняяСвязь;
    Результат = Анализатор.Выполнить();
    Модель = Результат.СоздатьМодельПрогноза();
    Модель.ИсточникДанных = СвоиНовыеТочкиПрогноза();
    Для Каждого Имя Из СтрРазделить("X,Y", ",") Цикл
        Вход = Модель.НастройкаВходныхКолонок.Найти(Имя);
        Вход.КолонкаМоделиПрогноза = Модель.Колонки.Найти(Имя, ТипКолонкиМоделиПрогноза.Входная);
        Вход.КолонкаИсточникаДанных = Модель.Колонки.Найти(Имя, ТипКолонкиМоделиПрогноза.КолонкаИсточникаДанных);
    КонецЦикла;
    НастроитьСвойВыходПрогноза(Модель);
    Возврат Модель;
КонецФункции
Тот же модуль: настоящие исходные и прогнозируемые выходные колонки
Процедура НастроитьСвойВыходПрогноза(Модель)
    Модель.КолонкиРезультата.Очистить();
    Для Каждого Колонка Из Модель.Колонки Цикл
        Если Колонка.ТипКолонки <> ТипКолонкиМоделиПрогноза.Входная Тогда
            Выход = Модель.КолонкиРезультата.Добавить(Колонка);
            Выход.Имя = Колонка.Имя;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Разбор по шагам

  1. Подготовьте полный собственный модуль из приведённых блоков.

  2. Обучите модель, назначьте отдельный источник и два соответствия входов.

  3. Выполните прогноз и прочитайте реальные выходные поля.

Как проверить результат

  1. Входная — признак обученной модели, КолонкаИсточникаДанных — поле новых точек, Прогнозируемая — вычисляемый моделью результат. Совпадающее имя X не делает эти описания одним и тем же объектом.

  2. Динамическое свойство НастройкаВходныхКолонок.X readonly как ссылка на настройку; её КолонкаИсточникаДанных доступна для записи и действительно используется следующим Выполнить.

  3. Номер / идентификатор кластера не является обещанной меткой 1 / 2. Проверяйте принадлежность близких точек, а не конкретную нумерацию. BSL и анализ при сборке HTML не выполнялись.

Ожидаемый результат

Есть полный собственный источник именованных свойств и фактическое применение соответствий в прогнозе.

На что обратить внимание

  1. Не создавайте НастройкаВходныхКолонокМоделиПрогноза фиктивным конструктором и не выбирайте колонку X без её обязательного типа во втором аргументе Найти.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.