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

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)

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

См. также

| | | | | |

Для просмотра документации необходимо авторизоваться на сайте