В этом разделе описывается последовательный выбор признаков и приводится пример, который выбирает функции последовательно с помощью пользовательского критерия и 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