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

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

Генерируйте новые признаки на основе своего рабочего процесса машинного обучения.

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

Интерпретируйте линейную модель с генерированными признаками

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

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

load patients
Tbl = table(Age,Diastolic,Gender,Height,SelfAssessedHealthStatus, ...
    Systolic,Weight,Smoker);
head(Tbl)
ans=8×8 table
    Age    Diastolic      Gender      Height    SelfAssessedHealthStatus    Systolic    Weight    Smoker
    ___    _________    __________    ______    ________________________    ________    ______    ______

    38        93        {'Male'  }      71           {'Excellent'}            124        176      true  
    43        77        {'Male'  }      69           {'Fair'     }            109        163      false 
    38        83        {'Female'}      64           {'Good'     }            125        131      false 
    40        75        {'Female'}      67           {'Fair'     }            117        133      false 
    49        80        {'Female'}      64           {'Good'     }            122        119      false 
    46        70        {'Female'}      68           {'Good'     }            121        142      false 
    33        88        {'Female'}      64           {'Good'     }            130        142      true  
    40        82        {'Male'  }      68           {'Good'     }            115        180      false 

Генерируйте 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 категориальная переменная, созданная раскладыванием значения Diastolic переменная в 8 интервалов равной ширины.

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

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

Figure contains an axes object. The axes object with title Coefficients for Expanded Predictors contains an object of type bar.

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

bigCoefs = abs(sortedCoefs) >= 4;
flip(sortedExpandedPreds(bigCoefs))
ans = 1x7 cell
  Columns 1 through 3

    {'zsc(Systolic.^2)'}    {'eb8(Systolic) ...'}    {'q8(Diastolic) ...'}

  Columns 4 through 6

    {'eb8(Diastolic)...'}    {'q8(Systolic) >= 6'}    {'q8(Diastolic) ...'}

  Column 7

    {'zsc(Height-Sys...'}

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

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

Figure contains an axes object. The axes object with title Partial Dependence Plot contains 2 objects of type line. These objects represent 0, 1.

Генерируйте новые признаки, чтобы улучшить сложенную в мешок точность ансамбля

Используйте 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

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

newCreditTest = transform(T,creditTest);

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

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

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

Figure contains an object of type ConfusionMatrixChart.

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

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

Figure contains an object of type ConfusionMatrixChart.

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

Смотрите также

| | | | | | |