В этом разделе описывается последовательный выбор признаков и приводится пример, который выбирает функции последовательно с помощью пользовательского критерия и sequentialfs
функция.
Общим методом выбора признаков является sequential feature selection. Этот метод имеет два компонента:
Целевая функция, называемая criterion, которую метод стремится минимизировать по всем допустимым подмножествам признаков. Общими критериями являются средняя квадратичная невязка (для регрессионых моделей) и вероятность неправильной классификации (для классификационных моделей).
Алгоритм последовательного поиска, который добавляет или удаляет функции из подмножества кандидатов при оценке критерия. Поскольку исчерпывающее сравнение значения критерия во всех 2n подмножества набора данных n-feature обычно недопустимы (в зависимости от размера 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
Эта модель является полной моделью со всеми функциями и начальным постоянным термином. Последовательный выбор признаков ищет подмножество функций в полной модели со сравнительной прогностической степенью.
Перед выполнением выбора признаков необходимо задать критерий для выбора функций. При этом критерием является отклонение подгонки (обобщение остаточной суммы квадратов). The 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