exponenta event banner

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

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

Примечание

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-кратная перекрестная проверка без стратификации.

Так называемые методы обертки используют функцию fun который реализует алгоритм обучения. Эти методы обычно применяют перекрестную проверку для выбора элементов. Так называемые методы фильтра используют функцию 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'.

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

Для параллельного вычисления необходимо использовать Toolbox™ Parallel Computing.

Примеры

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

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