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