Последовательный выбор элемента с использованием пользовательского критерия
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' | Метод проверки, используемый для вычисления критерия для каждого подмножества элементов-кандидатов.
Значение по умолчанию: Так называемые методы обертки используют функцию |
'mcreps' | Положительное целое число, указывающее количество повторений Монте-Карло для перекрестной проверки. Значение по умолчанию: |
'direction' | Направление последовательного поиска. Значение по умолчанию: |
'keepin' | Логический вектор или вектор номеров столбцов, задающий элементы, которые должны быть включены. Значение по умолчанию пустое. |
'keepout' | Логический вектор или вектор номеров столбцов, задающий элементы, которые необходимо исключить. Значение по умолчанию пустое. |
'nfeatures' | Количество элементов, при котором |
'nullmodel' | Логическое значение, указывающее, должна ли нулевая модель (не содержащая элементов из |
'options' | Структура опций для алгоритма итеративного последовательного поиска, созданного
Для параллельного вычисления необходимо использовать 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 0crossval | cvpartition | fscmrmr | fscnca | fsrnca | fsulaplacian | relieff | statset | stepwiselm