crossval

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

Описание

пример

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

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

пример

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

пример

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

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

пример

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

пример

___ = crossval(___,Name,Value) задает опции перекрестной проверки, используя один или несколько аргументы пары "имя-значение" в дополнение к любым комбинациям входных аргументов и выходным аргументам в предыдущих синтаксисах. Для примера, 'KFold',5 задает выполнение 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 (показан в конце этого примера). Эта функция подходит для регрессионной модели к обучающим данным, а затем вычисляет предсказанные значения на тестовом наборе.

Примечание: Если вы используете файл live скрипта для этого примера, 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 (показан в конце этого примера). Эта функция подходит к логистической регрессионой модели для обучающих данных, а затем классифицирует тестовые данные.

Примечание: Если вы используете файл live скрипта для этого примера, 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. Вычислите сумму квадратов расстояний.

Примечание: Если вы используете файл live скрипта для этого примера, 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, скорректированную с областью значений веса тестового набора автомобилей.

Примечание: Если вы используете файл live скрипта для этого примера, 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) и 5-кратной перекрестной валидации.

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

load fisheriris

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

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

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

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

Вычислите 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. The 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. The 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-fold, заданное как разделенная разделенными запятой парами, состоящая из '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' и a 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 использует поток по умолчанию.

Примечание

Вам нужен Parallel Computing Toolbox™, чтобы запускать расчеты параллельно.

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

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

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

свернуть все

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

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

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

Совет

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

Алгоритмы

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Введенный в R2008a