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);
Создание 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)

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