Эта тема вводит последовательному выбору признаков и обеспечивает пример, который выбирает функции последовательно с помощью пользовательского критерия и sequentialfs
функция.
Общепринятой методикой Выбора признаков является sequential feature selection. Этот метод имеет два компонента:
Целевая функция, вызванная criterion, который метод стремится минимизировать по всем выполнимым подмножествам функции. Общие критерии являются среднеквадратической ошибкой (для моделей регрессии) и misclassification уровень (для моделей классификации).
Последовательный алгоритм поиска, который добавляет или удаляет функции из подмножества кандидата при оценке критерия. Начиная с исчерпывающего сравнения значения критерия вообще 2n подмножества n - показывают набор данных, обычно неосуществимо (в зависимости от размера n и стоимости объективных вызовов), последовательное перемещение поисковых запросов только в одном направлении, всегда растя или всегда уменьшая кандидата установило.
Метод имеет два варианта:
Sequential forward selection (SFS), в котором опции последовательно добавляются к пустому набору кандидата до сложения дальнейших функций, не уменьшает критерий.
Sequential backward selection (SBS), в котором функции последовательно удалены из полного набора кандидата до удаления дальнейших функций, увеличивает критерий.
Statistics and Machine Learning Toolbox™ предлагает несколько последовательных функций выбора признаков:
Ступенчатая регрессия является последовательным методом выбора признаков, специально разработанным для подбора кривой наименьших квадратов. Функции stepwiselm
и stepwiseglm
используйте оптимизацию, которая возможна только с критериями наименьших квадратов. В отличие от других последовательных алгоритмов выбора признаков, ступенчатая регрессия может удалить опции, которые были добавлены или добавляют опции, которые были удалены, на основе критерия, заданного 'Criterion'
аргумент пары "имя-значение".
sequentialfs
выполняет последовательный выбор признаков с помощью пользовательского критерия. Входные параметры включают данные о предикторе, данные об ответе и указатель на функцию к файлу, реализующему оценочную функцию. Можно задать оценочную функцию, которая измеряет характеристики данных или эффективность алгоритма обучения. Дополнительные входные параметры позволяют вам задавать SFS или SBS, требуемые или исключенные функции и размер подмножества функции. Вызовы функции cvpartition
и crossval
оценивать критерий в различных наборах кандидата.
fscmrmr
функции рангов с помощью алгоритма минимальной уместности максимума сокращения (MRMR) для проблем классификации.
Этот пример выбирает подмножество функций с помощью пользовательского критерия, который измеряет предсказательную силу для обобщенной линейной проблемы регрессии.
Рассмотрите набор данных с 100 наблюдениями за 10 предикторами. Сгенерируйте случайные данные из логистической модели с биномиальным распределением ответов в каждом множестве значений для предикторов. Некоторые коэффициенты обнуляются так, чтобы не все предикторы влияли на ответ.
rng(456) % Set the seed for reproducibility
n = 100;
m = 10;
X = rand(n,m);
b = [1 0 0 2 .5 0 0 0.1 0 1];
Xb = X*b';
p = 1./(1+exp(-Xb));
N = 50;
y = binornd(N,p);
Подбирайте логистическую модель к данным с помощью fitglm
.
Y = [y N*ones(size(y))]; model0 = fitglm(X,Y,'Distribution','binomial')
model0 = Generalized linear regression model: logit(y) ~ 1 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10 Distribution = Binomial Estimated Coefficients: Estimate SE tStat pValue _________ _______ ________ __________ (Intercept) 0.22474 0.30043 0.74806 0.45443 x1 0.68782 0.17207 3.9973 6.408e-05 x2 0.2003 0.18087 1.1074 0.26811 x3 -0.055328 0.18871 -0.29319 0.76937 x4 2.2576 0.1813 12.452 1.3566e-35 x5 0.54603 0.16836 3.2432 0.0011821 x6 0.069701 0.17738 0.39294 0.69437 x7 -0.22562 0.16957 -1.3306 0.18334 x8 -0.19712 0.17317 -1.1383 0.25498 x9 -0.20373 0.16796 -1.213 0.22514 x10 0.99741 0.17247 5.7832 7.3296e-09 100 observations, 89 error degrees of freedom Dispersion: 1 Chi^2-statistic vs. constant model: 222, p-value = 4.92e-42
Отобразите отклонение подгонки.
dev0 = model0.Deviance
dev0 = 101.5648
Эта модель является полной моделью со всеми функциями и начальным постоянным термином. Последовательный выбор признаков ищет подмножество функций в полной модели со сравнительной предсказательной силой.
Прежде, чем выполнить выбор признаков, необходимо задать критерий выбора функций. В этом случае критерий является отклонением подгонки (обобщение остаточной суммы квадратов). critfun
функция (показанный в конце этого примера) вызывает fitglm
и возвращает отклонение подгонки.
Если вы используете файл live скрипта для этого примера, critfun
функция уже включена в конце файла. В противном случае необходимо создать эту функцию в конце.m файла или добавить его как файл на пути MATLAB.
Выполните выбор признаков. sequentialfs
вызывает оценочную функцию через указатель на функцию.
maxdev = chi2inv(.95,1); opt = statset('display','iter',... 'TolFun',maxdev,... 'TolTypeFun','abs'); inmodel = sequentialfs(@critfun,X,Y,... 'cv','none',... 'nullmodel',true,... 'options',opt,... 'direction','forward');
Start forward sequential feature selection: Initial columns included: none Columns that can not be included: none Step 1, used initial columns, criterion value 323.173 Step 2, added column 4, criterion value 184.794 Step 3, added column 10, criterion value 139.176 Step 4, added column 1, criterion value 119.222 Step 5, added column 5, criterion value 107.281 Final columns included: 1 4 5 10
Итеративное отображение показывает уменьшение в значении критерия, когда каждая новая опция добавляется к модели. Конечным результатом является упрощенная модель с только четырьмя из исходных десяти функций: столбцы 1
, 4, 5
, и
10
из X
, как обозначено в логическом векторном inmodel
возвращенный sequentialfs
.
Отклонение упрощенной модели выше, чем отклонение полной модели. Однако сложение любой другой одной функции не уменьшило бы значение критерия больше, чем абсолютная погрешность, maxdev
, установите в структуре опций. Добавление опции без эффекта уменьшает отклонение суммой, которая имеет распределение хи-квадрат с одной степенью свободы. Добавление значительной функции приводит к большему изменению в отклонении. Установкой maxdev
к chi2inv(.95,1)
, вы сообщаете sequentialfs
продолжать добавлять опции при условии, что изменение в отклонении является больше, чем изменение, ожидаемое случайным шансом.
Создайте упрощенную модель с начальным постоянным термином.
model = fitglm(X(:,inmodel),Y,'Distribution','binomial')
model = Generalized linear regression model: logit(y) ~ 1 + x1 + x2 + x3 + x4 Distribution = Binomial Estimated Coefficients: Estimate SE tStat pValue __________ _______ _________ __________ (Intercept) -0.0052025 0.16772 -0.031018 0.97525 x1 0.73814 0.16316 4.5241 6.0666e-06 x2 2.2139 0.17402 12.722 4.4369e-37 x3 0.54073 0.1568 3.4485 0.00056361 x4 1.0694 0.15916 6.7191 1.8288e-11 100 observations, 95 error degrees of freedom Dispersion: 1 Chi^2-statistic vs. constant model: 216, p-value = 1.44e-45
Этот код создает функциональный critfun
.
function dev = critfun(X,Y) model = fitglm(X,Y,'Distribution','binomial'); dev = model.Deviance; end
sequentialfs
| stepwiseglm
| stepwiselm