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

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

Обучите уволенный ансамбль, использующий преобразованный набор обучающих данных 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)

Уволенный ансамбль, обученный на преобразованных данных, кажется, превосходит по характеристикам уволенный ансамбль, обученный на исходных данных.
gencfeatures | FeatureTransformer | describe | transform | fitclinear | fitcensemble | plotPartialDependence | genrfeatures