exponenta event banner

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);

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

    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 признаков из данных обучения, а затем применяет те же преобразования набора обучения к данным тестирования. Затем функция подгоняет линейный классификатор к учебным данным и вычисляет потери тестового набора.

    Примечание.Если для этого примера используется файл сценария в реальном времени, 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'Оценки важности предиктора вне пакета по перестановкам - доступны, когда 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