pascalabcnet/bin/Lib/MLABC.pas

241 lines
9.5 KiB
ObjectPascal
Raw Normal View History

/// Основной модуль библиотеки машинного обучения.
/// Объединяет модели, метрики, валидацию и вспомогательные компоненты.
unit MLABC;
// =============================================================
// СТАТИСТИЧЕСКАЯ ПОЛИТИКА БИБЛИОТЕКИ ML PascalABC.NET
//
// В библиотеке используются следующие соглашения:
//
// 1. DataFrame (описательная статистика):
// • дисперсия вычисляется с делением на (n - 1)
//
// 2. LinearAlgebra и ML:
// • дисперсия вычисляется с делением на n
//
// 3. PCA:
// • ковариационная матрица вычисляется с делением на (n - 1)
//
// Это соответствует распространённой практике:
// • описательная статистика — выборочная дисперсия
// • алгоритмы ML — дисперсия генеральной совокупности
// =============================================================
// =============================================================
// КОНВЕЙЕРЫ
//
// Табличные:
// DataPipeline
// ClassificationDataPipeline
// RegressionDataPipeline
// ClusteringDataPipeline
//
// Матричные:
// MatrixPipeline
// ClassificationMatrixPipeline
// RegressionMatrixPipeline
// ClusteringMatrixPipeline
//
// DataPipeline и MatrixPipeline используются как фасады
// для построения специализированных конвейеров.
// =============================================================
// =============================================================
// ПОЛИТИКА PREDICT
//
// 1. Классификация:
2026-05-30 19:26:43 +03:00
// • Для матричных моделей Predict возвращает метки классов
// в том виде, в каком они были поданы модели при обучении.
//
// • ClassificationMatrixPipeline следует той же политике:
// Predict возвращает метки классов в том виде,
// в каком они были поданы вложенной модели при обучении.
//
// • ClassificationDataPipeline работает с DataFrame, где целевой столбец
// часто является строковым. Поэтому внутри pipeline целевой столбец
// кодируется в целые числа, и Predict возвращает именно эти коды.
//
// • PredictLabels возвращает строковые метки классов.
//
2026-05-30 19:26:43 +03:00
// • Таким образом, различие естественно:
// матричные модели и ClassificationMatrixPipeline возвращают метки
// из пространства обучения модели, а ClassificationDataPipeline
// возвращает коды, построенные при кодировании целевого столбца.
//
// 2. Регрессия:
// • Predict возвращает вектор числовых предсказаний.
//
// 3. Кластеризация:
// • Predict и FitPredict возвращают номера кластеров.
// =============================================================
interface
uses LinearAlgebraML;
uses ValidationML;
uses MLCoreABC;
uses MLModelsABC;
uses MetricsABC;
uses PreprocessorABC;
uses DataFrameABC;
uses DataFrameABCCore;
uses MLExceptions;
2026-02-21 13:34:18 +03:00
uses InspectionML;
uses MLPipelineABC;
uses MLDatasets;
uses DataAdapters;
uses MLUtilsABC;
type
Vector = LinearAlgebraML.Vector;
Matrix = LinearAlgebraML.Matrix;
Validation = ValidationML.Validation;
GridSearch = ValidationML.GridSearch;
Metrics = MetricsABC.Metrics;
ClassificationMetrics = MetricsABC.ClassificationMetrics;
RegressionMetrics = MetricsABC.RegressionMetrics;
ClusteringMetrics = MetricsABC.ClusteringMetrics;
ConfusionMatrix = MetricsABC.ConfusionMatrix;
DataPipeline = MLPipelineABC.DataPipeline;
ClassificationDataPipeline = MLPipelineABC.ClassificationDataPipeline;
RegressionDataPipeline = MLPipelineABC.RegressionDataPipeline;
ClusteringDataPipeline = MLPipelineABC.ClusteringDataPipeline;
DataFrame = DataFrameABC.DataFrame;
DataFrameCursor = DataFrameABCCore.DataFrameCursor;
DataValue = DataFrameABCCore.DataValue;
ColumnType = DataFrameABCCore.ColumnType;
Column = DataFrameABCCore.Column;
DatePartKind = DataFrameABC.DatePartKind;
Statistics = DataFrameABC.Statistics;
CsvLoader = DataFrameABC.CsvLoader;
JoinKind = DataFrameABC.JoinKind;
GroupView = DataFrameABC.GroupView;
EncodedTarget = DataAdapters.EncodedTarget;
IProbabilisticClassifier = MLCoreABC.IProbabilisticClassifier;
IClassifier = MLCoreABC.IClassifier;
IRegressor = MLCoreABC.IRegressor;
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;
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;
MatrixPipeline = MLModelsABC.MatrixPipeline;
ClassificationMatrixPipeline = MLModelsABC.ClassificationMatrixPipeline;
RegressionMatrixPipeline = MLModelsABC.RegressionMatrixPipeline;
ClusteringMatrixPipeline = MLModelsABC.ClusteringMatrixPipeline;
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;
DecisionTreeView = MLModelsABC.DecisionTreeView;
RandomForestRegressor = MLModelsABC.RandomForestRegressor;
RandomForestClassifier = MLModelsABC.RandomForestClassifier;
2026-02-21 20:19:56 +03:00
GradientBoostingRegressor = MLModelsABC.GradientBoostingRegressor;
GradientBoostingClassifier = MLModelsABC.GradientBoostingClassifier;
2026-02-25 23:46:09 +03:00
KNNClassifier = MLModelsABC.KNNClassifier;
KNNRegressor = MLModelsABC.KNNRegressor;
NeighborInfo = MLModelsABC.NeighborInfo;
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;
TMaxFeaturesMode = MLModelsABC.TMaxFeaturesMode;
2026-02-19 09:33:09 +03:00
MLException = MLExceptions.MLException;
MLNotFittedException = MLExceptions.MLNotFittedException;
MLDimensionException = MLExceptions.MLDimensionException;
2026-02-21 13:34:18 +03:00
Inspection = InspectionML.Inspection;
IPreprocessor = PreprocessorABC.IPreprocessor;
2026-05-09 23:00:12 +03:00
OrdinalEncoder = PreprocessorABC.OrdinalEncoder;
OneHotEncoder = PreprocessorABC.OneHotEncoder;
DateTimeComponentsEncoder = PreprocessorABC.DateTimeComponentsEncoder;
DateTimeUnit = PreprocessorABC.DateTimeUnit;
DateTimeOrdinalEncoder = PreprocessorABC.DateTimeOrdinalEncoder;
DateTimeCyclicEncoder = PreprocessorABC.DateTimeCyclicEncoder;
ImputeStrategy = PreprocessorABC.ImputeStrategy;
Imputer = PreprocessorABC.Imputer;
Datasets = MLDatasets.Datasets;
Dataset = MLDatasets.Dataset;
LabelEncoder = MLDatasets.LabelEncoder;
TaskType = MLDatasets.TaskType;
IModel = MLCoreABC.IModel;
IUnsupervisedModel = MLCoreABC.IUnsupervisedModel;
TaskKind = MLPipelineABC.TaskKind;
AggregationKind = DataFrameABC.AggregationKind;
const
ctInt = ColumnType.ctInt;
ctFloat = ColumnType.ctFloat;
ctStr = ColumnType.ctStr;
ctBool = ColumnType.ctBool;
ctDateTime = ColumnType.ctDateTime;
akMean = AggregationKind.akMean;
akMin = AggregationKind.akMin;
akMax = AggregationKind.akMax;
akCount = AggregationKind.akCount;
akSum = AggregationKind.akSum;
akStd = AggregationKind.akStd;
/// Внутреннее соединение
jkInner = JoinKind.jkInner;
jkLeft = JoinKind.jkLeft;
jkRight = JoinKind.jkRight;
jkFull = JoinKind.jkFull;
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-27 09:34:44 +03:00
/// Кодирует строковые метки классов в целочисленные индексы.
/// Каждому уникальному значению присваивается номер 0,1,2,...
/// Порядок кодирования соответствует порядку первого появления меток.
/// Используется при обучении моделей и визуализации.
/// Предполагается, что входные данные уже очищены от пропущенных значений.
function EncodeLabels(labels: array of string): array of integer;
implementation
function EncodeLabels(labels: array of string): array of integer := MLUtilsABC.EncodeLabels(labels);
2026-04-27 09:34:44 +03:00
end.