exponenta event banner

crossval

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

Описание

пример

err = crossval(criterion,X,y,'Predfun',predfun) возвращает 10-кратную оценку ошибки перекрестной проверки для функции predfun на основе указанного criterion, либо 'mse' (средняя квадратичная ошибка) или 'msc' (коэффициент неправильной классификации). Строки X и y соответствуют наблюдениям и столбцам X соответствуют переменным предиктора.

Дополнительные сведения см. в разделе Общие шаги перекрестной проверки для предфуна.

пример

err = crossval(criterion,X1,...,XN,y,'Predfun',predfun) возвращает 10-кратную оценку ошибки перекрестной проверки для predfun с использованием переменных предиктора X1 через XN и переменная ответа y.

пример

values = crossval(fun,X) выполняет 10-кратную перекрестную проверку для функции fun, применяется к данным в X. Строки X соответствуют наблюдениям и столбцам X соответствуют переменным.

Дополнительные сведения см. в разделе Общие шаги перекрестной проверки.

пример

values = crossval(fun,X1,...,XN) выполняет 10-кратную перекрестную проверку для функции fun, применяется к данным в X1,...,XN. Каждый набор данных, X1 через XN, должно иметь одинаковое количество наблюдений и, следовательно, одинаковое количество строк.

пример

___ = crossval(___,Name,Value) задает параметры перекрестной проверки с использованием одного или нескольких аргументов пары имя-значение в дополнение к любой из комбинаций входных аргументов и выходных аргументов в предыдущих синтаксисах. Например, 'KFold',5 указывает на выполнение пятикратной перекрестной проверки.

Примеры

свернуть все

Вычислите среднюю квадратичную ошибку регрессионной модели, используя 10-кратную перекрестную проверку.

Загрузить carsmall набор данных. Поместите в матрицу значения ускорения, лошадиных сил, веса и миль на галлон (MPG) data. Удалить все строки, содержащие NaN значения.

load carsmall
data = [Acceleration Horsepower Weight MPG];
data(any(isnan(data),2),:) = [];

Укажите последний столбец data, что соответствует MPG, в качестве переменной ответа y. Укажите другие столбцы data в качестве данных предиктора X. Добавление столбца из них в X когда функция регрессии использует regress, как в этом примере.

Примечание: regress полезен, когда просто нужны оценки коэффициентов или остатки регрессионной модели. Если необходимо дополнительно исследовать подогнанную регрессионную модель, создайте объект модели линейной регрессии с помощью fitlm. Пример использования fitlm и crossval, см. раздел Расчет средней абсолютной ошибки с использованием перекрестной проверки.

y = data(:,4);
X = [ones(length(y),1) data(:,1:3)];

Создание пользовательской функции regf (показано в конце этого примера). Эта функция подгоняет регрессионную модель к учебным данным и затем вычисляет прогнозируемые значения на тестовом наборе.

Примечание.Если для этого примера используется файл сценария в реальном времени, regf функция уже включена в конец файла. В противном случае необходимо создать эту функцию в конце файла .m или добавить ее в качестве файла по пути MATLAB ®.

Вычислите 10-кратную среднеквадратичную ошибку по умолчанию для регрессионной модели с данными предиктора X и переменная ответа y.

rng('default') % For reproducibility
cvMSE = crossval('mse',X,y,'Predfun',@regf)
cvMSE = 17.5399

Этот код создает функцию regf.

function yfit = regf(Xtrain,ytrain,Xtest)
b = regress(ytrain,Xtrain);
yfit = Xtest*b;
end

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

Загрузить patients набор данных. Укажите числовые переменные Diastolic и Systolic и категориальная переменная Gender в качестве предикторов и указать Smoker в качестве переменной ответа.

load patients
X1 = Diastolic;
X2 = categorical(Gender);
X3 = Systolic;
y = Smoker;

Создание пользовательской функции classf (показано в конце этого примера). Эта функция соответствует модели логистической регрессии учебным данным, а затем классифицирует тестовые данные.

Примечание.Если для этого примера используется файл сценария в реальном времени, classf функция уже включена в конец файла. В противном случае необходимо создать эту функцию в конце файла .m или добавить ее в качестве файла по пути MATLAB ®.

Вычислите 10-кратную ошибку ошибочной классификации перекрестной проверки для модели с данными предиктора X1, X2, и X3 и переменная ответа y. Определить 'Stratify',y обеспечить, чтобы в учебных и тестовых наборах была примерно одинаковая доля курильщиков.

rng('default') % For reproducibility
err = crossval('mcr',X1,X2,X3,y,'Predfun',@classf,'Stratify',y)
err = 0.1100

Этот код создает функцию classf.

function pred = classf(X1train,X2train,X3train,ytrain,X1test,X2test,X3test)
Xtrain = table(X1train,X2train,X3train,ytrain, ...
    'VariableNames',{'Diastolic','Gender','Systolic','Smoker'});
Xtest = table(X1test,X2test,X3test, ...
    'VariableNames',{'Diastolic','Gender','Systolic'});
modelspec = 'Smoker ~ Diastolic + Gender + Systolic';
mdl = fitglm(Xtrain,modelspec,'Distribution','binomial');
yfit = predict(mdl,Xtest);
pred = (yfit > 0.5);
end

Для заданного числа кластеров вычислите перекрестно подтвержденную сумму квадратных расстояний между наблюдениями и их ближайшим центром кластера. Сравните результаты для одного-десяти кластеров.

Загрузить fisheriris набор данных. X - матрица meas, который содержит измерения цветов для 150 различных цветов.

load fisheriris
X = meas;

Создание пользовательской функции clustf (показано в конце этого примера). Эта функция выполняет следующие шаги:

  1. Стандартизация данных обучения.

  2. разделять данные обучения на k кластеры.

  3. Преобразуйте тестовые данные, используя среднее значение обучающих данных и стандартное отклонение.

  4. Вычислите расстояние от каждой точки данных теста до ближайшего центра кластера, или центроида.

  5. Вычислите сумму квадратов расстояний.

Примечание.Если для этого примера используется файл сценария в реальном времени, clustf функция уже включена в конец файла. В противном случае необходимо создать функцию в конце файла .m или добавить ее в качестве файла по пути MATLAB ®.

Создать for цикл, указывающий количество кластеров k для каждой итерации. Для каждого фиксированного количества кластеров передайте соответствующее clustf функция для crossval. Поскольку crossval выполняет 10-кратную перекрестную проверку по умолчанию, программа вычисляет 10 сумм квадратичных расстояний, по одной для каждого раздела обучающих и тестовых данных. Возьмем сумму этих значений; результатом является перекрестно проверенная сумма квадратных расстояний для данного числа кластеров.

rng('default') % For reproducibility
cvdist = zeros(5,1);
for k = 1:10
    fun = @(Xtrain,Xtest)clustf(Xtrain,Xtest,k);
    distances = crossval(fun,X);
    cvdist(k) = sum(distances);
end

Постройте график перекрестно проверенной суммы квадратов расстояний для каждого числа кластеров.

plot(cvdist)
xlabel('Number of Clusters')
ylabel('CV Sum of Squared Distances')

Figure contains an axes. The axes contains an object of type line.

В общем, при определении того, сколько кластеров использовать, рассмотрим наибольшее количество кластеров, которое соответствует значительному уменьшению перекрестно подтвержденной суммы квадратных расстояний. Для этого примера использование двух или трех кластеров представляется целесообразным, но использование более трех кластеров не подходит.

Этот код создает функцию clustf.

function distances = clustf(Xtrain,Xtest,k)
[Ztrain,Zmean,Zstd] = zscore(Xtrain);
[~,C] = kmeans(Ztrain,k); % Creates k clusters
Ztest = (Xtest-Zmean)./Zstd;
d = pdist2(C,Ztest,'euclidean','Smallest',1);
distances = sum(d.^2);
end

Вычислите среднюю абсолютную ошибку регрессионной модели, используя 10-кратную перекрестную проверку.

Загрузить carsmall набор данных. Укажите Acceleration и Displacement переменные как предикторы и Weight переменная в качестве ответа.

load carsmall
X1 = Acceleration;
X2 = Displacement;
y = Weight;

Создание пользовательской функции regf (показано в конце этого примера). Эта функция подгоняет регрессионную модель к учебным данным и затем вычисляет прогнозируемые веса автомобиля на тестовом наборе. Функция сравнивает прогнозируемые значения веса автомобиля с истинными значениями, а затем вычисляет среднюю абсолютную ошибку (MAE) и MAE, скорректированную в соответствии с диапазоном весов испытуемого набора автомобилей.

Примечание.Если для этого примера используется файл сценария в реальном времени, regf функция уже включена в конец файла. В противном случае необходимо создать эту функцию в конце файла .m или добавить ее в качестве файла по пути MATLAB ®.

По умолчанию crossval выполняет 10-кратную перекрестную проверку. Для каждого из 10 разделов обучающего и тестового набора данных в X1, X2, и y, вычислить MAE и скорректированные значения MAE с помощью regf функция. Найдите средний MAE и средний скорректированный MAE.

rng('default') % For reproducibility
values = crossval(@regf,X1,X2,y)
values = 10×2

  319.2261    0.1132
  342.3722    0.1240
  214.3735    0.0902
  174.7247    0.1128
  189.4835    0.0832
  249.4359    0.1003
  194.4210    0.0845
  348.7437    0.1700
  283.1761    0.1187
  210.7444    0.1325

mean(values)
ans = 1×2

  252.6701    0.1129

Этот код создает функцию regf.

function errors = regf(X1train,X2train,ytrain,X1test,X2test,ytest)
tbltrain = table(X1train,X2train,ytrain, ...
    'VariableNames',{'Acceleration','Displacement','Weight'});
tbltest = table(X1test,X2test,ytest, ...
    'VariableNames',{'Acceleration','Displacement','Weight'});
mdl = fitlm(tbltrain,'Weight ~ Acceleration + Displacement');
yfit = predict(mdl,tbltest);
MAE = mean(abs(yfit-tbltest.Weight));
adjMAE = MAE/range(tbltest.Weight);
errors = [MAE adjMAE];
end

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

Загрузить fisheriris набор данных. meas матрица содержит измерения цветов для 150 различных цветов. species переменная перечисляет виды для каждого цветка.

load fisheriris

Создание пользовательской функции classf (показано в конце этого примера). Эта функция соответствует дереву классификации учебным данным, а затем классифицирует тестовые данные. Используйте PCA внутри функции, чтобы уменьшить количество предикторов, используемых для создания древовидной модели.

Примечание.Если для этого примера используется файл сценария в реальном времени, classf функция уже включена в конец файла. В противном случае необходимо создать эту функцию в конце файла .m или добавить ее в качестве файла по пути MATLAB ®.

Создать cvpartition объект для стратифицированной пятикратной перекрестной проверки. По умолчанию cvpartition обеспечивает, чтобы учебные и тестовые наборы имели примерно одинаковые пропорции видов цветов.

rng('default') % For reproducibility
cvp = cvpartition(species,'KFold',5);

Вычислите пятикратную ошибку ошибочной классификации перекрестной проверки для дерева классификации с данными предиктора meas и переменная ответа species.

cvError = crossval('mcr',meas,species,'Predfun',@classf,'Partition',cvp)
cvError = 0.1067

Этот код создает функцию classf.

function yfit = classf(Xtrain,ytrain,Xtest)

% Standardize the training predictor data. Then, find the 
% principal components for the standardized training predictor
% data.
[Ztrain,Zmean,Zstd] = zscore(Xtrain);
[coeff,scoreTrain,~,~,explained,mu] = pca(Ztrain);

% Find the lowest number of principal components that account
% for at least 95% of the variability.
n = find(cumsum(explained)>=95,1);

% Find the n principal component scores for the standardized
% training predictor data. Train a classification tree model
% using only these scores.
scoreTrain95 = scoreTrain(:,1:n);
mdl = fitctree(scoreTrain95,ytrain);

% Find the n principal component scores for the transformed
% test data. Classify the test data.
Ztest = (Xtest-Zmean)./Zstd;
scoreTest95 = (Ztest-mu)*coeff(:,1:n);
yfit = predict(mdl,scoreTest95);

end

Создайте матрицу путаницы из 10-кратных результатов перекрестной проверки дискриминантной модели анализа.

Примечание: Использовать classify когда скорость тренировки вызывает обеспокоенность. В противном случае используйте fitcdiscr для создания дискриминантной модели анализа. Для примера, показывающего тот же рабочий процесс, что и в этом примере, но использующего fitcdiscrсм. раздел Создание матрицы путаницы с помощью предсказаний перекрестной проверки.

Загрузить fisheriris набор данных. X содержит измерения цветов для 150 различных цветов, и y перечисляет виды для каждого цветка. Создание переменной order который определяет порядок видов цветов.

load fisheriris
X = meas;
y = species;
order = unique(y)
order = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Создать дескриптор функции с именем func для функции, которая выполняет следующие шаги:

  • Принять данные обучения (Xtrain и ytrain) и данные испытаний (Xtest и ytest).

  • Используйте обучающие данные для создания дискриминантной модели анализа, которая классифицирует новые данные (Xtest). Создайте эту модель и классифицируйте новые данные с помощью classify функция.

  • Сравните истинные классы тестовых данных (ytest) к прогнозируемым значениям тестовых данных и создайте матрицу путаницы результатов с помощью confusionmat функция. Укажите порядок классов с помощью 'Order',order.

func = @(Xtrain,ytrain,Xtest,ytest)confusionmat(ytest, ...
    classify(Xtest,Xtrain,ytrain),'Order',order);

Создать cvpartition объект для стратифицированной 10-кратной перекрестной проверки. По умолчанию cvpartition обеспечивает, чтобы учебные и тестовые наборы имели примерно одинаковые пропорции видов цветов.

rng('default') % For reproducibility
cvp = cvpartition(y,'Kfold',10);

Вычислите 10 матриц путаницы тестового набора для каждого раздела данных предиктора X и переменная ответа y. Каждая строка confMat соответствует результатам матрицы путаницы для одного тестового набора. агрегировать результаты и создавать окончательную матрицу путаницы; cvMat.

confMat = crossval(func,X,y,'Partition',cvp);
cvMat = reshape(sum(confMat),3,3)
cvMat = 3×3

    50     0     0
     0    48     2
     0     1    49

Постройте график матрицы путаницы в виде таблицы матрицы путаницы с помощью confusionchart.

confusionchart(cvMat,order)

Figure contains an object of type ConfusionMatrixChart.

Входные аргументы

свернуть все

Тип оценки ошибки, указанный как 'mse' или 'mcr'.

СтоимостьОписание
'mse'Среднеквадратичная ошибка (MSE) - подходит только для алгоритмов регрессии
'mcr'Коэффициент неправильной классификации или доля неправильно классифицированных наблюдений - подходит только для алгоритмов классификации

Набор данных, заданный как вектор столбца, матрица или массив. Строки X соответствуют наблюдениям и столбцам X обычно соответствуют переменным. При передаче нескольких наборов данных X1,...,XN кому crossval, то все наборы данных должны иметь одинаковое количество строк.

Типы данных: single | double | logical | char | string | cell | categorical

Данные ответа, указанные как вектор столбца или символьный массив. Строки y соответствуют наблюдениям, и y должно иметь то же количество строк, что и данные предиктора X или X1,...,XN.

Типы данных: single | double | logical | char | string | cell | categorical

Функция прогнозирования, заданная как дескриптор функции. Вы должны создать эту функцию как анонимную функцию, функция, определенная в конце.m или .mlx файла, содержащего остальную часть Вашего кодекса или файла на пути MATLAB®.

Эта таблица описывает требуемый синтаксис функции, учитывая тип данных предиктора, передаваемых в crossval.

СтоимостьДанные предиктораСинтаксис функции
@myfunctionX

function yfit = myfunction(Xtrain,ytrain,Xtest)
% Calculate predicted response
...
end

  • Xtrain - Подмножество наблюдений в X используется в качестве данных тренировочного предиктора. Функция использует Xtrain и ytrain для построения модели классификации или регрессии.

  • ytrain - Подмножество ответов в y используется в качестве данных ответа на обучение. Строки ytrain соответствуют тем же наблюдениям в строках Xtrain. Функция использует Xtrain и ytrain для построения модели классификации или регрессии.

  • Xtest - Подмножество наблюдений в X используется в качестве данных тестового предиктора. Функция использует Xtest и модель обучена Xtrain и ytrain для вычисления прогнозируемых значений yfit.

  • yfit - Набор прогнозируемых значений для наблюдений в Xtest. yfit значения образуют вектор столбца с тем же количеством строк, что и Xtest.

@myfunctionX1,...,XN

function yfit = myfunction(X1train,...,XNtrain,ytrain,X1test,...,XNtest)
% Calculate predicted response
...
end

  • X1train,...,XNtrain - подмножества данных предиктора в X1,...,XNсоответственно, которые используются в качестве данных тренировочного предиктора. Строки X1train,...,XNtrain соответствуют тем же наблюдениям. Функция использует X1train,...,XNtrain и ytrain для построения модели классификации или регрессии.

  • ytrain - Подмножество ответов в y используется в качестве данных ответа на обучение. Строки ytrain соответствуют тем же наблюдениям в строках X1train,...,XNtrain. Функция использует X1train,...,XNtrain и ytrain для построения модели классификации или регрессии.

  • X1test,...,XNtest - Подмножества наблюдений в X1,...,XNсоответственно, которые используются в качестве данных тестового предиктора. Строки X1test,...,XNtest соответствуют тем же наблюдениям. Функция использует X1test,...,XNtest и модель обучена X1train,...,XNtrain и ytrain для вычисления прогнозируемых значений yfit.

  • yfit - Набор прогнозируемых значений для наблюдений в X1test,...,XNtest. yfit значения образуют вектор столбца с тем же количеством строк, что и X1test,...,XNtest.

Пример: @(Xtrain,ytrain,Xtest)(Xtest*regress(ytrain,Xtrain));

Типы данных: function_handle

Функция для перекрестной проверки, заданная как дескриптор функции. Вы должны создать эту функцию как анонимную функцию, функция, определенная в конце.m или .mlx файла, содержащего остальную часть Вашего кодекса или файла на пути MATLAB.

В этой таблице описывается синтаксис требуемой функции с учетом типа данных, передаваемых в crossval.

СтоимостьДанныеСинтаксис функции
@myfunctionX

function value = myfunction(Xtrain,Xtest)
% Calculation of value
...
end

  • Xtrain - Подмножество наблюдений в X используется в качестве учебных данных. Функция использует Xtrain для построения модели.

  • Xtest - Подмножество наблюдений в X используется в качестве тестовых данных. Функция использует Xtest и модель обучена Xtrain вычислить value.

  • value - Количество или переменная. В большинстве случаев value - числовой скаляр, представляющий оценку потерь. value также может быть массивом при условии, что размер массива одинаков для каждого раздела обучающих и тестовых данных. Если требуется вернуть переменную output которые могут изменять размер в зависимости от раздела данных, value быть скаляром ячейки {output} вместо этого.

@myfunctionX1,...,XN

function value = myfunction(X1train,...,XNtrain,X1test,...,XNtest)
% Calculation of value
...
end

  • X1train,...,XNtrain - подмножества данных в X1,...,XNсоответственно, которые используются в качестве данных обучения. Строки X1train,...,XNtrain соответствуют тем же наблюдениям. Функция использует X1train,...,XNtrain для построения модели.

  • X1test,...,XNtest - подмножества данных в X1,...,XNсоответственно, которые используются в качестве тестовых данных. Строки X1test,...,XNtest соответствуют тем же наблюдениям. Функция использует X1test,...,XNtest и модель обучена X1train,...,XNtrain вычислить value.

  • value - Количество или переменная. В большинстве случаев value - числовой скаляр, представляющий оценку потерь. value также может быть массивом при условии, что размер массива одинаков для каждого раздела обучающих и тестовых данных. Если требуется вернуть переменную output которые могут изменять размер в зависимости от раздела данных, value быть скаляром ячейки {output} вместо этого.

Типы данных: function_handle

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: crossval('mcr',meas,species,'Predfun',@classf,'KFold',5,'Stratify',species) указывает на вычисление 5-кратного коэффициента неправильной классификации для стратифицированной перекрестной проверки classf функция с данными предиктора meas и переменная ответа species.

Доля или количество наблюдений, используемых для проверки удержания, указанных как пара, разделенная запятыми, состоящая из 'Holdout' и скалярное значение в диапазоне (0,1) или положительное целое скалярное значение.

  • Если Holdout стоимость p является скаляром в диапазоне (0,1), то crossval случайным образом выбирает и резервирует приблизительно p*100% наблюдений в качестве тестовых данных.

  • Если Holdout стоимость p является положительным целым скаляром, то crossval случайным образом выбирает и резервирует p наблюдения в качестве данных испытаний.

В любом случае crossval затем обучает модель, указанную либо fun или predfun используя остальные данные. Наконец, функция использует тестовые данные вместе с обученной моделью для вычисления либо values или err.

Можно использовать только один из следующих четырех аргументов пары имя-значение: Holdout, KFold, Leaveout, и Partition.

Пример: 'Holdout',0.3

Пример: 'Holdout',50

Типы данных: single | double

Количество складок для k-кратной перекрестной проверки, указанное как пара, разделенная запятыми, состоящая из 'KFold' и положительный целочисленный скаляр больше 1.

При указании 'KFold',k, то crossval случайным образом разбивает данные на k наборы. Для каждого набора функция резервирует набор в качестве тестовых данных и обучает модель, заданную одним из fun или predfun использование другого k - 1 комплект. crossval затем использует тестовые данные вместе с обученной моделью для вычисления values или err.

Можно использовать только один из следующих четырех аргументов пары имя-значение: Holdout, KFold, Leaveout, и Partition.

Пример: 'KFold',5

Типы данных: single | double

Перекрестная проверка «оставить один», указанная как пара, разделенная запятыми, состоящая из 'Leaveout' и 1.

При указании 'Leaveout',1, то для каждого наблюдения, crossval резервирует наблюдение в качестве тестовых данных и обучает модель, указанную либо fun или predfun с использованием других наблюдений. Затем функция использует тестовое наблюдение вместе с обученной моделью для вычисления либо values или err.

Можно использовать только один из следующих четырех аргументов пары имя-значение: Holdout, KFold, Leaveout, и Partition.

Пример: 'Leaveout',1

Типы данных: single | double

Количество повторений Монте-Карло для проверки, указанное как пара, разделенная запятыми, состоящая из 'MCReps' и положительный целочисленный скаляр. Если первый вход crossval является 'mse' или 'mcr' (см. criterion), то crossval возвращает среднее значение MSE или коэффициент неправильной классификации для всех повторений Монте-Карло. В противном случае crossval объединяет значения из всех повторений Монте-Карло по первому измерению.

При указании обоих Partition и MCReps, то первое повторение Монте-Карло использует информацию раздела в cvpartition объект, и программное обеспечение вызывает repartition для создания новых разделов для каждого из оставшихся повторений.

Пример: 'MCReps',5

Типы данных: single | double

Раздел перекрестной проверки, указанный как разделенная запятыми пара, состоящая из 'Partition' и cvpartition объект секционирования, созданный cvpartition. Объект секционирования определяет тип перекрестной проверки и индексирования для обучающих и тестовых наборов.

При использовании crossval, нельзя указать оба Partition и Stratify. Вместо этого непосредственно укажите стратифицированный раздел при создании cvpartition объект секционирования.

Можно использовать только один из следующих четырех аргументов пары имя-значение: Holdout, KFold, Leaveout, и Partition.

Переменная, определяющая группы, используемые для стратификации, указанная как пара, разделенная запятыми, состоящая из 'Stratify' и вектор столбца с тем же количеством строк, что и данные X или X1,...,XN.

При указании Stratify, как учебные, так и тестовые наборы имеют примерно те же пропорции классов, что и в Stratify вектор. Программное обеспечение обрабатывает NaNs, пустые векторы символов, пустые строки, <missing> значения, и <undefined> значения в Stratify как отсутствующие значения данных, и игнорирует соответствующие строки данных.

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

При использовании crossval, нельзя указать оба Partition и Stratify. Вместо этого непосредственно укажите стратифицированный раздел при создании cvpartition объект секционирования.

Типы данных: single | double | logical | string | cell | categorical

Опции параллельного выполнения вычислений и задания случайных потоков, заданные как структура. Создать Options структура с statset. В этой таблице перечислены поля опций и их значения.

Имя поляСтоимостьДефолт
UseParallelЗадайте для этого значения значение true для параллельного выполнения вычислений.false
UseSubstreams

Задайте для этого значения значение true выполнять вычисления параллельно воспроизводимым способом.

Для воспроизводимого вычисления установите Streams к типу, допускающему субпотоки: 'mlfg6331_64' или 'mrg32k3a'.

false
StreamsУкажите это значение как RandStream объект или массив ячеек, состоящий из одного такого объекта.Если не указать Streams, то crossval использует поток по умолчанию.

Примечание

Для параллельного выполнения вычислений требуется Toolbox™ параллельных вычислений.

Пример: 'Options',statset('UseParallel',true)

Типы данных: struct

Выходные аргументы

свернуть все

Средняя квадратичная ошибка или частота неправильной классификации, возвращаемая как числовой скаляр. Тип ошибки зависит от criterion значение.

Значения потерь, возвращаемые в виде вектора столбца или матрицы. Каждая строка values соответствует выходу fun для одного раздела обучающих и тестовых данных.

Если выходные данные возвращены fun является многомерным, то crossval изменяет форму выходного документа и помещает его в одну строку values. Пример см. в разделе Создание матрицы путаницы с помощью перекрестной проверки.

Совет

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

Алгоритмы

свернуть все

Общие шаги перекрестной проверки для predfun

При использовании predfun, crossval функция обычно выполняет десятикратную перекрестную проверку следующим образом:

  1. Разделить наблюдения в данных предиктора X и переменная ответа y на 10 групп, каждая из которых имеет примерно одинаковое количество наблюдений.

  2. Используйте последние девять групп наблюдений для обучения модели, как указано в predfun. Используйте первую группу наблюдений в качестве данных теста, передайте данные предиктора теста обученной модели и вычислите прогнозируемые значения, как указано в predfun. Вычислить ошибку, указанную criterion.

  3. Используйте первую группу и последние восемь групп наблюдений для обучения модели, как указано в predfun. Используйте вторую группу наблюдений в качестве тестовых данных, передайте тестовые данные обучаемой модели и вычислите прогнозируемые значения, как указано в predfun. Вычислить ошибку, указанную criterion.

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

  5. Возвращает среднюю оценку ошибки в виде скаляра err.

Общие шаги перекрестной проверки для fun

При использовании fun, crossval функция обычно выполняет десятикратную перекрестную проверку следующим образом:

  1. Разделить данные в X на 10 групп, каждая из которых имеет примерно одинаковое количество наблюдений.

  2. Использовать последние девять групп данных для обучения модели, как указано в fun. Используйте первую группу данных в качестве тестового набора, передайте тестовый набор обучаемой модели и вычислите некоторое значение (например, потери), как указано в fun.

  3. Используйте первую группу и последние восемь групп данных для обучения модели, как указано в fun. Используйте вторую группу данных как тестовый набор, передайте тестовый набор обучаемой модели и вычислите некоторое значение, как указано в fun.

  4. Продолжайте аналогично до тех пор, пока каждая группа данных не будет использована в качестве тестового набора ровно один раз.

  5. Возврат 10 вычисленных значений в качестве вектора values.

Альтернативная функциональность

Многие функции классификации и регрессии позволяют выполнять перекрестную проверку напрямую.

  • При использовании функций посадки, таких как fitcsvm, fitctree, и fitrtree, можно указать параметры перекрестной проверки, используя аргументы пары имя-значение. Кроме того, можно сначала создать модели с этими функциями подгонки, а затем создать секционированный объект с помощью crossval объектная функция. Используйте kfoldLoss и kfoldPredict функции объекта для вычисления потерь и прогнозируемых значений для секционированного объекта. Дополнительные сведения см. в разделе ClassificationPartitionedModel и RegressionPartitionedModel.

  • Можно также указать параметры перекрестной проверки при выполнении лассо или эластичной регуляризации сетки с помощью lasso и lassoglm.

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

Представлен в R2008a