Сначала обучается собственная модель на шести точках, затем подключается отдельный источник двух новых точек и выполняется прогноз.
Где и как запускать
Сервер своего учебного общего модуля; только шесть обучающих и две новые точки в памяти.
Подготовка
Свой серверный общий модуль учебной обработки. Основной блок без заголовка — тело процедуры ВыполнитьПример() Экспорт, все дополнительные функции / процедуры разместите отдельно на верхнем уровне того же модуля.
Источник создаётся только в памяти: Код Строка, X и Y Число; две группы собственных точек около (0,0) и (10,10). Новые точки A / B не подменяют обучающие шесть строк.
Серверный анализ не требует объектов конфигурации. Клиентские директивы у дополнительных функций отсутствуют намеренно; не смешивайте их с клиентским уроком дендрограммы.
Модель = СвояМодельПрогнозаТочек();
Настройка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", ",") Цикл
Вход = Модель.НастройкаВходныхКолонок.Найти(Имя);
Вход.КолонкаМоделиПрогноза = Модель.Колонки.Найти(Имя, ТипКолонкиМоделиПрогноза.Входная);
Вход.КолонкаИсточникаДанных = Модель.Колонки.Найти(Имя, ТипКолонкиМоделиПрогноза.КолонкаИсточникаДанных);
КонецЦикла;
НастроитьСвойВыходПрогноза(Модель);
Возврат Модель;
КонецФункцииТот же модуль: настоящие исходные и прогнозируемые выходные колонки
Процедура НастроитьСвойВыходПрогноза(Модель)
Модель.КолонкиРезультата.Очистить();
Для Каждого Колонка Из Модель.Колонки Цикл
Если Колонка.ТипКолонки <> ТипКолонкиМоделиПрогноза.Входная Тогда
Выход = Модель.КолонкиРезультата.Добавить(Колонка);
Выход.Имя = Колонка.Имя;
КонецЕсли;
КонецЦикла;
КонецПроцедурыРазбор по шагам
Подготовьте полный собственный модуль из приведённых блоков.
Обучите модель, назначьте отдельный источник и два соответствия входов.
Выполните прогноз и прочитайте реальные выходные поля.
Как проверить результат
Входная — признак обученной модели, КолонкаИсточникаДанных — поле новых точек, Прогнозируемая — вычисляемый моделью результат. Совпадающее имя X не делает эти описания одним и тем же объектом.
Динамическое свойство НастройкаВходныхКолонок.X readonly как ссылка на настройку; её КолонкаИсточникаДанных доступна для записи и действительно используется следующим Выполнить.
Номер / идентификатор кластера не является обещанной меткой 1 / 2. Проверяйте принадлежность близких точек, а не конкретную нумерацию. BSL и анализ при сборке HTML не выполнялись.
Ожидаемый результат
Есть полный собственный источник именованных свойств и фактическое применение соответствий в прогнозе.
На что обратить внимание
Не создавайте НастройкаВходныхКолонокМоделиПрогноза фиктивным конструктором и не выбирайте колонку X без её обязательного типа во втором аргументе Найти.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.