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

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

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

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

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

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

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

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

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

Генерируйте 10 новых признаков от переменных в Tbl. Задайте Systolic переменная как ответ. По умолчанию, genrfeatures принимает, что новые функции будут использованы, чтобы обучить модель линейной регрессии.

rng("default") % For reproducibility
[T,NewTbl] = genrfeatures(Tbl,"Systolic",10)
T = 
  FeatureTransformer with properties:

                     Type: 'regression'
            TargetLearner: 'linear'
    NumEngineeredFeatures: 10
      NumOriginalFeatures: 0
         TotalNumFeatures: 10

NewTbl=100×11 table
    zsc(d(Smoker))    q8(Age)    eb8(Age)    zsc(sin(Height))    zsc(kmd8)    q6(Height)    eb8(Diastolic)    q8(Diastolic)    zsc(fenc(c(SelfAssessedHealthStatus)))    q10(Weight)    Systolic
    ______________    _______    ________    ________________    _________    __________    ______________    _____________    ______________________________________    ___________    ________

         1.3863          4          5              1.1483         -0.56842        6               8                 8                         0.27312                        7            124   
       -0.71414          6          6             -0.3877          -2.0772        5               2                 2                         -1.4682                        6            109   
       -0.71414          4          5              1.1036         -0.21519        2               4                 5                         0.82302                        3            125   
       -0.71414          5          6             -1.4552         -0.32389        4               2                 2                         -1.4682                        4            117   
       -0.71414          8          8              1.1036           1.2302        2               3                 4                         0.82302                        1            122   
       -0.71414          7          7             -1.5163         -0.88497        4               1                 1                         0.82302                        5            121   
         1.3863          3          3              1.1036          -1.1434        2               6                 6                         0.82302                        5            130   
       -0.71414          5          6             -1.5163          -0.3907        4               4                 5                         0.82302                        8            115   
       -0.71414          1          2             -1.5163           0.4278        4               3                 3                         0.27312                        9            115   
       -0.71414          2          3            -0.26055        -0.092621        3               5                 6                         0.27312                        3            118   
       -0.71414          7          7             -1.5163          0.16737        4               2                 2                         0.27312                        2            114   
       -0.71414          6          6            -0.26055         -0.32104        3               1                 1                         -1.8348                        5            115   
       -0.71414          1          1              1.1483        -0.051074        6               1                 1                         -1.8348                        7            127   
         1.3863          5          5             0.14351           2.3695        6               8                 8                         0.27312                        10           130   
       -0.71414          3          4             0.96929         0.092962        2               3                 4                         0.82302                        3            114   
         1.3863          8          8              1.1483        -0.049336        6               7                 8                         0.82302                        8            130   
      ⋮

T FeatureTransformer объект, который может использоваться, чтобы преобразовать новые данные и newTbl содержит новые признаки, генерированные от Tbl данные.

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

describe(T,1:2)
                         Type        IsOriginal    InputVariables                          Transformations
                      ___________    __________    ______________    ___________________________________________________________

    zsc(d(Smoker))    Numeric          false           Smoker        Variable of type double converted from an integer data type
                                                                     Standardization with z-score (mean = 0.34, std = 0.4761)
    q8(Age)           Categorical      false           Age           Equiprobable binning (number of bins = 8)

Первая функция в newTbl числовая переменная, созданная первым преобразованием значений Smoker переменная к числовой переменной типа double и затем преобразовывая результаты к z-баллам. Вторая функция в newTbl категориальная переменная, созданная раскладыванием значения Age переменная в 8 равновероятных интервалов.

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

Mdl = fitrlinear(NewTbl,"Systolic",Lambda=0);

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

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 = 1x6 cell
  Columns 1 through 3

    {'eb8(Diastolic)...'}    {'zsc(d(Smoker))'}    {'q8(Age) >= 2'}

  Columns 4 through 6

    {'q10(Weight) >= 9'}    {'q6(Height) >= 5'}    {'eb8(Diastolic)...'}

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

plotPartialDependence(Mdl,"eb8(Diastolic)",NewTbl);

Figure contains an axes object. The axes object with title Partial Dependence Plot contains an object of type line.

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

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

Считайте данные об отключении электроэнергии в рабочую область как таблица. Удалите наблюдения с отсутствующими значениями и отобразите первые несколько строк таблицы.

outages = readtable("outages.csv");
Tbl = rmmissing(outages);
head(Tbl)
ans=8×6 table
       Region           OutageTime        Loss     Customers     RestorationTime            Cause       
    _____________    ________________    ______    __________    ________________    ___________________

    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
    {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
    {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }
    {'West'     }    2003-06-18 02:49         0             0    2003-06-18 10:54    {'attack'         }
    {'NorthEast'}    2003-07-16 16:23    239.93         49434    2003-07-17 01:12    {'fire'           }
    {'MidWest'  }    2004-09-27 11:09    286.72         66104    2004-09-27 16:37    {'equipment fault'}
    {'SouthEast'}    2004-09-05 17:48    73.387         36073    2004-09-05 20:46    {'equipment fault'}

Некоторые переменные, такие как OutageTime и RestorationTime, имейте типы данных, которые не поддерживаются функциями обучения модели регрессии как fitrensemble.

Разделите данные в наборы обучающих данных и наборы тестов. Используйте приблизительно 70% наблюдений как обучающие данные и 30% наблюдений как тестовые данные. Разделите данные с помощью cvpartition.

rng("default") % For reproducibility of the partition
c = cvpartition(size(Tbl,1),Holdout=0.30);
TrainTbl = Tbl(training(c),:);
TestTbl = Tbl(test(c),:);

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

[Transformer,NewTrainTbl] = genrfeatures(TrainTbl,"Loss",30, ...
    TargetLearner="bag");
Transformer
Transformer = 
  FeatureTransformer with properties:

                     Type: 'regression'
            TargetLearner: 'bag'
    NumEngineeredFeatures: 27
      NumOriginalFeatures: 3
         TotalNumFeatures: 30

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

NewTestTbl = transform(Transformer,TestTbl);

Обучите уволенный ансамбль, использующий исходный набор обучающих данных TrainTbl, и вычислите среднеквадратическую ошибку (MSE) модели на исходном наборе тестов TestTbl. Задайте только три переменных предиктора, которые могут использоваться fitrensemble (Region, Customers, и Cause), и не используйте два datetime переменные предикторы (OutageTime и RestorationTime). Затем обучите уволенный ансамбль, использующий преобразованный набор обучающих данных NewTrainTbl, и вычислите MSE модели на преобразованном наборе тестов NewTestTbl.

originalMdl = fitrensemble(TrainTbl,"Loss ~ Region + Customers + Cause", ...
    Method="bag");
originalTestMSE = loss(originalMdl,TestTbl)
originalTestMSE = 1.8999e+06
newMdl = fitrensemble(NewTrainTbl,"Loss",Method="bag");
newTestMSE = loss(newMdl,NewTestTbl)
newTestMSE = 1.8617e+06

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

Сравните предсказанные значения отклика набора тестов с истинными значениями отклика для обеих моделей. Постройте журнал предсказанного ответа вдоль вертикальной оси и журнал истинного ответа (Loss) вдоль горизонтальной оси. Точки на ссылочной линии указывают на правильные предсказания. Хорошая модель производит предсказания, которые рассеиваются около линии.

predictedTestY = predict(originalMdl,TestTbl);
newPredictedTestY = predict(newMdl,NewTestTbl);

plot(log(TestTbl.Loss),log(predictedTestY),".")
hold on
plot(log(TestTbl.Loss),log(newPredictedTestY),".")
hold on
plot(log(TestTbl.Loss),log(TestTbl.Loss))
hold off
xlabel("log(True Response)")
ylabel("log(Predicted Response)")
legend(["Original Model Results","New Model Results","Reference Line"], ...
    Location="southeast")
xlim([-1 10])
ylim([-1 10])

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Original Model Results, New Model Results, Reference Line.

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

| | | | | | |