Последовательный выбор признаков с использованием пользовательского критерия
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
вычисляет коэффициент неправильной классификации в этом случае).
Примечание
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' | Логическое значение, указывающее, является ли модель null или нет (не содержащая функций от |
'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 0
crossval
| cvpartition
| fscmrmr
| fscnca
| fsrnca
| fsulaplacian
| relieff
| statset
| stepwiselm