Последовательный выбор признаков

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

См. также

| |

Похожие темы