sequentialfs

Последовательный выбор признаков с помощью пользовательского критерия

Синтаксис

inmodel = sequentialfs(fun,X,y)
inmodel = sequentialfs(fun,X,Y,Z,...)
[inmodel,history] = sequentialfs(fun,X,...)
[] = sequentialfs(...,param1,val1,param2,val2,...)

Описание

inmodel = sequentialfs(fun,X,y) выбирает подмножество функций от матрицы данных X тот лучше всего предсказывают данные в y путем последовательного выбора функций до нет никакого улучшения прогноза. Строки X соответствуйте наблюдениям; столбцы соответствуют переменным или функциям. y вектор-столбец значений ответа или меток класса для каждого наблюдения в XX и y должен иметь одинаковое число строк. fun указатель на функцию к функции, которая задает критерий, используемый, чтобы выбрать функции и определить, когда остановиться. Выход inmodel логический вектор, указывающий, какие функции наконец выбраны.

Начиная с пустого набора функций, sequentialfs создает подмножества функции кандидата путем последовательного добавления каждой из опций, еще не выбранных. Поскольку каждый кандидат показывает подмножество, sequentialfs выполняет 10-кратную перекрестную проверку путем повторного вызова fun с различными учебными подмножествами X и y, XTRAIN и ytrain, и протестируйте подмножества X и y, XTEST и ytest, можно следующим образом:

criterion = fun(XTRAIN,ytrain,XTEST,ytest)

XTRAIN и ytrain содержите то же подмножество строк X и Y, в то время как XTEST и ytest содержите дополнительное подмножество строк. XTRAIN и XTEST содержите данные, взятые из столбцов X это соответствует текущему набору функций кандидата.

Каждый раз это называется, fun должен возвратить скалярное значение criterion. Как правило, fun использование XTRAIN и ytrain чтобы обучаться или подобрать модель, затем предсказывает значения для XTEST использование той модели, и наконец возвращает некоторую меру расстояния или loss, тех ожидаемых значений от ytest. В вычислении перекрестной проверки для данного набора функций кандидата, sequentialfs суммирует значения, возвращенные fun и делит ту сумму на общее количество тестовых наблюдений. Это затем использует то среднее значение, чтобы оценить каждое подмножество функции кандидата.

Типичные меры потерь включают сумму квадратичных невязок для моделей регрессии (sequentialfs вычисляет среднеквадратическую ошибку в этом случае), и количество неправильно классифицированных наблюдений для моделей классификации (sequentialfs вычисляет misclassification уровень в этом случае).

Примечание

sequentialfs делит сумму значений, возвращенных fun через все наборы тестов общим количеством тестовых наблюдений. Соответственно, fun не должен делить его выходное значение на количество тестовых наблюдений.

После вычисления среднего criterion значения для каждого кандидата показывают подмножество, sequentialfs выбирает подмножество функции кандидата, которое минимизирует среднее значение критерия. Этот процесс продолжается до добавления большего количества опций, не уменьшает критерий.

inmodel = sequentialfs(fun,X,Y,Z,...) позволяет любое количество входных переменных XYZ.... sequentialfs выбирает функции (столбцы) только от X, но в противном случае не налагает интерпретации на XYZ.... Все вводы данных, или вектор-столбцы или матрицы, должны иметь одинаковое число строк. sequentialfs вызовы fun с обучением и тестовыми подмножествами XYZ... можно следующим образом:

criterion = fun(XTRAIN,YTRAIN,ZTRAIN,...,
                XTEST,YTEST,ZTEST,...)

sequentialfs создает XTRAIN, YTRAIN, ZTRAIN..., XTEST, YTEST, ZTEST... путем выбора подмножеств строк XYZ.... fun должен возвратить скалярное значение criterion, но может вычислить то значение в любом случае. Элементы логического векторного inmodel соответствуйте столбцам X и укажите, какие функции наконец выбраны.

[inmodel,history] = sequentialfs(fun,X,...) возвращает информацию, на которой функция выбрана на каждом шаге. history скалярная структура со следующими полями:

  • Crit — Вектор, содержащий значения критерия, вычисляется на каждом шаге.

  • In — Логическая матрица, в который строка i указывает на функции, выбранные на шаге i.

[] = sequentialfs(...,param1,val1,param2,val2,...) задает дополнительное название параметра / пары значения из следующей таблицы.

ПараметрЗначение
'cv'

Метод валидации использовался для расчета критерия каждого подмножества функции кандидата.

  • Когда значением является положительный целочисленный k, sequentialfs использование k- сверните перекрестную проверку без стратификации.

  • Когда значение является объектом cvpartition класс, другие формы перекрестной проверки могут быть заданы.

  • Когда значением является 'resubstitution', исходные данные передаются fun и как обучение и как тестовые данные, чтобы вычислить критерий.

  • Когда значением является 'none', sequentialfs вызовы fun как criterion = fun(X,Y,Z,...), не разделяя наборы тестов и наборы обучающих данных.

Значением по умолчанию является 10, то есть, 10-кратная перекрестная проверка без стратификации.

Так называемое использование wrapper methods функциональный fun это реализует алгоритм обучения. Эти методы обычно применяют перекрестную проверку, чтобы выбрать функции. Так называемое использование filter methods функциональный fun это измеряет характеристики данных (такие как корреляция), чтобы выбрать функции.

'mcreps'

Положительное целое число, указывающее на количество повторений Монте-Карло для перекрестной проверки. Значением по умолчанию является 1. Значением должен быть 1 если значение 'cv' 'resubstitution' или 'none'.

'direction'

Направление последовательного поиска. Значением по умолчанию является 'forward'. Значение 'backward' задает начальный набор кандидата включая все функции и алгоритм, который удаляет функции последовательно, пока критерий не увеличивается.

'keepin'

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

'keepout'

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

'nfeatures'

Количество функций, в который sequentialfs должен остановиться. inmodel включает точно это много функций. Значение по умолчанию пусто, указывая на тот sequentialfs должен остановиться, когда локальный минимум критерия найден. Непустое значение заменяет значения 'MaxIter' и 'TolFun' в 'options'.

'nullmodel'

Логическое значение, указывая, действительно ли пустая модель (содержащий функции от X) должен быть включен в выбор признаков и в history вывод . Значением по умолчанию является false.

'options'

Структура опций для итеративного последовательного алгоритма поиска, как создано statset.

sequentialfs использует следующий statset параметры:

  • Display — Объем информации отображен алгоритмом. Значением по умолчанию является 'off'.

  • MaxIter — Максимальное количество итераций позволено. Значением по умолчанию является Inf.

  • TolFun — Допуск завершения к значению целевой функции. Значением по умолчанию является 1e-6 если 'direction' 'forward'; 0 если 'direction' 'backward'.

  • TolTypeFun — Используйте абсолютные или относительные допуски целевой функции. Значением по умолчанию является 'rel'.

  • UseParallel — Установите на true вычислить параллельно. Значением по умолчанию является false.

  • UseSubstreams — Установите на true вычислить параллельно восстанавливаемым способом. Значением по умолчанию является false. Чтобы вычислить восстанавливаемо, установите Streams к типу, позволяющему подпотоки: 'mlfg6331_64' или 'mrg32k3a'.

  • StreamsRandStream объектный массив или массив ячеек, состоящий из одного такого объекта. Если вы не задаете Streams, sequentialfs использует поток по умолчанию.

Чтобы вычислить параллельно, вам нужен Parallel Computing Toolbox™.

Примеры

Выполните последовательный выбор признаков для классификации шумных функций:

load fisheriris
rng('default') % For reproducibility
X = randn(150,10);
X(:,[1 3 5 7])= meas;
y = species;

c = cvpartition(y,'k',10);
opts = statset('Display','iter');
fun = @(XT,yT,Xt,yt)loss(fitcecoc(XT,yT),Xt,yt);

[fs,history] = sequentialfs(fun,X,y,'cv',c,'options',opts)

Start forward sequential feature selection:
Initial columns included:  none
Columns that can not be included:  none
Step 1, added column 5, criterion value 0.00266667
Step 2, added column 7, criterion value 0.00222222
Step 3, added column 1, criterion value 0.00177778
Step 4, added column 3, criterion value 0.000888889
Final columns included:  1 3 5 7 

fs =

  1×10 logical array

   1   0   1   0   1   0   1   0   0   0


history = 

  struct with fields:

      In: [4×10 logical]
    Crit: [0.0027 0.0022 0.0018 8.8889e-04]

history.In

ans =

  4×10 logical array

   0   0   0   0   1   0   0   0   0   0
   0   0   0   0   1   0   1   0   0   0
   1   0   0   0   1   0   1   0   0   0
   1   0   1   0   1   0   1   0   0   0

Расширенные возможности

Введенный в R2008a