genrfeatures функция позволяет вам автоматизировать процесс разработки функции в контексте рабочего процесса машинного обучения. Прежде, чем передать табличные обучающие данные модели регрессии, можно создать новые возможности из предикторов в данных при помощи genrfeatures. Используйте возвращенные данные, чтобы обучить модель.
Генерируйте новые признаки на основе своего рабочего процесса машинного обучения.
Чтобы генерировать признаки для поддающейся толкованию модели регрессии, используйте TargetLearner по умолчанию значение "linear" в вызове genrfeatures. Можно затем использовать возвращенные данные, чтобы обучить модель линейной регрессии. Для примера смотрите, Интерпретируют Линейную Модель с Генерированными Признаками.
Чтобы генерировать признаки, которые могут привести к лучшему предсказанию модели, задайте TargetLearner="bag" в вызове 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")

Идентифицируйте предикторы, коэффициенты которых имеют большие абсолютные значения.
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);
Используйте 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])

genrfeatures | FeatureTransformer | describe | transform | fitrlinear | fitrensemble | plotPartialDependence | gencfeatures