Исправление багов ML c NA и возможностью Int

This commit is contained in:
Mikhalkovich Stanislav 2026-05-25 22:45:41 +03:00
parent 4efb48894c
commit 84a039e631
7 changed files with 65 additions and 30 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "11";
public const string Build = "1";
public const string Revision = "3824";
public const string Revision = "3826";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%COREVERSION%=1
%REVISION%=3824
%REVISION%=3826
%MINOR%=11
%MAJOR%=3

View file

@ -1 +1 @@
3.11.1.3824
3.11.1.3826

View file

@ -1 +1 @@
!define VERSION '3.11.1.3824'
!define VERSION '3.11.1.3826'

View file

@ -286,6 +286,8 @@ const
'Столбец не является Str!!Column is not Str';
ER_COLUMN_NOT_BOOL =
'Столбец не является Bool!!Column is not Bool';
ER_VALUE_IS_NA =
'Значение в столбце "{0}" равно NA!!Value in column "{0}" is NA';
ER_DUPLICATE_COLUMN_NAME =
'Повторяющееся имя столбца "{0}"!!Duplicate column name "{0}"';
ER_NAMES_NULL =
@ -903,17 +905,33 @@ begin
Result := IsValid(fSchema.IndexOf(name));
end;
function DataFrameCursor.Int(i: integer): integer :=
intAcc[i](pos);
function DataFrameCursor.Int(i: integer): integer;
begin
if not IsValid(i) then
Error(ER_VALUE_IS_NA, fSchema.NameAt(i));
Result := intAcc[i](pos);
end;
function DataFrameCursor.Float(i: integer): real :=
floatAcc[i](pos);
function DataFrameCursor.Float(i: integer): real;
begin
if not IsValid(i) then
Error(ER_VALUE_IS_NA, fSchema.NameAt(i));
Result := floatAcc[i](pos);
end;
function DataFrameCursor.Str(i: integer): string :=
strAcc[i](pos);
function DataFrameCursor.Str(i: integer): string;
begin
if not IsValid(i) then
Error(ER_VALUE_IS_NA, fSchema.NameAt(i));
Result := strAcc[i](pos);
end;
function DataFrameCursor.Bool(i: integer): boolean :=
boolAcc[i](pos);
function DataFrameCursor.Bool(i: integer): boolean;
begin
if not IsValid(i) then
Error(ER_VALUE_IS_NA, fSchema.NameAt(i));
Result := boolAcc[i](pos);
end;
function DataFrameCursor.Int(name: string): integer;
begin

View file

@ -49,7 +49,6 @@ type
/// Базовый интерфейс модели машинного обучения
IModel = interface(IMatrixStep)
// function Predict(X: Matrix): Vector; // вынес в IPredictiveModel
function Clone: IModel;
function Name: string;
property IsFitted: boolean read;
@ -129,8 +128,12 @@ type
/// Позволяет получать значения в диапазоне (0, 1)
/// вместо только итогового решения.
IProbabilisticClassifier = interface(IClassifier)
/// Возвращает матрицу вероятностей размера (nSamples × nClasses).
/// Столбцы соответствуют классам в порядке внутреннего кодирования модели
/// Возвращает матрицу вероятностей классов для всех объектов из X.
/// Размер результата: nSamples × nClasses, где:
/// - nSamples число объектов в X;
/// - nClasses число классов модели.
/// Элемент [i, k] содержит вероятность того, что объект i принадлежит классу k.
/// Сумма вероятностей в каждой строке равна 1.
function PredictProba(X: Matrix): Matrix;
end;

View file

@ -357,7 +357,12 @@ type
/// обученное состояние модели НЕ копируется методом Clone
function Fit(X: Matrix; y: Vector): ISupervisedModel;
/// Возвращает матрицу вероятностей (m x k).
/// Возвращает матрицу вероятностей классов для всех объектов из X.
/// Размер результата: nSamples × nClasses, где:
/// - nSamples число объектов в X;
/// - nClasses число классов модели.
/// Элемент [i, k] содержит вероятность того, что объект i принадлежит классу k.
/// Сумма вероятностей в каждой строке равна 1.
function PredictProba(X: Matrix): Matrix;
/// Возвращает массив меток классов в порядке столбцов PredictProba.
@ -999,12 +1004,12 @@ type
/// Требует предварительного вызова Fit.
function PredictLabels(X: Matrix): array of integer;
/// Возвращает оценки вероятностей принадлежности объектов из X к каждому классу.
/// Результат матрица размера [nSamples x nClasses].
/// Возвращает матрицу вероятностей классов для всех объектов из X.
/// Размер результата: nSamples × nClasses, где:
/// - nSamples число объектов в X;
/// - nClasses число классов модели.
/// Элемент [i, k] содержит вероятность того, что объект i принадлежит классу k.
/// Порядок классов соответствует fIndexToClass.
/// Сумма вероятностей по строке равна 1.
/// Требует предварительного вызова Fit.
/// Сумма вероятностей в каждой строке равна 1.
function PredictProba(X: Matrix): Matrix;
/// Копирует только конфигурацию модели (без обученного состояния).
@ -1324,9 +1329,12 @@ type
function PredictLabels(X: Matrix): array of integer;
/// Возвращает вероятности принадлежности к каждому классу.
/// Размер результата: [nSamples x nClasses].
/// Вероятности получаются через softmax.
/// Возвращает матрицу вероятностей классов для всех объектов из X.
/// Размер результата: nSamples × nClasses, где:
/// - nSamples число объектов в X;
/// - nClasses число классов модели.
/// Элемент [i, k] содержит вероятность того, что объект i принадлежит классу k.
/// Сумма вероятностей в каждой строке равна 1.
function PredictProba(X: Matrix): Matrix;
function GetClasses: array of real;
@ -1485,10 +1493,12 @@ type
/// для одного экземпляра модели.
function PredictLabels(X: Matrix): array of integer;
/// Возвращает матрицу вероятностей размера (nSamples × nClasses).
/// Столбцы соответствуют классам в порядке, возвращаемом GetClasses().
/// Не является потокобезопасным: не вызывать одновременно из нескольких потоков
/// для одного экземпляра модели.
/// Возвращает матрицу вероятностей классов для всех объектов из X.
/// Размер результата: nSamples × nClasses, где:
/// - nSamples число объектов в X;
/// - nClasses число классов модели.
/// Элемент [i, k] содержит вероятность того, что объект i принадлежит классу k.
/// Сумма вероятностей в каждой строке равна 1.
function PredictProba(X: Matrix): Matrix;
/// Возвращает массив меток классов в порядке столбцов PredictProba
@ -1802,8 +1812,12 @@ type
/// Делает предсказание
function Predict(X: Matrix): Vector;
/// Возвращает матрицу вероятностей (m x k)
/// для вероятностной модели в конце пайплайна.
/// Возвращает матрицу вероятностей классов для всех объектов из X.
/// Размер результата: nSamples × nClasses, где:
/// - nSamples число объектов в X;
/// - nClasses число классов модели.
/// Элемент [i, k] содержит вероятность того, что объект i принадлежит классу k.
/// Сумма вероятностей в каждой строке равна 1.
function PredictProba(X: Matrix): Matrix;
/// Показывает, был ли пайплайн обучен (вызван метод Fit).