gencfeatures

Выполните автоматизированную разработку функции для классификации

    Описание

    gencfeatures функция позволяет вам автоматизировать процесс разработки функции в контексте рабочего процесса машинного обучения. Прежде, чем передать табличные обучающие данные классификатору, можно создать новые возможности из предикторов в данных при помощи gencfeatures. Используйте возвращенные данные, чтобы обучить классификатор.

    Чтобы лучше изучить генерированные признаки, используйте describe функция возвращенного FeatureTransformer объект. Чтобы применить те же преобразования функции набора обучающих данных к набору тестов, используйте transform функция FeatureTransformer объект.

    пример

    [Transformer,NewTbl] = gencfeatures(Tbl,ResponseVarName,q) использование автоматизировало разработку функции, чтобы создать q функции от предикторов в Tbl. Программное обеспечение принимает что ResponseVarName переменная в Tbl ответ и не создает новые возможности из этой переменной. gencfeatures возвращает FeatureTransformer объект (Transformer) и новая таблица (NewTbl) это содержит преобразованные функции.

    По умолчанию, gencfeatures принимает, что генерированные функции используются, чтобы обучить поддающуюся толкованию линейную модель с бинарной переменной отклика. Если у вас есть переменная отклика мультикласса, и вы хотите генерировать признаки, чтобы улучшить точность уволенного ансамбля, задать 'TargetLearner','bag'.

    пример

    [Transformer,NewTbl] = gencfeatures(Tbl,Y,q) принимает что векторный Y переменная отклика и создает новые возможности из переменных в Tbl.

    [Transformer,NewTbl] = gencfeatures(Tbl,formula,q) использует объяснительную модель formula определить переменную отклика в Tbl и подмножество Tbl предикторы, из которых можно создать новые возможности.

    пример

    [Transformer,NewTbl] = gencfeatures(___,Name,Value) задает опции с помощью одного или нескольких аргументов значения имени в дополнение к любой из комбинаций входных аргументов в предыдущих синтаксисах. Например, можно изменить ожидаемый тип ученика, метод для выбора новых возможностей и метода стандартизации для преобразованных данных.

    Примеры

    свернуть все

    Используйте автоматизированную разработку функции, чтобы генерировать новые признаки. Обучите линейный классификатор, использующий генерированные признаки. Интерпретируйте отношение между генерированными признаками и обученной моделью.

    Загрузите patients набор данных. Составьте таблицу от подмножества переменных.

    load patients
    Tbl = table(Age,Diastolic,Gender,Height,SelfAssessedHealthStatus, ...
        Systolic,Weight,Smoker);

    Генерируйте 10 новых признаков от переменных в Tbl. Задайте Smoker переменная как ответ. По умолчанию, gencfeatures принимает, что новые функции будут использованы, чтобы обучить бинарный линейный классификатор.

    rng("default") % For reproducibility
    [T,NewTbl] = gencfeatures(Tbl,"Smoker",10)
    T = 
      FeatureTransformer with properties:
    
                         Type: 'classification'
                TargetLearner: 'linear'
        NumEngineeredFeatures: 10
          NumOriginalFeatures: 0
             TotalNumFeatures: 10
    
    
    NewTbl=100×11 table
        zsc(Systolic.^2)    eb8(Diastolic)    q8(Systolic)    eb8(Systolic)    q8(Diastolic)    zsc(kmd9)    zsc(sin(Age))    zsc(sin(Weight))    zsc(Height-Systolic)    zsc(kmc1)    Smoker
        ________________    ______________    ____________    _____________    _____________    _________    _____________    ________________    ____________________    _________    ______
    
             0.15379              8                6                4                8           -1.7207        0.50027            0.19202               0.40418            0.76177    true  
             -1.9421              2                1                1                2          -0.22056        -1.1319            -0.4009                2.3431             1.1617    false 
             0.30311              4                6                5                5           0.57695        0.50027             -1.037              -0.78898            -1.4456    false 
            -0.85785              2                2                2                2           0.83391         1.1495             1.3039               0.85162          -0.010294    false 
            -0.14125              3                5                4                4             1.779        -1.3083           -0.42387              -0.34154            0.99368    false 
            -0.28697              1                4                3                1           0.67326         1.3761           -0.72529               0.40418             1.3755    false 
              1.0677              6                8                6                6          -0.42521         1.5181           -0.72529               -1.5347            -1.4456    true  
             -1.1361              4                2                2                5          -0.79995         1.1495            -1.0225                1.2991             1.1617    false 
             -1.1361              3                2                2                3          -0.80136        0.46343             1.0806                1.2991             -1.208    false 
            -0.71693              5                3                3                6           0.37961       -0.51304            0.16741               0.55333            -1.4456    false 
             -1.2734              2                1                1                2            1.2572         1.3025             1.0978                1.4482          -0.010294    false 
             -1.1361              1                2                2                1             1.001        -1.2545            -1.2194                1.0008          -0.010294    false 
             0.60534              1                6                5                1          -0.98493       -0.11998             -1.211             -0.043252             -1.208    false 
              1.0677              8                8                6                8          -0.27307         1.4659             1.2168              -0.34154            0.24706    true  
             -1.2734              3                1                1                4           0.93395        -1.3633           -0.17603                1.0008          -0.010294    false 
              1.0677              7                8                6                8          -0.91396          -1.04            -1.2109              -0.49069            0.24706    true  
          ⋮
    
    

    T FeatureTransformer объект, который может использоваться, чтобы преобразовать новые данные и newTbl содержит новые признаки, генерированные от Tbl данные.

    Чтобы лучше изучить генерированные признаки, используйте describe объектная функция FeatureTransformer объект. Например, смотрите первые два генерированных признака.

    describe(T,1:2)
                               Type        IsOriginal    InputVariables                            Transformations
                            ___________    __________    ______________    _______________________________________________________________
    
        zsc(Systolic.^2)    Numeric          false         Systolic        power(  ,2)
                                                                           Standardization with z-score (mean = 15119.54, std = 1667.5858)
        eb8(Diastolic)      Categorical      false         Diastolic       Equal-width binning (number of bins = 8)
    

    Первая функция в newTbl числовая переменная, созданная первой обработкой на квадрат значениям Systolic переменная и затем преобразование результатов к z-баллам. Вторая функция в newTbl категориальная переменная, созданная раскладыванием значения Systolic переменная в 50 равновероятных интервалов.

    Используйте генерированные признаки, чтобы соответствовать линейному классификатору без любой регуляризации.

    Mdl = fitclinear(NewTbl,"Smoker","Lambda",0);

    Постройте коэффициенты предикторов, используемых, чтобы обучить Mdl. Обратите внимание на то, что fitclinear расширяет категориальные предикторы прежде, чем подобрать модель.

    p = length(Mdl.Beta);
    [sortedCoefs,expandedIndex] = sort(Mdl.Beta,"ComparisonMethod","abs");
    sortedExpandedPreds = Mdl.ExpandedPredictorNames(expandedIndex);
    bar(sortedCoefs,"Horizontal","on")
    yticks(1:2:p)
    yticklabels(sortedExpandedPreds(1:2:end))
    xlabel("Coefficient")
    ylabel("Expanded Predictors")
    title("Coefficients for Expanded Predictors")

    Идентифицируйте предикторы, коэффициенты которых имеют большие абсолютные значения.

    bigCoefs = abs(sortedCoefs) >= 4;
    flip(sortedExpandedPreds(bigCoefs))
    ans = 1×7 cell
        {'zsc(Systolic.^2)'}    {'eb8(Systolic) >= 5'}    {'q8(Diastolic) >= 3'}    {'eb8(Diastolic) >= 3'}    {'q8(Systolic) >= 6'}    {'q8(Diastolic) >= 6'}    {'zsc(Height-Systolic)'}
    
    

    Можно использовать частичные графики зависимости анализировать категориальные функции, уровни которых имеют большие коэффициенты в терминах абсолютного значения. Например, смотрите частичный график зависимости для q8(Diastolic) переменная, чьи уровни q8(Diastolic) >= 3 и q8(Diastolic) >= 6 имейте коэффициенты с большими абсолютными значениями. Эти два уровня соответствуют значимым изменениям в предсказанных баллах.

    plotPartialDependence(Mdl,"q8(Diastolic)",Mdl.ClassNames,NewTbl);

    Генерируйте новые признаки, чтобы улучшить точность модели для поддающейся толкованию линейной модели. Сравните точность набора тестов линейной модели, обученной на исходных данных с точностью набора тестов линейной модели, обученной на преобразованных функциях.

    Загрузите ionosphere набор данных. Преобразуйте матрицу предикторов X к таблице.

    load ionosphere
    tbl = array2table(X);

    Разделите данные в наборы обучающих данных и наборы тестов. Используйте приблизительно 70% наблюдений как обучающие данные и 30% наблюдений как тестовые данные. Разделите данные с помощью cvpartition.

    rng("default") % For reproducibility of the partition
    cvp = cvpartition(Y,"Holdout",0.3);
    
    trainIdx = training(cvp);
    trainTbl = tbl(training(cvp),:);
    trainY = Y(trainIdx);
    
    testIdx = test(cvp);
    testTbl = tbl(testIdx,:);
    testY = Y(testIdx);

    Используйте обучающие данные, чтобы генерировать 45 новых признаков. Смотрите возвращенный FeatureTransformer объект.

    [T,newTrainTbl] = gencfeatures(trainTbl,trainY,45);
    T
    T = 
      FeatureTransformer with properties:
    
                         Type: 'classification'
                TargetLearner: 'linear'
        NumEngineeredFeatures: 45
          NumOriginalFeatures: 0
             TotalNumFeatures: 45
    
    

    Все генерированные признаки спроектированы функции, а не исходные функции в trainTbl.

    Примените преобразования, сохраненные в объекте T к тестовым данным.

    newTestTbl = transform(T,testTbl);

    Сравните эффективность набора тестов линейного классификатора, обученного на исходных функциях и линейного классификатора, обученного на новых возможностях.

    Подбирайте линейную модель, не преобразовывая данные. Проверяйте эффективность набора тестов модели с помощью матрицы беспорядка.

    originalMdl = fitclinear(trainTbl,trainY);
    originalPredictedLabels = predict(originalMdl,testTbl);
    cm = confusionchart(testY,originalPredictedLabels);

    confusionMatrix = cm.NormalizedValues;
    originalTestAccuracy = sum(diag(confusionMatrix))/sum(confusionMatrix,"all")
    originalTestAccuracy = 0.8952
    

    Подбирайте линейную модель с преобразованными данными. Проверяйте эффективность набора тестов модели с помощью матрицы беспорядка.

    newMdl = fitclinear(newTrainTbl,trainY);
    newPredictedLabels = predict(newMdl,newTestTbl);
    newcm = confusionchart(testY,newPredictedLabels);

    newConfusionMatrix = newcm.NormalizedValues;
    newTestAccuracy = sum(diag(newConfusionMatrix))/sum(newConfusionMatrix,"all")
    newTestAccuracy = 0.9238
    

    Линейный классификатор, обученный на преобразованных данных, кажется, превосходит по характеристикам линейный классификатор, обученный на исходных данных.

    Используйте gencfeatures к новым возможностям инженера перед обучением сложенный в мешок классификатор ансамбля. Прежде, чем сделать предсказания на новых данных, примените те же преобразования функции к новому набору данных. Сравните эффективность набора тестов ансамбля, который использует спроектированные функции к эффективности набора тестов ансамбля, который использует исходные функции.

    Считайте файл примера CreditRating_Historical.dat в таблицу. Данные о предикторе состоят из финансовых отношений и информации об отрасли промышленности для списка корпоративных клиентов. Переменная отклика состоит из кредитных рейтингов, присвоенных рейтинговым агентством. Предварительно просмотрите первые несколько строк набора данных.

    creditrating = readtable("CreditRating_Historical.dat");
    head(creditrating)
    ans=8×8 table
         ID      WC_TA     RE_TA     EBIT_TA    MVE_BVTD    S_TA     Industry    Rating 
        _____    ______    ______    _______    ________    _____    ________    _______
    
        62394     0.013     0.104     0.036      0.447      0.142        3       {'BB' }
        48608     0.232     0.335     0.062      1.969      0.281        8       {'A'  }
        42444     0.311     0.367     0.074      1.935      0.366        1       {'A'  }
        48631     0.194     0.263     0.062      1.017      0.228        4       {'BBB'}
        43768     0.121     0.413     0.057      3.647      0.466       12       {'AAA'}
        39255    -0.117    -0.799      0.01      0.179      0.082        4       {'CCC'}
        62236     0.087     0.158     0.049      0.816      0.324        2       {'BBB'}
        39354     0.005     0.181     0.034      2.597      0.388        7       {'AA' }
    
    

    Поскольку каждое значение в ID переменная является уникальным идентификатором клиента, то есть, length(unique(creditrating.ID)) равно количеству наблюдений в creditrating, ID переменная является плохим предиктором. Удалите ID переменная из таблицы, и преобразует Industry переменная к categorical переменная.

    creditrating = removevars(creditrating,"ID");
    creditrating.Industry = categorical(creditrating.Industry);

    Преобразуйте Rating переменная отклика к порядковому categorical переменная.

    creditrating.Rating = categorical(creditrating.Rating, ...
        ["AAA","AA","A","BBB","BB","B","CCC"],"Ordinal",true);

    Разделите данные в наборы обучающих данных и наборы тестов. Используйте приблизительно 75% наблюдений как обучающие данные и 25% наблюдений как тестовые данные. Разделите данные с помощью cvpartition.

    rng("default") % For reproducibility of the partition
    c = cvpartition(creditrating.Rating,"Holdout",0.25);
    trainingIndices = training(c); % Indices for the training set
    testIndices = test(c); % Indices for the test set
    creditTrain = creditrating(trainingIndices,:);
    creditTest = creditrating(testIndices,:);

    Используйте обучающие данные, чтобы генерировать 40 новых признаков, чтобы соответствовать уволенному ансамблю. По умолчанию 40 функций могут включать исходные функции, если программное обеспечение полагает, что они важные переменные.

    [T,newCreditTrain] = gencfeatures(creditTrain,"Rating",40, ...
        "TargetLearner","bag");
    T
    T = 
      FeatureTransformer with properties:
    
                         Type: 'classification'
                TargetLearner: 'bag'
        NumEngineeredFeatures: 34
          NumOriginalFeatures: 6
             TotalNumFeatures: 40
    
    

    Поскольку T.NumOriginalFeatures 6, функция сохраняет все исходные предикторы.

    Создайте newCreditTest путем применения преобразований сохранен в объекте T к тестовым данным.

    newCreditTest = transform(T,creditTest);

    Сравните эффективность набора тестов уволенного ансамбля, обученного на исходных функциях и уволенного ансамбля, обученного на новых возможностях.

    Обучите уволенный ансамбль, использующий исходный набор обучающих данных creditTrain. Вычислите точность модели на исходном наборе тестов creditTest. Визуализируйте результаты с помощью матрицы беспорядка.

    originalMdl = fitcensemble(creditTrain,"Rating","Method","Bag");
    originalTestAccuracy = 1 - loss(originalMdl,creditTest, ...
        "Rating","LossFun","classiferror")
    originalTestAccuracy = 0.7481
    
    predictedTestLabels = predict(originalMdl,creditTest);
    confusionchart(creditTest.Rating,predictedTestLabels);

    Обучите уволенный ансамбль, использующий преобразованный набор обучающих данных newCreditTrain. Вычислите точность модели на преобразованном наборе тестов newCreditTest. Визуализируйте результаты с помощью матрицы беспорядка.

    newMdl = fitcensemble(newCreditTrain,"Rating","Method","Bag");
    newTestAccuracy = 1 - loss(newMdl,newCreditTest, ...
        "Rating","LossFun","classiferror")
    newTestAccuracy = 0.7543
    
    newPredictedTestLabels = predict(newMdl,newCreditTest);
    confusionchart(newCreditTest.Rating,newPredictedTestLabels)

    Уволенный ансамбль, обученный на преобразованных данных, кажется, превосходит по характеристикам уволенный ансамбль, обученный на исходных данных.

    Генерируйте признаки, чтобы обучить линейный классификатор. Вычислите ошибку классификации перекрестных проверок модели при помощи crossval функция.

    Загрузите ionosphere набор данных, и составляет таблицу, содержащую данные о предикторе.

    load ionosphere
    Tbl = array2table(X);

    Создайте случайный раздел для стратифицированной 5-кратной перекрестной проверки.

    rng("default") % For reproducibility of the partition
    cvp = cvpartition(Y,"KFold",5);

    Вычислите потерю классификации перекрестных проверок для линейной модели, обученной на исходных функциях в Tbl.

    CVMdl = fitclinear(Tbl,Y,"CVPartition",cvp);
    cvloss = kfoldLoss(CVMdl)
    cvloss = 0.1339
    

    Создайте пользовательский функциональный myloss (показанный в конце этого примера). Эта функция генерирует 20 признаков от обучающих данных, и затем применяет те же преобразования набора обучающих данных к тестовым данным. Функция затем соответствует линейному классификатору к обучающим данным и вычисляет потерю набора тестов.

    Примечание: Если вы используете файл live скрипта для этого примера, myloss функция уже включена в конце файла. В противном случае необходимо создать эту функцию в конце.m файла или добавить его как файл на пути MATLAB®.

    Вычислите потерю классификации перекрестных проверок для линейной модели, обученной на признаках, генерированных от предикторов в Tbl.

    newcvloss = mean(crossval(@myloss,Tbl,Y,"Partition",cvp))
    newcvloss = 0.0770
    
    function testloss = myloss(TrainTbl,trainY,TestTbl,testY)
    [Transformer,NewTrainTbl] = gencfeatures(TrainTbl,trainY,20);
    NewTestTbl = transform(Transformer,TestTbl);
    Mdl = fitclinear(NewTrainTbl,trainY);
    testloss = loss(Mdl,NewTestTbl,testY, ...
        "LossFun","classiferror");
    end

    Входные параметры

    свернуть все

    Исходные функции в виде таблицы. Каждая строка Tbl соответствует одному наблюдению, и каждый столбец соответствует одному переменному предиктору. Опционально, Tbl может содержать один дополнительный столбец для переменной отклика. Многостолбцовые переменные и массивы ячеек кроме массивов ячеек из символьных векторов не позволены.

    Если Tbl содержит переменную отклика, и вы хотите создать новые возможности из любой из остающихся переменных в Tbl, затем задайте переменную отклика при помощи ResponseVarName.

    Если Tbl содержит переменную отклика, и вы хотите создать новые возможности только из подмножества остающихся переменных в Tbl, затем задайте формулу при помощи formula.

    Если Tbl не содержит переменную отклика, затем задает переменную отклика при помощи Y. Длина переменной отклика и количество строк в Tbl должно быть равным.

    Типы данных: table

    Имя переменной отклика в виде имени переменной в Tbl.

    Необходимо задать ResponseVarName как вектор символов или строковый скаляр. Например, если переменная отклика Y хранится как Tbl.Y, затем задайте его как 'Y'. В противном случае программное обеспечение обрабатывает все столбцы Tbl как предикторы, и может создать новые возможности из Y.

    Типы данных: char | string

    Количество функций в виде положительного целочисленного скаляра. Например, можно установить q приблизительно к 1.5*size(Tbl,2), который является приблизительно 1,5 раза количеством исходных функций.

    Типы данных: single | double

    Переменная отклика в виде числового или категориального вектора. Длина Y должно быть равно количеству строк в Tbl.

    Объяснительная модель переменной отклика и подмножество переменных предикторов в виде вектора символов или строкового скаляра в форме 'Y~X1+X2+X3'. В этой форме, Y представляет переменную отклика и X1x2 , и X3 представляйте переменные предикторы.

    Создать новые возможности только из подмножества переменных предикторов в Tbl, используйте формулу. Если вы задаете формулу, то программное обеспечение не создает новые возможности ни из каких переменных в Tbl это не появляется в formula.

    Имена переменных в формуле должны быть оба именами переменных в Tbl (Tbl.Properties.VariableNames) и допустимые идентификаторы MATLAB®. Можно проверить имена переменных в Tbl при помощи isvarname функция. Если имена переменных не допустимы, то можно преобразовать их при помощи matlab.lang.makeValidName функция.

    Типы данных: char | string

    Аргументы в виде пар имя-значение

    Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

    Пример: gencfeatures(Tbl,'Y',10,'TargetLearner','bag','FeatureSelection','oob') указывает, что ожидаемый тип ученика является сложенным в мешок классификатором ансамбля, и метод для выбора функций является методом важности предиктора из сумки.

    Ожидаемый тип ученика в виде 'linear' или 'bag'. Программное обеспечение создает и выбирает новые возможности, принимающие, что они будут использоваться, чтобы обучить этот тип модели.

    ЗначениеОжидаемая модель
    'linear'ClassificationLinear — Подходящий для бинарной классификации только
    'bag'ClassificationBaggedEnsemble — Подходящий для двоичного файла и классификации мультиклассов

    По умолчанию, TargetLearner 'linear', который поддерживает бинарные переменные отклика только. Если у вас есть переменная отклика мультикласса, и вы хотите генерировать новые признаки, необходимо установить TargetLearner к 'bag'.

    Пример: 'TargetLearner','bag'

    Метод для включения исходных функций в Tbl в новой таблице NewTblВ виде одного из значений в этой таблице.

    ЗначениеОписание
    'auto'

    Это значение эквивалентно:

    • 'select' когда TargetLearner 'linear'

    • 'include' когда TargetLearner 'bag'

    'include'Программное обеспечение включает все исходные функции, которые могут быть использованы как предикторы целевым учеником и исключают неподдерживаемые функции, такие как datetime и duration переменные.
    'select'Программное обеспечение включает исходные функции, которые поддерживаются целевым учеником и считали важным заданным методом выбора признаков (FeatureSelectionMethod).
    'omit'Программное обеспечение не использует исходные функции.

    Пример: 'IncludeInputVariables','include'

    Типы данных: логический

    Метод для выбора новых возможностей в виде одного из значений в этой таблице. Программное обеспечение генерирует много признаков и использует этот метод, чтобы выбрать важные функции, чтобы включать в NewTbl.

    ЗначениеОписание
    'auto'

    Это значение эквивалентно:

    • 'lasso' когда TargetLearner 'linear'

    • 'oob' когда TargetLearner 'bag'

    'oob'Из сумки важность предиктора оценивает сочетанием — Доступный когда TargetLearner 'bag'
    'mrmr'Минимальная уместность максимума сокращения (MRMR) — Доступный, когда TargetLearner 'linear' или 'bag'
    'lasso'Ловите арканом регуляризацию — Доступный когда TargetLearner 'linear'

    Пример: 'FeatureSelection','mrmr'

    Метод стандартизации для преобразованных данных в виде одного из значений в этой таблице.

    ЗначениеОписание
    'auto'

    Это значение эквивалентно:

    • 'zscore' когда TargetLearner 'linear'

    • 'none' когда TargetLearner 'bag'

    'none'Используйте необработанные данные
    'zscore'Центр и шкала, чтобы иметь среднее значение 0 и стандартное отклонение 1
    'mad'Центр и шкала, чтобы иметь средний 0 и среднее абсолютное отклонение 1
    'range'Диапазон шкалы данных к [0,1]

    Пример: 'TransformedDataStandardization','range'

    Максимальное количество категорий позволено в категориальном предикторе в виде неотрицательного целочисленного скаляра. Если категориальный предиктор имеет больше, чем конкретное количество категорий, чем gencfeatures не создает новые возможности из предиктора. Значением по умолчанию является 50 когда TargetLearner 'linear' и Inf когда TargetLearner 'ensemble'.

    Пример: 'CategoricalEncodingLimit',20

    Типы данных: single | double

    Выходные аргументы

    свернуть все

    Спроектированный трансформатор функции, возвращенный как FeatureTransformer объект. Чтобы лучше изучить спроектированные функции, используйте describe объектная функция Transformer. Чтобы применить те же преобразования функции на новый набор данных, используйте transform объектная функция Transformer.

    Генерированные признаки, возвращенные как таблица. Каждая строка соответствует наблюдению, и каждый столбец соответствует генерированному признаку. Если переменная отклика включена в Tbl, затем NewTbl также включает переменную отклика. Используйте эту таблицу, чтобы обучить модель классификации типа TargetLearner.

    NewTbl содержит генерированные признаки в следующем порядке: исходные функции, спроектированные функции, как оценивается методом выбора признаков и переменной отклика.

    Советы

    • По умолчанию, когда TargetLearner 'linear', программное обеспечение генерирует новые признаки от числовых предикторов при помощи z-баллов (см. TransformedDataStandardization). Можно изменить тип стандартизации для преобразованных функций; однако, с помощью некоторого метода стандартизации, таким образом, избегая 'none' спецификация, строго рекомендуется. Линейный подбор кривой модели работает лучше всего со стандартизированными данными.

    Введенный в R2021a