Покажите выбор

Введение, чтобы показать выбор

Feature selection уменьшает размерность данных путем выбора только подмножества измеренных функций (переменные прогноза), чтобы создать модель. Критерии выбора обычно включают минимизацию определенной меры прогнозирующей ошибки для подгонки моделей к различным подмножествам. Алгоритмы ищут подмножество предикторов что оптимально образцовые измеренные ответы согласно ограничениям такие как требуется или исключенные функции и размер подмножества.

Выбор функции предпочтителен, чтобы показать преобразование, когда исходные модули и значение функций важны, и цель моделирования состоит в том, чтобы идентифицировать влиятельное подмножество. То, когда категориальные функции присутствуют, и числовые преобразования являются несоответствующими, показывают выбор, становится основными средствами сокращения размерности.

Последовательный выбор функции

Общепринятой методикой выбора функции является sequential feature selection. Этот метод имеет два компонента:

  • Целевая функция, вызванная criterion, который метод стремится минимизировать по всем выполнимым подмножествам функции. Общие критерии являются среднеквадратической ошибкой (для моделей регрессии) и misclassification уровень (для моделей классификации).

  • Последовательный алгоритм поиска, который добавляет или удаляет функции из подмножества кандидата при оценке критерия. Начиная с исчерпывающего сравнения значения критерия вообще 2n подмножества n - показывают набор данных, обычно неосуществимо (в зависимости от размера n и стоимости объективных вызовов), последовательное перемещение поисковых запросов только в одном направлении, всегда растя или всегда уменьшая кандидата установило.

Метод имеет два варианта:

  • Sequential forward selection (SFS), в котором опции последовательно добавляются к пустому набору кандидата до сложения дальнейших функций, не уменьшает критерий.

  • Sequential backward selection (SBS), в котором функции последовательно удалены из полного набора кандидата до удаления дальнейших функций, увеличивает критерий.

Пошаговая регрессия является последовательным методом выбора функции, специально разработанным для подбора кривой наименьших квадратов. stepwise функций и stepwisefit используют оптимизацию, которая только возможна с критериями наименьших квадратов. В отличие от обобщенного последовательного выбора функции, пошаговая регрессия может удалить опции, которые были добавлены или добавляют опции, которые были удалены.

Функция Statistics and Machine Learning Toolbox™ sequentialfs выполняет последовательный выбор функции. Входные параметры включают данные о предикторе, данные об ответе и указатель на функцию к файлу, реализующему оценочную функцию. Дополнительные входные параметры позволяют вам задавать SFS или SBS, требуемые или исключенные функции и размер подмножества функции. Вызовы функции cvpartition и crossval, чтобы оценить критерий в различных наборах кандидата.

Выберите Subset of Features with Comparative Predictive Power

Рассмотрите набор данных с 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

Смотрите также