exponenta event banner

Выбор последовательного элемента

В этом разделе описывается последовательный выбор элементов и приводится пример последовательного выбора элементов с использованием пользовательского критерия и sequentialfs функция.

Введение в последовательный выбор элементов

Общим методом выбора элементов является последовательный выбор элементов. Этот метод имеет два компонента:

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

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

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

  • Последовательный прямой выбор (SFS), в котором элементы последовательно добавляются в пустой набор кандидатов до тех пор, пока добавление дополнительных элементов не уменьшит критерий.

  • Последовательный обратный выбор (SBS), при котором элементы последовательно удаляются из полного набора кандидатов до тех пор, пока удаление других элементов не увеличит критерий.

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 и возвращает отклонение посадки.

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

См. также

| |

Связанные темы