exponenta event banner

Автоматизированное проектирование элементов для классификации

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

Создание новых функций на основе рабочего процесса машинного обучения.

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

Интерпретация линейной модели с созданными элементами

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

Загрузить 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);

Создание новых функций для повышения точности пакетированного ансамбля

Использовать 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)

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

См. также

| | | | | |