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 представляет переменную отклика, и X1, X2, и 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'

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

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

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

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

    • 'lasso' когда TargetLearner является 'linear'

    • 'oob' когда TargetLearner является 'bag'

    'oob'Out-of-bag, предикторные оценки важности путем сочетания - доступно, когда TargetLearner является 'bag'
    'mrmr'Минимальная максимальная релевантность избыточности (MRMR) - доступна при TargetLearner является 'linear' или 'bag'
    'lasso'Регуляризация 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