Последовательный выбор функции
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' | Метод валидации раньше вычислял критерий каждого подмножества функции кандидата.
Значением по умолчанию является Так называемый wrapper methods использует функциональный |
'mcreps' | Положительное целое число, указывающее на количество повторений Монте-Карло для перекрестной проверки. Значением по умолчанию является |
'direction' | Направление последовательного поиска. Значением по умолчанию является |
'keepin' | Логический вектор или вектор номеров столбцов, задающих функции, которые должны быть включены. Значение по умолчанию пусто. |
'keepout' | Логический вектор или вектор номеров столбцов, задающих функции, которые должны быть исключены. Значение по умолчанию пусто. |
'nfeatures' | Количество функций, в которых должен остановиться |
'nullmodel' | Логическое значение, указывая, должна ли пустая модель (содержащий функции от |
'options' | Структура опций для итеративного последовательного алгоритма поиска, как создано
Чтобы вычислить параллельно, вам нужен 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