crossval

Оценка потерь с помощью перекрестной проверки

Синтаксис

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

Скаляр, задающий отношение или количество наблюдений p для перекрестной проверки затяжки. Когда 0 <p <1, приблизительно наблюдения p*n для набора тестов случайным образом выбраны. Когда p является целым числом, наблюдения p для набора тестов случайным образом выбраны.

kfold

Положительное целое число, которое больше, чем 1 определение количества сгибов k для k - перекрестная проверка сгиба.

leaveout

Указывает, что перекрестная проверка "пропускает один". Значением должен быть 1.

mcreps

Положительное целое число, задающее количество повторений Монте-Карло для валидации. Если первым входом crossval является 'mse' или 'mcr', crossval возвращает среднее значение среднеквадратической ошибки или misclassification уровня через все повторения Монте-Карло. В противном случае crossval конкатенирует значения vals от всех повторений Монте-Карло по первому измерению.

partition

Объект c класса cvpartition, задавая тип перекрестной проверки и раздел.

stratify

Вектор-столбец группы определения group для стратификации. И наборы обучающих данных и наборы тестов имеют примерно те же пропорции класса как в group. NaN s, пустые символьные вектора, пустые строки, значения <missing> и значения <undefined> в group обработаны как пропускающий значения данных, и соответствующие строки данных проигнорированы.

options

Структура, которая задает, запуститься ли параллельно, и задает случайный поток или потоки. Создайте структуру options с statset. Поля опции:

  • 'UseParallel' Установите на true, чтобы вычислить параллельно. Значением по умолчанию является false.

    Вам нужен Parallel Computing Toolbox™ для параллельного вычисления.

  • UseSubstreams — Установите на true, чтобы вычислить параллельно восстанавливаемым способом. Значением по умолчанию является false. Чтобы вычислить восстанавливаемо, установите Streams на тип, позволяющий подпотоки: 'mlfg6331_64' или 'mrg32k3a'.

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

Только один из kfold, holdout, leaveout или partition может быть задан, и partition не может быть задан с stratify. Если и partition и mcreps заданы, первое повторение Монте-Карло использует информацию о разделе в объекте cvpartition, и метод repartition называется, чтобы сгенерировать новые разделы для каждого из остающихся повторений. Если никакой тип перекрестной проверки не задан, значением по умолчанию является 10-кратная перекрестная проверка.

Примечание

При использовании перекрестной проверки с алгоритмами классификации предпочтена стратификация. В противном случае некоторые наборы тестов не могут включать наблюдения от всех классов.

Примеры

Пример 1

Вычислите среднеквадратическую ошибку для регрессии с помощью 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

Пример 2

Вычислите 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

Пример 3

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

Расширенные возможности

Введенный в R2008a