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