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