Оценка потерь с помощью перекрестной проверки
vals = crossval(fun,X)
vals = crossval(fun,X,Y,...)
mse = crossval('mse',X,y,'Predfun',predfun)
mcr = crossval('mcr',X,y,'Predfun',predfun)
val = crossval(criterion
,X1,X2,...,y,'Predfun',predfun)
vals = crossval(...,'name
',value
)
vals = crossval(fun,X)
выполняет 10-кратную перекрестную проверку для функционального fun
, применился к данным в X
.
fun
является указателем на функцию к функции с двумя входными параметрами, учебным подмножеством X
, XTRAIN
и тестового подмножества X
, XTEST
, можно следующим образом:
testval = fun(XTRAIN,XTEST)
Каждый раз, когда это называется, fun
должен использовать XTRAIN
, чтобы подобрать модель, затем возвратить некоторый критерий testval
, вычисленный на XTEST
с помощью той подобранной модели.
X
может быть вектор-столбцом или матрицей. Строки X
соответствуют наблюдениям; столбцы соответствуют переменным или функциям. Каждая строка vals
содержит результат применения fun
к одному набору тестов. Если testval
является нескалярным значением, crossval
преобразовывает его в вектор - строку, использующий линейную индексацию и сохраненный в одной строке vals
.
vals = crossval(fun,X,Y,...)
используется, когда данные хранятся в отдельных переменных X
, Y
.... Все переменные (вектор-столбцы, матрицы или массивы) должны иметь одинаковое число строк. fun
вызывается учебными подмножествами X
, Y
..., сопровождается тестовыми подмножествами X
, Y
..., можно следующим образом:
testvals = fun(XTRAIN,YTRAIN,...,XTEST,YTEST,...)
mse = crossval('mse',X,y,'Predfun',predfun)
возвращает mse
, скаляр, содержащий 10-кратную оценку перекрестной проверки среднеквадратической ошибки для функционального predfun
. X
может быть вектор-столбцом, матрицей или массивом предикторов. y
является вектор-столбцом значений ответа. X
и y
должны иметь одинаковое число строк.
predfun
является указателем на функцию, вызванным учебным подмножеством X
, учебным подмножеством y
и тестовым подмножеством X
можно следующим образом:
yfit = predfun(XTRAIN,ytrain,XTEST)
Каждый раз, когда это называется, predfun
должен использовать XTRAIN
и ytrain
, чтобы соответствовать модели регрессии и затем возвратить адаптированные значения в вектор-столбце yfit
. Каждая строка yfit
содержит ожидаемые значения для соответствующей строки XTEST
. crossval
вычисляет квадратичные невязки между yfit
и соответствующим набором тестов ответа, и возвращает полное среднее значение через все наборы тестов.
mcr = crossval('mcr',X,y,'Predfun',predfun)
возвращает mcr
, скаляр, содержащий 10-кратную оценку перекрестной проверки misclassification уровня (пропорция неправильно классифицированных выборок) для функционального predfun
. Матричный X
содержит значения предиктора, и векторный y
содержит метки класса. predfun
должен использовать XTRAIN
и YTRAIN
, чтобы соответствовать модели классификации и возвратить yfit
, когда предсказанный класс маркирует для XTEST
. crossval
вычисляет количество misclassifications между yfit
и соответствующим набором тестов ответа, и возвращает полный misclassification уровень через все наборы тестов.
val = crossval(
, то, где criterion
,X1,X2,...,y,'Predfun',predfun)criterion
является 'mse'
или 'mcr'
, возвращает оценку перекрестной проверки среднеквадратической ошибки (для модели регрессии) или misclassification уровень (для модели классификации) со значениями предиктора в X1
, X2
... и, соответственно, значениями ответа или метками класса в y
. X1
, X2
... и y
должны иметь одинаковое число строк. predfun
является указателем на функцию, вызванным учебными подмножествами X1
, X2
..., учебного подмножества y
и тестовых подмножеств X1
, X2
..., можно следующим образом:
yfit=predfun(X1TRAIN,X2TRAIN,...,ytrain,X1TEST,X2TEST,...)
yfit
должен быть вектор-столбцом, содержащим подходящие значения.
vals = crossval(...,'
задает один или несколько дополнительное название параметра / пары значения из следующей таблицы. Задайте name
',value
)name
в одинарных кавычках.
Имя | Значение |
---|---|
holdout | Скаляр, задающий отношение или количество наблюдений |
kfold | Положительное целое число, которое больше, чем 1 определение количества сгибов |
leaveout | Указывает, что перекрестная проверка "пропускает один". Значением должен быть |
mcreps | Положительное целое число, задающее количество повторений Монте-Карло для валидации. Если первым входом |
partition | Объект |
stratify | Вектор-столбец группы определения |
options | Структура, которая задает, запуститься ли параллельно, и задает случайный поток или потоки. Создайте структуру
|
Только один из kfold
, holdout
, leaveout
или partition
может быть задан, и partition
не может быть задан с stratify
. Если и partition
и mcreps
заданы, первое повторение Монте-Карло использует информацию о разделе в объекте cvpartition
, и метод repartition
называется, чтобы сгенерировать новые разделы для каждого из остающихся повторений. Если никакой тип перекрестной проверки не задан, значением по умолчанию является 10-кратная перекрестная проверка.
При использовании перекрестной проверки с алгоритмами классификации предпочтена стратификация. В противном случае некоторые наборы тестов не могут включать наблюдения от всех классов.
Вычислите среднеквадратическую ошибку для регрессии с помощью 10-кратной перекрестной проверки:
load('fisheriris'); y = meas(:,1); X = [ones(size(y,1),1),meas(:,2:4)]; regf=@(XTRAIN,ytrain,XTEST)(XTEST*regress(ytrain,XTRAIN)); cvMse = crossval('mse',X,y,'predfun',regf) cvMse = 0.1015
Вычислите misclassification уровень с помощью, расслоил 10-кратную перекрестную проверку:
load('fisheriris'); y = species; X = meas; cp = cvpartition(y,'k',10); % Stratified cross-validation classf = @(XTRAIN, ytrain,XTEST)(classify(XTEST,XTRAIN,... ytrain)); cvMCR = crossval('mcr',X,y,'predfun',classf,'partition',cp) cvMCR = 0.0200
Вычислите матрицу беспорядка использование стратифицированной 10-кратной перекрестной проверки:
load('fisheriris'); y = species; X = meas; order = unique(y); % Order of the group labels cp = cvpartition(y,'k',10); % Stratified cross-validation f = @(xtr,ytr,xte,yte)confusionmat(yte,... classify(xte,xtr,ytr),'order',order); cfMat = crossval(f,X,y,'partition',cp); cfMat = reshape(sum(cfMat),3,3) cfMat = 50 0 0 0 48 2 0 1 49
cfMat
является суммированием 10 матриц беспорядка от 10 наборов тестов.
[1] Hastie, T., Р. Тибширэни и Дж. Фридман. Элементы статистического изучения. Нью-Йорк: Спрингер, 2001.