2026-02-14 11:55:00 +03:00
|
|
|
|
unit MLCoreABC;
|
|
|
|
|
|
|
|
|
|
|
|
interface
|
|
|
|
|
|
|
|
|
|
|
|
uses LinearAlgebraML;
|
|
|
|
|
|
|
|
|
|
|
|
type
|
2026-02-26 22:40:34 +03:00
|
|
|
|
/// Базовый интерфейс шага конвейера машинного обучения.
|
|
|
|
|
|
/// Используется для объединения всех типов шагов
|
|
|
|
|
|
/// (DataFrame-преобразователей, матричных трансформеров и моделей)
|
|
|
|
|
|
/// в единую последовательность выполнения внутри различных Pipeline
|
|
|
|
|
|
IPipelineStep = interface end;
|
|
|
|
|
|
|
|
|
|
|
|
/// Интерфейс шага конвейера, работающего в числовом (матричном) пространстве.
|
|
|
|
|
|
/// Реализуется трансформерами и моделями, которые принимают на вход Matrix и Vector
|
|
|
|
|
|
/// и используются в Matrix-уровне Pipeline
|
2026-03-21 16:30:25 +03:00
|
|
|
|
IMatrixStep = interface(IPipelineStep)
|
|
|
|
|
|
end;
|
2026-02-26 22:40:34 +03:00
|
|
|
|
|
2026-04-04 12:27:49 +03:00
|
|
|
|
/// Интерфейс шага конвейера, работающего на уровне DataFrame.
|
|
|
|
|
|
/// Реализуется препроцессорами, которые выполняют преобразования табличных данных
|
|
|
|
|
|
/// до перехода в числовое (Matrix) представление
|
2026-03-21 16:30:25 +03:00
|
|
|
|
IDataStep = interface(IPipelineStep)
|
|
|
|
|
|
end;
|
2026-02-17 16:18:17 +03:00
|
|
|
|
|
2026-04-04 12:27:49 +03:00
|
|
|
|
/// Интерфейс шага конвейера, привязанного к одной колонке DataFrame.
|
|
|
|
|
|
/// Используется для препроцессоров, выполняющих преобразование конкретной колонки
|
|
|
|
|
|
/// (например, кодирование категориальных признаков).
|
|
|
|
|
|
/// Позволяет DataPipeline централизованно контролировать операции над колонками
|
|
|
|
|
|
/// (в частности, запрещать изменение целевой переменной).
|
|
|
|
|
|
IColumnBoundStep = interface
|
|
|
|
|
|
/// Имя колонки, к которой применяется преобразование.
|
|
|
|
|
|
/// Должно соответствовать существующей колонке DataFrame.
|
|
|
|
|
|
/// Используется для валидации (например, запрет преобразования target).
|
|
|
|
|
|
property ColumnName: string read;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
/// Интерфейс шага конвейера, работающего с несколькими колонками DataFrame.
|
|
|
|
|
|
/// Используется для препроцессоров, выполняющих преобразования над набором колонок
|
|
|
|
|
|
/// (например, заполнение пропусков, масштабирование или кодирование нескольких признаков).
|
|
|
|
|
|
/// Позволяет DataPipeline контролировать операции над колонками
|
|
|
|
|
|
/// (в частности, предотвращать изменение целевой переменной).
|
|
|
|
|
|
IColumnsBoundStep = interface
|
|
|
|
|
|
/// Список колонок, к которым применяется преобразование.
|
|
|
|
|
|
/// Каждое имя должно соответствовать существующей колонке DataFrame.
|
|
|
|
|
|
/// Используется для валидации (например, запрет преобразования target).
|
|
|
|
|
|
property Columns: array of string read;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2026-02-14 11:55:00 +03:00
|
|
|
|
/// Базовый интерфейс модели машинного обучения
|
2026-02-26 22:40:34 +03:00
|
|
|
|
IModel = interface(IMatrixStep)
|
2026-02-17 16:18:17 +03:00
|
|
|
|
function Clone: IModel;
|
2026-03-19 00:02:32 +03:00
|
|
|
|
function Name: string;
|
2026-03-21 16:30:25 +03:00
|
|
|
|
property IsFitted: boolean read;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2026-05-28 23:56:46 +03:00
|
|
|
|
/// Интерфейс модели без учителя.
|
2026-03-08 18:31:35 +03:00
|
|
|
|
/// Наследуется от базового интерфейса IModel.
|
|
|
|
|
|
/// Предназначен для алгоритмов, обучающихся только по признакам X
|
2026-05-28 23:56:46 +03:00
|
|
|
|
/// без использования целевых значений y.
|
2026-03-08 18:31:35 +03:00
|
|
|
|
IUnsupervisedModel = interface(IModel)
|
2026-03-21 16:30:25 +03:00
|
|
|
|
function Fit(X: Matrix): IUnsupervisedModel;
|
2026-03-08 18:31:35 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
2026-05-28 23:56:46 +03:00
|
|
|
|
/// Интерфейс алгоритма кластеризации.
|
2026-03-08 18:31:35 +03:00
|
|
|
|
/// Предназначен для моделей, разбивающих объекты на кластеры
|
2026-04-04 13:55:22 +03:00
|
|
|
|
/// без использования целевой переменной.
|
|
|
|
|
|
/// Основной сценарий использования — FitPredict, возвращающий
|
2026-05-28 23:56:46 +03:00
|
|
|
|
/// номер кластера для каждого объекта обучающей выборки.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// Важно:
|
|
|
|
|
|
/// • номер кластера — это внутренний идентификатор алгоритма;
|
|
|
|
|
|
/// • он не связан с внешними метками классов, как в классификации;
|
|
|
|
|
|
/// • одинаковые по смыслу кластеры в разных запусках могут получить
|
|
|
|
|
|
/// разные номера.
|
2026-03-08 18:31:35 +03:00
|
|
|
|
IClusterer = interface(IUnsupervisedModel)
|
2026-05-28 23:56:46 +03:00
|
|
|
|
/// Выполняет кластеризацию данных и возвращает массив номеров кластеров
|
2026-04-04 13:55:22 +03:00
|
|
|
|
/// (0,1,2,...) для каждого объекта. Значение -1 может использоваться
|
|
|
|
|
|
/// для обозначения шума (например, в DBSCAN).
|
2026-05-28 23:56:46 +03:00
|
|
|
|
///
|
|
|
|
|
|
/// Возвращаемые значения являются внутренними номерами кластеров,
|
|
|
|
|
|
/// а не внешними метками, заданными пользователем.
|
2026-04-04 13:55:22 +03:00
|
|
|
|
function FitPredict(X: Matrix): array of integer;
|
2026-03-08 18:31:35 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
2026-04-04 13:55:22 +03:00
|
|
|
|
/// Интерфейс кластеризатора, поддерживающего предсказание для новых данных.
|
2026-05-28 23:56:46 +03:00
|
|
|
|
/// Используется для алгоритмов, задающих явное отображение X → кластер
|
|
|
|
|
|
/// (например, KMeans через ближайший центр кластера).
|
2026-05-28 10:23:22 +03:00
|
|
|
|
IPredictiveClusterer = interface(IClusterer)
|
2026-05-28 23:56:46 +03:00
|
|
|
|
/// Возвращает номер кластера для каждого объекта из X
|
2026-04-04 13:55:22 +03:00
|
|
|
|
/// без повторного обучения модели.
|
|
|
|
|
|
/// Требует предварительного вызова Fit или FitPredict.
|
2026-05-28 23:56:46 +03:00
|
|
|
|
///
|
|
|
|
|
|
/// Возвращаемые значения являются внутренними номерами кластеров,
|
|
|
|
|
|
/// а не внешними метками классов.
|
2026-05-28 10:23:22 +03:00
|
|
|
|
function Predict(X: Matrix): array of integer;
|
2026-04-04 13:55:22 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
2026-05-28 10:23:22 +03:00
|
|
|
|
/// Интерфейс древовидной модели машинного обучения.
|
|
|
|
|
|
/// Используется для моделей, которые умеют вычислять важность признаков.
|
|
|
|
|
|
ITreeModel = interface(IModel)
|
2026-02-19 22:06:38 +03:00
|
|
|
|
function FeatureImportances: Vector;
|
|
|
|
|
|
end;
|
2026-02-14 11:55:00 +03:00
|
|
|
|
|
|
|
|
|
|
/// Интерфейс классификатора.
|
|
|
|
|
|
/// Наследуется от IModel.
|
2026-05-28 10:23:22 +03:00
|
|
|
|
/// Предназначен для моделей, выполняющих классификацию.
|
|
|
|
|
|
IClassifier = interface(IModel)
|
|
|
|
|
|
/// Обучает модель классификации на матрице признаков X
|
|
|
|
|
|
/// и целевых метках классов y.
|
|
|
|
|
|
function Fit(X: Matrix; y: array of integer): IClassifier;
|
|
|
|
|
|
|
2026-07-01 20:40:56 +03:00
|
|
|
|
/// Возвращает метку класса для одного объекта X
|
|
|
|
|
|
/// в том же виде, в каком метки были поданы модели при обучении.
|
|
|
|
|
|
function PredictOne(X: Vector): integer;
|
|
|
|
|
|
|
2026-05-28 10:23:22 +03:00
|
|
|
|
/// Возвращает метки классов в том же виде, в каком они были поданы модели при обучении.
|
|
|
|
|
|
function Predict(X: Matrix): array of integer;
|
|
|
|
|
|
|
|
|
|
|
|
/// Возвращает исходные строковые метки классов для объектов из X.
|
|
|
|
|
|
function PredictLabels(X: Matrix): array of string;
|
|
|
|
|
|
|
|
|
|
|
|
/// Возвращает строковые метки классов в порядке столбцов матрицы PredictProba.
|
|
|
|
|
|
function GetClassLabels: array of string;
|
|
|
|
|
|
end;
|
2026-05-07 22:53:13 +03:00
|
|
|
|
|
|
|
|
|
|
IClassifierInternal = interface
|
2026-03-31 12:38:47 +03:00
|
|
|
|
procedure SetClassLabels(classes: array of string);
|
2026-02-14 11:55:00 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
/// Интерфейс классификатора, возвращающего вероятности.
|
|
|
|
|
|
/// Расширяет IClassifier.
|
|
|
|
|
|
/// Используется для моделей, которые умеют оценивать
|
|
|
|
|
|
/// вероятность принадлежности к классу.
|
|
|
|
|
|
/// Позволяет получать значения в диапазоне (0, 1)
|
|
|
|
|
|
/// вместо только итогового решения.
|
|
|
|
|
|
IProbabilisticClassifier = interface(IClassifier)
|
2026-07-01 20:40:56 +03:00
|
|
|
|
/// Возвращает вектор вероятностей классов для одного объекта X.
|
|
|
|
|
|
/// Порядок элементов соответствует GetClassLabels.
|
|
|
|
|
|
function PredictProbaOne(X: Vector): Vector;
|
|
|
|
|
|
|
2026-05-25 22:45:41 +03:00
|
|
|
|
/// Возвращает матрицу вероятностей классов для всех объектов из X.
|
|
|
|
|
|
/// Размер результата: nSamples × nClasses, где:
|
|
|
|
|
|
/// - nSamples — число объектов в X;
|
|
|
|
|
|
/// - nClasses — число классов модели.
|
|
|
|
|
|
/// Элемент [i, k] содержит вероятность того, что объект i принадлежит классу k.
|
|
|
|
|
|
/// Сумма вероятностей в каждой строке равна 1.
|
2026-02-19 09:33:09 +03:00
|
|
|
|
function PredictProba(X: Matrix): Matrix;
|
2026-02-14 11:55:00 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
/// Интерфейс регрессионной модели.
|
|
|
|
|
|
/// Наследуется от IModel.
|
|
|
|
|
|
/// Предназначен для моделей, предсказывающих числовые значения.
|
2026-05-28 10:23:22 +03:00
|
|
|
|
IRegressor = interface(IModel)
|
|
|
|
|
|
/// Обучает модель регрессии на матрице признаков X
|
|
|
|
|
|
/// и векторе целевых значений y.
|
|
|
|
|
|
function Fit(X: Matrix; y: Vector): IRegressor;
|
|
|
|
|
|
|
2026-07-01 20:40:56 +03:00
|
|
|
|
/// Возвращает числовое предсказание для одного объекта X.
|
|
|
|
|
|
function PredictOne(X: Vector): real;
|
|
|
|
|
|
|
2026-05-28 10:23:22 +03:00
|
|
|
|
function Predict(X: Matrix): Vector;
|
2026-02-14 11:55:00 +03:00
|
|
|
|
end;
|
2026-02-17 16:18:17 +03:00
|
|
|
|
|
2026-02-14 11:55:00 +03:00
|
|
|
|
/// Базовый интерфейс преобразования признаков.
|
|
|
|
|
|
/// Используется для масштабирования, отбора,
|
2026-03-21 16:30:25 +03:00
|
|
|
|
/// уменьшения размерности и других преобразований данных
|
2026-02-26 22:40:34 +03:00
|
|
|
|
ITransformer = interface(IMatrixStep)
|
2026-02-14 11:55:00 +03:00
|
|
|
|
/// Применяет обученное преобразование к данным.
|
|
|
|
|
|
/// Возвращает новую матрицу признаков.
|
|
|
|
|
|
function Transform(X: Matrix): Matrix;
|
2026-02-17 16:18:17 +03:00
|
|
|
|
function Clone: ITransformer;
|
2026-02-14 11:55:00 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
2026-02-16 14:12:07 +03:00
|
|
|
|
/// Интерфейс преобразования признаков с учётом целевой переменной.
|
|
|
|
|
|
/// Используется для методов отбора признаков и других процедур,
|
2026-03-21 16:30:25 +03:00
|
|
|
|
/// в которых при обучении требуется вектор целевых значений
|
2026-02-16 14:12:07 +03:00
|
|
|
|
ISupervisedTransformer = interface(ITransformer)
|
|
|
|
|
|
/// Обучает преобразование на данных с использованием
|
|
|
|
|
|
/// как признаков X, так и целевой переменной y.
|
2026-03-21 16:30:25 +03:00
|
|
|
|
/// Запоминает необходимые параметры, которые будут использоваться при Transform.
|
|
|
|
|
|
function Fit(X: Matrix; y: Vector): ISupervisedTransformer;
|
2026-05-20 21:25:53 +03:00
|
|
|
|
function FitTransform(X: Matrix; y: Vector): Matrix;
|
2026-03-21 16:30:25 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|
|
/// Интерфейс преобразования признаков без учёта целевой переменной.
|
|
|
|
|
|
/// Используется для методов отбора признаков и других процедур,
|
|
|
|
|
|
/// в которых при обучении не требуется вектор целевых значений
|
|
|
|
|
|
IUnsupervisedTransformer = interface(ITransformer)
|
|
|
|
|
|
/// Обучает преобразование на данных с использованием признаков X
|
|
|
|
|
|
/// Запоминает необходимые параметры, которые будут использоваться при Transform.
|
|
|
|
|
|
function Fit(X: Matrix): IUnsupervisedTransformer;
|
2026-05-20 21:25:53 +03:00
|
|
|
|
function FitTransform(X: Matrix): Matrix;
|
2026-02-16 14:12:07 +03:00
|
|
|
|
end;
|
|
|
|
|
|
|
2026-04-23 16:30:27 +03:00
|
|
|
|
IColumnExpander = interface
|
|
|
|
|
|
function GetExpandedColumns(sourceColumn: string): array of string;
|
|
|
|
|
|
end;
|
|
|
|
|
|
|
2026-02-14 11:55:00 +03:00
|
|
|
|
implementation
|
|
|
|
|
|
|
2026-05-07 22:53:13 +03:00
|
|
|
|
end.
|