241 lines
9.5 KiB
ObjectPascal
241 lines
9.5 KiB
ObjectPascal
/// Основной модуль библиотеки машинного обучения.
|
||
/// Объединяет модели, метрики, валидацию и вспомогательные компоненты.
|
||
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.
|
||
|