2026-04-22 14:08:27 +03:00
|
|
|
|
/// Основной модуль библиотеки машинного обучения.
|
|
|
|
|
|
/// Объединяет модели, метрики, валидацию и вспомогательные компоненты.
|
|
|
|
|
|
unit MLABC;
|
|
|
|
|
|
|
|
|
|
|
|
// =============================================================
|
2026-04-14 13:23:08 +03:00
|
|
|
|
// СТАТИСТИЧЕСКАЯ ПОЛИТИКА БИБЛИОТЕКИ ML PascalABC.NET
|
|
|
|
|
|
//
|
|
|
|
|
|
// В библиотеке используются следующие соглашения:
|
|
|
|
|
|
//
|
|
|
|
|
|
// 1. DataFrame (описательная статистика):
|
|
|
|
|
|
// • дисперсия вычисляется с делением на (n - 1)
|
|
|
|
|
|
//
|
|
|
|
|
|
// 2. LinearAlgebra и ML:
|
|
|
|
|
|
// • дисперсия вычисляется с делением на n
|
|
|
|
|
|
//
|
|
|
|
|
|
// 3. PCA:
|
|
|
|
|
|
// • ковариационная матрица вычисляется с делением на (n - 1)
|
|
|
|
|
|
//
|
|
|
|
|
|
// Это соответствует распространённой практике:
|
|
|
|
|
|
// • описательная статистика — выборочная дисперсия
|
|
|
|
|
|
// • алгоритмы ML — дисперсия генеральной совокупности
|
|
|
|
|
|
// =============================================================
|
|
|
|
|
|
|
2026-04-22 14:08:27 +03:00
|
|
|
|
// =============================================================
|
2026-05-28 23:56:46 +03:00
|
|
|
|
// КОНВЕЙЕРЫ
|
2026-04-22 14:08:27 +03:00
|
|
|
|
//
|
2026-05-28 23:56:46 +03:00
|
|
|
|
// Табличные:
|
2026-04-22 14:08:27 +03:00
|
|
|
|
// DataPipeline
|
2026-05-28 23:56:46 +03:00
|
|
|
|
// ClassificationDataPipeline
|
|
|
|
|
|
// RegressionDataPipeline
|
|
|
|
|
|
// ClusteringDataPipeline
|
2026-04-22 14:08:27 +03:00
|
|
|
|
//
|
2026-05-28 23:56:46 +03:00
|
|
|
|
// Матричные:
|
2026-04-22 14:08:27 +03:00
|
|
|
|
// MatrixPipeline
|
2026-05-28 10:23:22 +03:00
|
|
|
|
// ClassificationMatrixPipeline
|
|
|
|
|
|
// RegressionMatrixPipeline
|
|
|
|
|
|
// ClusteringMatrixPipeline
|
2026-04-22 14:08:27 +03:00
|
|
|
|
//
|
2026-05-28 10:23:22 +03:00
|
|
|
|
// DataPipeline и MatrixPipeline используются как фасады
|
|
|
|
|
|
// для построения специализированных конвейеров.
|
2026-04-22 14:08:27 +03:00
|
|
|
|
// =============================================================
|
2026-02-14 11:55:00 +03:00
|
|
|
|
|
2026-05-28 23:56:46 +03:00
|
|
|
|
// =============================================================
|
|
|
|
|
|
// ПОЛИТИКА PREDICT
|
|
|
|
|
|
//
|
|
|
|
|
|
// 1. Классификация:
|
2026-05-30 19:26:43 +03:00
|
|
|
|
// • Для матричных моделей Predict возвращает метки классов
|
|
|
|
|
|
// в том виде, в каком они были поданы модели при обучении.
|
|
|
|
|
|
//
|
|
|
|
|
|
// • ClassificationMatrixPipeline следует той же политике:
|
|
|
|
|
|
// Predict возвращает метки классов в том виде,
|
|
|
|
|
|
// в каком они были поданы вложенной модели при обучении.
|
|
|
|
|
|
//
|
|
|
|
|
|
// • ClassificationDataPipeline работает с DataFrame, где целевой столбец
|
|
|
|
|
|
// часто является строковым. Поэтому внутри pipeline целевой столбец
|
|
|
|
|
|
// кодируется в целые числа, и Predict возвращает именно эти коды.
|
|
|
|
|
|
//
|
2026-05-28 23:56:46 +03:00
|
|
|
|
// • PredictLabels возвращает строковые метки классов.
|
|
|
|
|
|
//
|
2026-05-30 19:26:43 +03:00
|
|
|
|
// • Таким образом, различие естественно:
|
|
|
|
|
|
// матричные модели и ClassificationMatrixPipeline возвращают метки
|
|
|
|
|
|
// из пространства обучения модели, а ClassificationDataPipeline
|
|
|
|
|
|
// возвращает коды, построенные при кодировании целевого столбца.
|
|
|
|
|
|
//
|
2026-05-28 23:56:46 +03:00
|
|
|
|
// 2. Регрессия:
|
|
|
|
|
|
// • Predict возвращает вектор числовых предсказаний.
|
|
|
|
|
|
//
|
|
|
|
|
|
// 3. Кластеризация:
|
|
|
|
|
|
// • Predict и FitPredict возвращают номера кластеров.
|
|
|
|
|
|
// =============================================================
|
|
|
|
|
|
|
2026-02-14 11:55:00 +03:00
|
|
|
|
interface
|
|
|
|
|
|
|
|
|
|
|
|
uses LinearAlgebraML;
|
|
|
|
|
|
uses ValidationML;
|
2026-02-26 22:40:34 +03:00
|
|
|
|
uses MLCoreABC;
|
2026-02-14 11:55:00 +03:00
|
|
|
|
uses MLModelsABC;
|
|
|
|
|
|
uses MetricsABC;
|
|
|
|
|
|
uses PreprocessorABC;
|
2026-02-17 19:59:28 +03:00
|
|
|
|
uses DataFrameABC;
|
2026-03-19 00:02:32 +03:00
|
|
|
|
uses DataFrameABCCore;
|
2026-02-17 19:59:28 +03:00
|
|
|
|
uses MLExceptions;
|
2026-02-21 13:34:18 +03:00
|
|
|
|
uses InspectionML;
|
2026-02-26 22:40:34 +03:00
|
|
|
|
uses MLPipelineABC;
|
2026-03-08 22:25:12 +03:00
|
|
|
|
uses MLDatasets;
|
2026-03-11 10:50:15 +03:00
|
|
|
|
uses DataAdapters;
|
2026-04-06 23:04:46 +03:00
|
|
|
|
uses MLUtilsABC;
|
2026-02-14 11:55:00 +03:00
|
|
|
|
|
|
|
|
|
|
type
|
|
|
|
|
|
Vector = LinearAlgebraML.Vector;
|
|
|
|
|
|
Matrix = LinearAlgebraML.Matrix;
|
2026-02-26 22:40:34 +03:00
|
|
|
|
|
2026-02-14 11:55:00 +03:00
|
|
|
|
Validation = ValidationML.Validation;
|
2026-05-07 22:53:13 +03:00
|
|
|
|
GridSearch = ValidationML.GridSearch;
|
2026-02-26 22:40:34 +03:00
|
|
|
|
|
2026-02-14 11:55:00 +03:00
|
|
|
|
Metrics = MetricsABC.Metrics;
|
2026-03-24 14:26:08 +03:00
|
|
|
|
ClassificationMetrics = MetricsABC.ClassificationMetrics;
|
|
|
|
|
|
RegressionMetrics = MetricsABC.RegressionMetrics;
|
|
|
|
|
|
ClusteringMetrics = MetricsABC.ClusteringMetrics;
|
|
|
|
|
|
ConfusionMatrix = MetricsABC.ConfusionMatrix;
|
2026-02-26 22:40:34 +03:00
|
|
|
|
|
|
|
|
|
|
DataPipeline = MLPipelineABC.DataPipeline;
|
2026-05-28 23:56:46 +03:00
|
|
|
|
ClassificationDataPipeline = MLPipelineABC.ClassificationDataPipeline;
|
|
|
|
|
|
RegressionDataPipeline = MLPipelineABC.RegressionDataPipeline;
|
|
|
|
|
|
ClusteringDataPipeline = MLPipelineABC.ClusteringDataPipeline;
|
2026-02-26 22:40:34 +03:00
|
|
|
|
|
2026-02-14 11:55:00 +03:00
|
|
|
|
DataFrame = DataFrameABC.DataFrame;
|
2026-03-19 00:02:32 +03:00
|
|
|
|
DataFrameCursor = DataFrameABCCore.DataFrameCursor;
|
2026-06-19 22:06:08 +03:00
|
|
|
|
DataValue = DataFrameABCCore.DataValue;
|
2026-05-07 22:53:13 +03:00
|
|
|
|
ColumnType = DataFrameABCCore.ColumnType;
|
2026-05-20 21:25:53 +03:00
|
|
|
|
Column = DataFrameABCCore.Column;
|
2026-06-19 22:06:08 +03:00
|
|
|
|
DatePartKind = DataFrameABC.DatePartKind;
|
2026-03-19 00:02:32 +03:00
|
|
|
|
|
2026-02-14 11:55:00 +03:00
|
|
|
|
Statistics = DataFrameABC.Statistics;
|
|
|
|
|
|
CsvLoader = DataFrameABC.CsvLoader;
|
2026-03-19 00:02:32 +03:00
|
|
|
|
JoinKind = DataFrameABC.JoinKind;
|
2026-04-01 06:33:26 +03:00
|
|
|
|
GroupView = DataFrameABC.GroupView;
|
2026-07-01 20:40:56 +03:00
|
|
|
|
EncodedTarget = DataAdapters.EncodedTarget;
|
2026-02-26 22:40:34 +03:00
|
|
|
|
|
|
|
|
|
|
IProbabilisticClassifier = MLCoreABC.IProbabilisticClassifier;
|
2026-05-28 10:23:22 +03:00
|
|
|
|
IClassifier = MLCoreABC.IClassifier;
|
2026-03-19 00:02:32 +03:00
|
|
|
|
IRegressor = MLCoreABC.IRegressor;
|
2026-02-14 11:55:00 +03:00
|
|
|
|
|
2026-02-15 08:43:44 +03:00
|
|
|
|
StandardScaler = MLModelsABC.StandardScaler;
|
2026-02-16 14:12:07 +03:00
|
|
|
|
PCATransformer = MLModelsABC.PCATransformer;
|
|
|
|
|
|
MinMaxScaler = MLModelsABC.MinMaxScaler;
|
|
|
|
|
|
VarianceThreshold = MLModelsABC.VarianceThreshold;
|
|
|
|
|
|
SelectKBest = MLModelsABC.SelectKBest;
|
|
|
|
|
|
FeatureScore = MLModelsABC.FeatureScore;
|
2026-02-17 16:18:17 +03:00
|
|
|
|
Normalizer = MLModelsABC.Normalizer;
|
|
|
|
|
|
|
|
|
|
|
|
NormType = MLModelsABC.NormType;
|
2026-02-16 14:12:07 +03:00
|
|
|
|
|
2026-02-15 08:43:44 +03:00
|
|
|
|
Activations = MLModelsABC.Activations;
|
2026-04-28 18:23:03 +03:00
|
|
|
|
MatrixPipeline = MLModelsABC.MatrixPipeline;
|
2026-05-28 10:23:22 +03:00
|
|
|
|
ClassificationMatrixPipeline = MLModelsABC.ClassificationMatrixPipeline;
|
|
|
|
|
|
RegressionMatrixPipeline = MLModelsABC.RegressionMatrixPipeline;
|
|
|
|
|
|
ClusteringMatrixPipeline = MLModelsABC.ClusteringMatrixPipeline;
|
2026-07-01 20:40:56 +03:00
|
|
|
|
LinearDecisionBoundary = MLModelsABC.LinearDecisionBoundary;
|
|
|
|
|
|
LinearRegressionLine = MLModelsABC.LinearRegressionLine;
|
2026-02-15 08:43:44 +03:00
|
|
|
|
|
|
|
|
|
|
LinearRegression = MLModelsABC.LinearRegression;
|
|
|
|
|
|
LogisticRegression = MLModelsABC.LogisticRegression;
|
|
|
|
|
|
RidgeRegression = MLModelsABC.RidgeRegression;
|
2026-04-27 09:34:44 +03:00
|
|
|
|
LassoRegression = MLModelsABC.LassoRegression;
|
2026-02-16 14:12:07 +03:00
|
|
|
|
ElasticNet = MLModelsABC.ElasticNet;
|
2026-02-19 09:33:09 +03:00
|
|
|
|
DecisionTreeClassifier = MLModelsABC.DecisionTreeClassifier;
|
|
|
|
|
|
DecisionTreeRegressor = MLModelsABC.DecisionTreeRegressor;
|
2026-07-01 20:40:56 +03:00
|
|
|
|
DecisionTreeView = MLModelsABC.DecisionTreeView;
|
2026-02-21 00:35:07 +03:00
|
|
|
|
RandomForestRegressor = MLModelsABC.RandomForestRegressor;
|
|
|
|
|
|
RandomForestClassifier = MLModelsABC.RandomForestClassifier;
|
2026-02-21 20:19:56 +03:00
|
|
|
|
GradientBoostingRegressor = MLModelsABC.GradientBoostingRegressor;
|
2026-02-22 21:01:14 +03:00
|
|
|
|
GradientBoostingClassifier = MLModelsABC.GradientBoostingClassifier;
|
2026-02-25 23:46:09 +03:00
|
|
|
|
KNNClassifier = MLModelsABC.KNNClassifier;
|
|
|
|
|
|
KNNRegressor = MLModelsABC.KNNRegressor;
|
2026-07-01 20:40:56 +03:00
|
|
|
|
NeighborInfo = MLModelsABC.NeighborInfo;
|
2026-03-08 18:31:35 +03:00
|
|
|
|
KMeans = MLModelsABC.KMeans;
|
|
|
|
|
|
DBSCAN = MLModelsABC.DBSCAN;
|
2026-02-21 20:19:56 +03:00
|
|
|
|
|
2026-02-25 23:46:09 +03:00
|
|
|
|
KNNWeighting = MLModelsABC.KNNWeighting;
|
2026-02-21 20:19:56 +03:00
|
|
|
|
TGBLoss = MLModelsABC.TGBLoss;
|
2026-02-21 00:35:07 +03:00
|
|
|
|
TMaxFeaturesMode = MLModelsABC.TMaxFeaturesMode;
|
2026-02-19 09:33:09 +03:00
|
|
|
|
|
2026-02-17 19:59:28 +03:00
|
|
|
|
MLException = MLExceptions.MLException;
|
|
|
|
|
|
MLNotFittedException = MLExceptions.MLNotFittedException;
|
|
|
|
|
|
MLDimensionException = MLExceptions.MLDimensionException;
|
|
|
|
|
|
|
2026-02-21 13:34:18 +03:00
|
|
|
|
Inspection = InspectionML.Inspection;
|
|
|
|
|
|
|
2026-03-08 18:31:35 +03:00
|
|
|
|
IPreprocessor = PreprocessorABC.IPreprocessor;
|
2026-05-09 23:00:12 +03:00
|
|
|
|
OrdinalEncoder = PreprocessorABC.OrdinalEncoder;
|
2026-03-08 18:31:35 +03:00
|
|
|
|
OneHotEncoder = PreprocessorABC.OneHotEncoder;
|
2026-06-19 22:06:08 +03:00
|
|
|
|
DateTimeComponentsEncoder = PreprocessorABC.DateTimeComponentsEncoder;
|
|
|
|
|
|
DateTimeUnit = PreprocessorABC.DateTimeUnit;
|
|
|
|
|
|
DateTimeOrdinalEncoder = PreprocessorABC.DateTimeOrdinalEncoder;
|
|
|
|
|
|
DateTimeCyclicEncoder = PreprocessorABC.DateTimeCyclicEncoder;
|
2026-03-08 18:31:35 +03:00
|
|
|
|
ImputeStrategy = PreprocessorABC.ImputeStrategy;
|
|
|
|
|
|
Imputer = PreprocessorABC.Imputer;
|
|
|
|
|
|
|
2026-03-08 22:25:12 +03:00
|
|
|
|
Datasets = MLDatasets.Datasets;
|
2026-04-01 06:33:26 +03:00
|
|
|
|
Dataset = MLDatasets.Dataset;
|
2026-05-20 21:25:53 +03:00
|
|
|
|
LabelEncoder = MLDatasets.LabelEncoder;
|
2026-05-28 23:56:46 +03:00
|
|
|
|
TaskType = MLDatasets.TaskType;
|
2026-03-08 22:25:12 +03:00
|
|
|
|
|
2026-03-19 00:02:32 +03:00
|
|
|
|
IModel = MLCoreABC.IModel;
|
2026-04-04 21:48:15 +03:00
|
|
|
|
IUnsupervisedModel = MLCoreABC.IUnsupervisedModel;
|
2026-05-02 10:57:27 +03:00
|
|
|
|
|
2026-03-31 12:38:47 +03:00
|
|
|
|
TaskKind = MLPipelineABC.TaskKind;
|
2026-03-19 00:02:32 +03:00
|
|
|
|
|
2026-04-01 06:33:26 +03:00
|
|
|
|
AggregationKind = DataFrameABC.AggregationKind;
|
|
|
|
|
|
|
|
|
|
|
|
const
|
2026-06-21 22:17:43 +03:00
|
|
|
|
ctInt = ColumnType.ctInt;
|
|
|
|
|
|
ctFloat = ColumnType.ctFloat;
|
|
|
|
|
|
ctStr = ColumnType.ctStr;
|
|
|
|
|
|
ctBool = ColumnType.ctBool;
|
|
|
|
|
|
ctDateTime = ColumnType.ctDateTime;
|
|
|
|
|
|
|
2026-04-01 06:33:26 +03:00
|
|
|
|
akMean = AggregationKind.akMean;
|
|
|
|
|
|
akMin = AggregationKind.akMin;
|
|
|
|
|
|
akMax = AggregationKind.akMax;
|
|
|
|
|
|
akCount = AggregationKind.akCount;
|
|
|
|
|
|
akSum = AggregationKind.akSum;
|
|
|
|
|
|
akStd = AggregationKind.akStd;
|
2026-04-02 01:26:27 +03:00
|
|
|
|
|
|
|
|
|
|
/// Внутреннее соединение
|
|
|
|
|
|
jkInner = JoinKind.jkInner;
|
|
|
|
|
|
jkLeft = JoinKind.jkLeft;
|
|
|
|
|
|
jkRight = JoinKind.jkRight;
|
|
|
|
|
|
jkFull = JoinKind.jkFull;
|
2026-06-19 22:06:08 +03:00
|
|
|
|
|
|
|
|
|
|
dpYear = DatePartKind.dpYear;
|
|
|
|
|
|
dpMonth = DatePartKind.dpMonth;
|
|
|
|
|
|
dpDay = DatePartKind.dpDay;
|
|
|
|
|
|
dpHour = DatePartKind.dpHour;
|
|
|
|
|
|
dpMinute = DatePartKind.dpMinute;
|
|
|
|
|
|
dpSecond = DatePartKind.dpSecond;
|
|
|
|
|
|
dpDayOfWeek = DatePartKind.dpDayOfWeek;
|
|
|
|
|
|
dpTimeOfDay = DatePartKind.dpTimeOfDay;
|
|
|
|
|
|
dpDate = DatePartKind.dpDate;
|
|
|
|
|
|
|
|
|
|
|
|
dtuDays = DateTimeUnit.dtuDays;
|
|
|
|
|
|
dtuHours = DateTimeUnit.dtuHours;
|
|
|
|
|
|
dtuMinutes = DateTimeUnit.dtuMinutes;
|
|
|
|
|
|
dtuSeconds = DateTimeUnit.dtuSeconds;
|
2026-04-01 06:33:26 +03:00
|
|
|
|
|
2026-04-27 09:34:44 +03:00
|
|
|
|
/// Кодирует строковые метки классов в целочисленные индексы.
|
|
|
|
|
|
/// Каждому уникальному значению присваивается номер 0,1,2,...
|
|
|
|
|
|
/// Порядок кодирования соответствует порядку первого появления меток.
|
|
|
|
|
|
/// Используется при обучении моделей и визуализации.
|
|
|
|
|
|
/// Предполагается, что входные данные уже очищены от пропущенных значений.
|
2026-03-11 10:50:15 +03:00
|
|
|
|
function EncodeLabels(labels: array of string): array of integer;
|
|
|
|
|
|
|
2026-03-10 13:32:40 +03:00
|
|
|
|
|
2026-02-14 11:55:00 +03:00
|
|
|
|
implementation
|
2026-03-11 10:50:15 +03:00
|
|
|
|
|
2026-04-11 20:35:52 +03:00
|
|
|
|
function EncodeLabels(labels: array of string): array of integer := MLUtilsABC.EncodeLabels(labels);
|
2026-03-11 10:50:15 +03:00
|
|
|
|
|
2026-04-27 09:34:44 +03:00
|
|
|
|
end.
|
2026-06-21 22:17:43 +03:00
|
|
|
|
|