diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index e4bb5ed57..887c1b2c9 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -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; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 9d14a5148..036bd09e2 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ %COREVERSION%=1 -%REVISION%=3824 +%REVISION%=3826 %MINOR%=11 %MAJOR%=3 diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index 3122829da..49cd70e01 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.11.1.3824 +3.11.1.3826 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 62881fe10..c5b5936e7 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.11.1.3824' +!define VERSION '3.11.1.3826' diff --git a/bin/Lib/DataFrameABCCore.pas b/bin/Lib/DataFrameABCCore.pas index 70ab8e47c..e61b28564 100644 --- a/bin/Lib/DataFrameABCCore.pas +++ b/bin/Lib/DataFrameABCCore.pas @@ -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 diff --git a/bin/Lib/MLCoreABC.pas b/bin/Lib/MLCoreABC.pas index f5679b176..cc8d17780 100644 --- a/bin/Lib/MLCoreABC.pas +++ b/bin/Lib/MLCoreABC.pas @@ -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; diff --git a/bin/Lib/MLModelsABC.pas b/bin/Lib/MLModelsABC.pas index ef2c08654..f62b127b3 100644 --- a/bin/Lib/MLModelsABC.pas +++ b/bin/Lib/MLModelsABC.pas @@ -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).