pascalabcnet/bin/Lib/MLABC.pas
Mikhalkovich Stanislav 911142c83e used_cars
Мелкие дополнения ML
2026-07-01 20:40:56 +03:00

241 lines
9.5 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/// Основной модуль библиотеки машинного обучения.
/// Объединяет модели, метрики, валидацию и вспомогательные компоненты.
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. Классификация:
// • Для матричных моделей Predict возвращает метки классов
// в том виде, в каком они были поданы модели при обучении.
//
// • ClassificationMatrixPipeline следует той же политике:
// Predict возвращает метки классов в том виде,
// в каком они были поданы вложенной модели при обучении.
//
// • ClassificationDataPipeline работает с DataFrame, где целевой столбец
// часто является строковым. Поэтому внутри pipeline целевой столбец
// кодируется в целые числа, и Predict возвращает именно эти коды.
//
// • PredictLabels возвращает строковые метки классов.
//
// • Таким образом, различие естественно:
// матричные модели и 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;
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;
StandardScaler = MLModelsABC.StandardScaler;
PCATransformer = MLModelsABC.PCATransformer;
MinMaxScaler = MLModelsABC.MinMaxScaler;
VarianceThreshold = MLModelsABC.VarianceThreshold;
SelectKBest = MLModelsABC.SelectKBest;
FeatureScore = MLModelsABC.FeatureScore;
Normalizer = MLModelsABC.Normalizer;
NormType = MLModelsABC.NormType;
Activations = MLModelsABC.Activations;
MatrixPipeline = MLModelsABC.MatrixPipeline;
ClassificationMatrixPipeline = MLModelsABC.ClassificationMatrixPipeline;
RegressionMatrixPipeline = MLModelsABC.RegressionMatrixPipeline;
ClusteringMatrixPipeline = MLModelsABC.ClusteringMatrixPipeline;
LinearDecisionBoundary = MLModelsABC.LinearDecisionBoundary;
LinearRegressionLine = MLModelsABC.LinearRegressionLine;
LinearRegression = MLModelsABC.LinearRegression;
LogisticRegression = MLModelsABC.LogisticRegression;
RidgeRegression = MLModelsABC.RidgeRegression;
LassoRegression = MLModelsABC.LassoRegression;
ElasticNet = MLModelsABC.ElasticNet;
DecisionTreeClassifier = MLModelsABC.DecisionTreeClassifier;
DecisionTreeRegressor = MLModelsABC.DecisionTreeRegressor;
DecisionTreeView = MLModelsABC.DecisionTreeView;
RandomForestRegressor = MLModelsABC.RandomForestRegressor;
RandomForestClassifier = MLModelsABC.RandomForestClassifier;
GradientBoostingRegressor = MLModelsABC.GradientBoostingRegressor;
GradientBoostingClassifier = MLModelsABC.GradientBoostingClassifier;
KNNClassifier = MLModelsABC.KNNClassifier;
KNNRegressor = MLModelsABC.KNNRegressor;
NeighborInfo = MLModelsABC.NeighborInfo;
KMeans = MLModelsABC.KMeans;
DBSCAN = MLModelsABC.DBSCAN;
KNNWeighting = MLModelsABC.KNNWeighting;
TGBLoss = MLModelsABC.TGBLoss;
TMaxFeaturesMode = MLModelsABC.TMaxFeaturesMode;
MLException = MLExceptions.MLException;
MLNotFittedException = MLExceptions.MLNotFittedException;
MLDimensionException = MLExceptions.MLDimensionException;
Inspection = InspectionML.Inspection;
IPreprocessor = PreprocessorABC.IPreprocessor;
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;
/// Кодирует строковые метки классов в целочисленные индексы.
/// Каждому уникальному значению присваивается номер 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);
end.