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 является вектор-столбцом значений ответа или меток класса для каждого наблюдения в X. X и 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,...) позволяет любое количество входных переменных X, Y, Z.... sequentialfs выбирает функции (столбцы) только от X, но в противном случае не налагает интерпретации на X, Y, Z.... Все вводы данных, или вектор-столбцы или матрицы, должны иметь одинаковое число строк. sequentialfs вызывает fun с обучением и тестовыми подмножествами X, Y, Z... можно следующим образом:

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

sequentialfs создает XTRAIN, YTRAIN, ZTRAIN..., XTEST, YTEST, ZTEST... путем выбора подмножеств строк X, Y, Z.... 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:

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

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

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

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

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

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

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

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

Примеры

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

load fisheriris;
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)...
      (sum(~strcmp(yt,classify(Xt,XT,yT,'quadratic'))));

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

Start forward sequential feature selection:
Initial columns included: none
Columns that cannot be included: none
Step 1, added column 7, criterion value 0.04
Step 2, added column 5, criterion value 0.0266667
Final columns included:  5 7 

fs =
     0  0  0  0  1  0  1  0  0  0
history = 
      In: [2x10 logical]
    Crit: [0.0400 0.0267]

history.In
ans =
     0  0  0  0  0  0  1  0  0  0
     0  0  0  0  1  0  1  0  0  0

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

Введенный в R2008a