perfcurve

Кривая рабочей характеристики получателя (ROC) или другая кривая производительности для классификатора выводятся

Синтаксис

[X,Y] = perfcurve(labels,scores,posclass)
[X,Y,T] = perfcurve(labels,scores,posclass)
[X,Y,T,AUC] = perfcurve(labels,scores,posclass)
[X,Y,T,AUC,OPTROCPT] = perfcurve(labels,scores,posclass)
[X,Y,T,AUC,OPTROCPT,SUBY] = perfcurve(labels,scores,posclass)
[X,Y,T,AUC,OPTROCPT,SUBY,SUBYNAMES] = perfcurve(labels,scores,posclass)
[___] = perfcurve(labels,scores,posclass,Name,Value)

Описание

пример

[X,Y] = perfcurve(labels,scores,posclass) возвращает X и координаты Y кривой ROC для вектора прогнозов классификатора, scores, учитывая истинные метки класса, labels, и положительную метку класса, posclass. Можно визуализировать кривую производительности с помощью plot(X,Y).

[X,Y,T] = perfcurve(labels,scores,posclass) возвращает массив порогов на музыке классификатора к вычисленным значениям X и Y.

пример

[X,Y,T,AUC] = perfcurve(labels,scores,posclass) возвращает область под кривой для вычисленных значений X и Y.

пример

[X,Y,T,AUC,OPTROCPT] = perfcurve(labels,scores,posclass) возвращает оптимальную рабочую точку кривой ROC.

[X,Y,T,AUC,OPTROCPT,SUBY] = perfcurve(labels,scores,posclass) возвращает значения Y для отрицательных подклассов.

пример

[X,Y,T,AUC,OPTROCPT,SUBY,SUBYNAMES] = perfcurve(labels,scores,posclass) возвращает отрицательные имена классов.

[___] = perfcurve(labels,scores,posclass,Name,Value) возвращает координаты кривой ROC и любого другого выходного аргумента от предыдущих синтаксисов, с дополнительными опциями, заданными одним или несколькими аргументами пары Name,Value.

Например, можно предоставить список отрицательных классов, изменить X или критерий Y, вычислить pointwise доверительные границы с помощью перекрестной проверки или загрузить, задать стоимость misclassification или вычислить доверительные границы параллельно.

Примеры

свернуть все

Загрузите выборочные данные.

load fisheriris

Используйте только первые две функции как переменные прогноза. Задайте бинарную проблему классификации только при помощи измерений, которые соответствуют разновидностям versicolor и virginica.

pred = meas(51:end,1:2);

Задайте бинарную переменную отклика.

resp = (1:100)'>50;  % Versicolor = 0, virginica = 1

Соответствуйте модели логистической регрессии.

mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');

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

scores = mdl.Fitted.Probability;
[X,Y,T,AUC] = perfcurve(species(51:end,:),scores,'virginica');

perfcurve хранит пороговые значения в массиве T.

Отобразите область под кривой.

AUC
AUC = 0.7918

Область под кривой 0.7918. Максимальный AUC равняется 1, который соответствует совершенному классификатору. Большие значения AUC указывают на лучшую производительность классификатора.

Постройте кривую ROC.

plot(X,Y)
xlabel('False positive rate') 
ylabel('True positive rate')
title('ROC for Classification by Logistic Regression')

Загрузите выборочные данные.

load ionosphere

X 351x34 матрица с действительным знаком предикторов. Y является символьным массивом меток класса: 'b' для плохого радара возвращается, и 'g' для хорошего радара возвращается.

Переформатируйте ответ, чтобы соответствовать логистической регрессии. Используйте переменные прогноза 3 - 34.

resp = strcmp(Y,'b'); % resp = 1, if Y = 'b', or 0 if Y = 'g' 
pred = X(:,3:34);

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

mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');
score_log = mdl.Fitted.Probability; % Probability estimates

Вычислите стандартную кривую ROC с помощью вероятностей для очков.

[Xlog,Ylog,Tlog,AUClog] = perfcurve(resp,score_log,'true');

Обучите классификатор SVM на тех же выборочных данных. Стандартизируйте данные.

mdlSVM = fitcsvm(pred,resp,'Standardize',true);

Вычислите апостериорные вероятности (очки).

mdlSVM = fitPosterior(mdlSVM);
[~,score_svm] = resubPredict(mdlSVM);

Второй столбец score_svm содержит апостериорные вероятности плохого радара, возвращается.

Вычислите стандартную кривую ROC с помощью очков из модели SVM.

[Xsvm,Ysvm,Tsvm,AUCsvm] = perfcurve(resp,score_svm(:,mdlSVM.ClassNames),'true');

Соответствуйте наивному классификатору Байеса на тех же выборочных данных.

mdlNB = fitcnb(pred,resp);

Вычислите апостериорные вероятности (очки).

[~,score_nb] = resubPredict(mdlNB);

Вычислите стандартную кривую ROC с помощью очков от наивной классификации Бейеса.

[Xnb,Ynb,Tnb,AUCnb] = perfcurve(resp,score_nb(:,mdlNB.ClassNames),'true');

Постройте кривые ROC на том же графике.

plot(Xlog,Ylog)
hold on
plot(Xsvm,Ysvm)
plot(Xnb,Ynb)
legend('Logistic Regression','Support Vector Machines','Naive Bayes','Location','Best')
xlabel('False positive rate'); ylabel('True positive rate');
title('ROC Curves for Logistic Regression, SVM, and Naive Bayes Classification')
hold off

Несмотря на то, что SVM производит лучшие значения ROC для более высоких порогов, логистическая регрессия обычно лучше в различении плохого радара, возвращается из хороших единиц. Кривая ROC для наивного Бейеса обычно ниже, чем другие две кривые ROC, который указывает на худшую производительность в выборке, чем другие два метода классификатора.

Сравните область под кривой для всех трех классификаторов.

AUClog
AUClog = 0.9659
AUCsvm
AUCsvm = 0.9488
AUCnb
AUCnb = 0.9393

Логистическая регрессия имеет самую высокую меру по AUC для классификации, и у наивного Бейеса есть самое низкое. Этот результат предполагает, что логистическая регрессия имеет лучшую среднюю производительность в выборке для этих выборочных данных.

Этот пример показывает, как определить лучшее значение параметров для пользовательской функции ядра в классификаторе с помощью кривых ROC.

Сгенерируйте случайный набор точек в модульном кругу.

rng(1);  % For reproducibility
n = 100; % Number of points per quadrant

r1 = sqrt(rand(2*n,1));                     % Random radii
t1 = [pi/2*rand(n,1); (pi/2*rand(n,1)+pi)]; % Random angles for Q1 and Q3
X1 = [r1.*cos(t1) r1.*sin(t1)];             % Polar-to-Cartesian conversion

r2 = sqrt(rand(2*n,1));
t2 = [pi/2*rand(n,1)+pi/2; (pi/2*rand(n,1)-pi/2)]; % Random angles for Q2 and Q4
X2 = [r2.*cos(t2) r2.*sin(t2)];

Задайте переменные прогноза. Маркируйте точки в первых и третьих квадрантах как принадлежащий положительному классу и тем во вторых и четвертых квадрантах в отрицательном классе.

pred = [X1; X2];
resp = ones(4*n,1);
resp(2*n + 1:end) = -1; % Labels

Создайте функциональный mysigmoid.m, который принимает две матрицы в пространстве признаков как входные параметры и преобразовывает их в матрицу Грамма использование сигмоидального ядра.

function G = mysigmoid(U,V)
% Sigmoid kernel function with slope gamma and intercept c
gamma = 1;
c = -1;
G = tanh(gamma*U*V' + c);
end

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

SVMModel1 = fitcsvm(pred,resp,'KernelFunction','mysigmoid',...
				'Standardize',true);
SVMModel1 = fitPosterior(SVMModel1);
[~,scores1] = resubPredict(SVMModel1);

Установите gamma = 0.5; в mysigmoid.m и сохраняют как mysigmoid2.m. И, обучите классификатор SVM с помощью настроенного сигмоидального ядра.

function G = mysigmoid2(U,V)
% Sigmoid kernel function with slope gamma and intercept c
gamma = 0.5;
c = -1;
G = tanh(gamma*U*V' + c);
end

SVMModel2 = fitcsvm(pred,resp,'KernelFunction','mysigmoid2',...
				'Standardize',true);
SVMModel2 = fitPosterior(SVMModel2);
[~,scores2] = resubPredict(SVMModel2);

Вычислите кривые ROC и область под кривой (AUC) для обеих моделей.

[x1,y1,~,auc1] = perfcurve(resp,scores1(:,2),1);
[x2,y2,~,auc2] = perfcurve(resp,scores2(:,2),1);

Постройте кривые ROC.

plot(x1,y1)
hold on
plot(x2,y2)
hold off
legend('gamma = 1','gamma = 0.5','Location','SE');
xlabel('False positive rate'); ylabel('True positive rate');
title('ROC for classification by SVM');

Функция ядра с гамма набором параметра к 0,5 дает лучшие результаты в выборке.

Сравните меры по AUC.

auc1
auc2
auc1 =

    0.9518


auc2 =

    0.9985

Область под кривой для гамма набора к 0,5 выше, чем это для гамма набора к 1. Это также подтверждает, что гамма значение параметров 0,5 приводит к лучшим результатам. Для визуального сравнения производительности классификации с этими двумя гамма значениями параметров смотрите Train Классификатор SVM Используя Пользовательское Ядро.

Загрузите выборочные данные.

load fisheriris

Вектор-столбец, species, состоит из ирисовых цветов трех различных разновидностей: setosa, versicolor, virginica. Двойной матричный meas состоит из четырех типов измерений на цветах: длина чашелистика, ширина чашелистика, лепестковая длина и лепестковая ширина. Все меры находятся в сантиметрах.

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

Model = fitctree(meas(:,1:2),species, ...
    'ClassNames',{'setosa','versicolor','virginica'});

Предскажите метки класса и музыку к разновидностям на основе древовидного Model.

[~,score] = resubPredict(Model);

Очки являются апостериорными вероятностями, что наблюдение (строка в матрице данных) принадлежит классу. Столбцы score соответствуют классам, заданным 'ClassNames'. Так, первый столбец соответствует setosa, второе соответствует versicolor, и третий столбец соответствует virginica.

Вычислите кривую ROC для прогнозов, что наблюдение принадлежит versicolor, учитывая истинный класс маркирует species. Также вычислите оптимальную рабочую точку и y значения для отрицательных подклассов. Возвратите имена отрицательных классов.

Поскольку это - проблема мультикласса, вы не можете просто предоставить score(:,2), как введено к perfcurve. Выполнение так не дало бы perfcurve достаточно информации о музыке к двум отрицательным классам (setosa и virginica). Эта проблема непохожа на бинарную проблему классификации, где знания множества одного класса достаточно, чтобы определить множество другого класса. Поэтому необходимо предоставить perfcurve функцию, которая включает множество двух отрицательных классов. Одна такая функция score(:,2)-max (score(:,1),score(:,3)).

diffscore = score(:,2) - max(score(:,1),score(:,3));
[X,Y,T,~,OPTROCPT,suby,subnames] = perfcurve(species,diffscore,'versicolor');

X, по умолчанию, является ложным положительным уровнем (осадки или 1 специфика), и Y, по умолчанию, является истинным положительным уровнем (отзыв или чувствительность). Положительной меткой класса является versicolor. Поскольку отрицательный класс не задан, perfcurve принимает, что наблюдения, которые не принадлежат положительному классу, находятся в одном классе. Функция принимает его как отрицательный класс.

OPTROCPT
OPTROCPT = 1×2

    0.1000    0.8000

suby
suby = 12×2

         0         0
    0.1800    0.1800
    0.4800    0.4800
    0.5800    0.5800
    0.6200    0.6200
    0.8000    0.8000
    0.8800    0.8800
    0.9200    0.9200
    0.9600    0.9600
    0.9800    0.9800
      ⋮

subnames
subnames = 1x2 cell array
    {'setosa'}    {'virginica'}

Постройте кривую ROC и оптимальную рабочую точку на кривой ROC.

plot(X,Y)
hold on
plot(OPTROCPT(1),OPTROCPT(2),'ro')
xlabel('False positive rate') 
ylabel('True positive rate')
title('ROC Curve for Classification by Classification Trees')
hold off

Найдите порог, который соответствует оптимальной рабочей точке.

T((X==OPTROCPT(1))&(Y==OPTROCPT(2)))
ans = 0.2857

Задайте virginica как отрицательный класс и вычислите и постройте кривую ROC для versicolor.

Снова, необходимо предоставить perfcurve функцию, которая включает множество отрицательного класса. Пример функции, чтобы использовать score(:,2)-score(:,3).

diffscore = score(:,2) - score(:,3);
[X,Y,~,~,OPTROCPT] = perfcurve(species,diffscore,'versicolor', ...
    'negClass','virginica');
OPTROCPT
OPTROCPT = 1×2

    0.1800    0.8200

figure, plot(X,Y)
hold on
plot(OPTROCPT(1),OPTROCPT(2),'ro')
xlabel('False positive rate') 
ylabel('True positive rate')
title('ROC Curve for Classification by Classification Trees')
hold off

Загрузите выборочные данные.

load fisheriris

Вектор-столбец species состоит из ирисовых цветов трех различных разновидностей: setosa, versicolor, virginica. Двойной матричный meas состоит из четырех типов измерений на цветах: длина чашелистика, ширина чашелистика, лепестковая длина и лепестковая ширина. Все меры находятся в сантиметрах.

Используйте только первые две функции как переменные прогноза. Задайте бинарную проблему только при помощи измерений, которые соответствуют versicolor и virginica разновидностям.

pred = meas(51:end,1:2);

Задайте бинарную переменную отклика.

resp = (1:100)'>50;  % Versicolor = 0, virginica = 1

Соответствуйте модели логистической регрессии.

mdl = fitglm(pred,resp,'Distribution','binomial','Link','logit');

Вычислите pointwise доверительные интервалы на истинном положительном уровне (TPR) вертикальным усреднением (VA) и выбирающий использующий начальную загрузку.

[X,Y,T] = perfcurve(species(51:end,:),mdl.Fitted.Probability,...
       'virginica','NBoot',1000,'XVals',[0:0.05:1]);

'NBoot',1000 определяет номер копий начальной загрузки к 1 000. 'XVals','All' запрашивает perfcurve возвращать X, Y и значения T для всех очков, и составлять в среднем значения Y (истинный положительный уровень) во всех значениях X (ложный положительный уровень) использование вертикального усреднения. Если вы не задаете XVals, то perfcurve вычисляет доверительные границы с помощью порога, составляющего в среднем по умолчанию.

Постройте pointwise доверительные интервалы.

errorbar(X,Y(:,1),Y(:,1)-Y(:,2),Y(:,3)-Y(:,1));
xlim([-0.02,1.02]); ylim([-0.02,1.02]);
xlabel('False positive rate') 
ylabel('True positive rate')
title('ROC Curve with Pointwise Confidence Bounds')
legend('PCBwVA','Location','Best')

Не может всегда быть возможно управлять ложным положительным уровнем (FPR, значение X в этом примере). Таким образом, вы можете хотеть вычислить pointwise доверительные интервалы на истинных положительных уровнях (TPR) пороговым усреднением.

[X1,Y1,T1] = perfcurve(species(51:end,:),mdl.Fitted.Probability,...
    'virginica','NBoot',1000);

Если вы устанавливаете 'TVals' на 'All', или если вы не задаете 'TVals' или 'Xvals', то perfcurve возвращает X, Y и значения T для всех очков и вычисляет pointwise доверительные границы для X и Y с помощью порогового усреднения.

Постройте доверительные границы.

figure()
errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1));
xlim([-0.02,1.02]); ylim([-0.02,1.02]);
xlabel('False positive rate')
ylabel('True positive rate')
title('ROC Curve with Pointwise Confidence Bounds')
legend('PCBwTA','Location','Best')

Задайте пороговые значения, чтобы зафиксировать и вычислить кривую ROC. Затем постройте кривую.

[X1,Y1,T1] = perfcurve(species(51:end,:),mdl.Fitted.Probability,...
    'virginica','NBoot',1000,'TVals',0:0.05:1);
figure()
errorbar(X1(:,1),Y1(:,1),Y1(:,1)-Y1(:,2),Y1(:,3)-Y1(:,1));
xlim([-0.02,1.02]); ylim([-0.02,1.02]);
xlabel('False positive rate')
ylabel('True positive rate')
title('ROC Curve with Pointwise Confidence Bounds')
legend('PCBwTA','Location','Best')

Входные параметры

свернуть все

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

Пример: {'hi','mid','hi','low',...,'mid'}

Пример: ['H','M','H','L',...,'M']

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

Очки, возвращенные классификатором для некоторых выборочных данных, заданных как вектор плавающих точек. scores должен иметь то же число элементов как labels.

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

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

Значение labelsЗначение posclass
Числовой векторЧисловой скаляр
Логический векторЛогический скаляр
Символьная матрицаСимвольный вектор
StringArrayСкаляр строки
Массив ячеек из символьных векторовВектор символов или ячейка, содержащая вектор символов
Категориальный вектор Категориальный скаляр

Например, в проблеме диагноза рака, если злокачественная опухоль является положительным классом, то задают posclass как 'malignant'.

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: 'NegClass','versicolor','XCrit','fn','NBoot',1000,'BootType','per' задает разновидности versicolor как отрицательный класс, критерий X-координаты столь же ложное отрицание, количество выборок начальной загрузки как 1000. Это также указывает, что pointwise доверительные границы вычисляются с помощью метода процентили.

Список отрицательных классов, заданных как пара, разделенная запятой, состоящая из 'NegClass', и числового массива, категориального массива, массива строк или массива ячеек из символьных векторов. По умолчанию perfcurve устанавливает NegClass на 'all' и считает все неположительные классы найденными во входном массиве меток быть отрицательным.

Если NegClass является подмножеством классов, найденных во входном массиве меток, то perfcurve отбрасывает экземпляры с метками, которые не принадлежат или положительным или отрицательным классам.

Пример: 'NegClass',{'versicolor','setosa'}

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

Критерий, чтобы вычислить для X, заданного как пара, разделенная запятой, состоящая из 'XCrit' и одно из следующих.

КритерийОписание
tpКоличество истинных положительных экземпляров
fnКоличество ложных отрицательных экземпляров.
fpКоличество ложных положительных экземпляров.
tnКоличество истинных отрицательных экземпляров.
tp+fpСумма истинных положительных и ложных положительных экземпляров.
rppУровень положительных прогнозов.
rpp = (tp+fp)/(tp+fn+fp+tn)
rnpУровень отрицательных прогнозов.
rnp = (tn+fn)/(tp+fn+fp+tn)
accuТочность.
accu = (tp+tn)/(tp+fn+fp+tn)
tpr, или sens или recaИстинный положительный уровень, или чувствительность или отзыв.
tpr= sens = reca = tp/(tp+fn)
fnr или miss Ложный отрицательный уровень или мисс.
fnr = miss = fn/(tp+fn)
fpr или fallЛожный положительный уровень или осадки, или 1 – специфика.
fpr = fall = fp/(tn+fp)
tnr или specИстинный отрицательный уровень или специфика.
tnr = spec = tn/(tn+fp)
ppv или precПоложительное прогнозирующее значение или точность.
ppv = prec = tp/(tp+fp)
npvОтрицательное прогнозирующее значение.
npv = tn/(tn+fn)
ecostОжидаемая стоимость.
ecost = (tp*Cost(P|P)+fn*Cost(N|P)+fp* Cost(P|N)+tn*Cost(N|N))/(tp+fn+fp+tn)
Пользовательский критерийПользовательски заданная функция с входными параметрами, которые (C,scale,cost), где C является матрицей беспорядка 2 на 2, scale, 2 1 массив шкал класса и cost, является матрицей стоимости misclassification 2 на 2.

Внимание

Некоторые из этих критериев возвращают значения NaN в одном из двух специальных порогов, 'reject all' и 'accept all'.

Пример: 'XCrit','ecost'

Критерий, чтобы вычислить для Y, заданного как пара, разделенная запятой, состоящая из 'YCrit' и одна из тех же опций критериев что касается X. Этот критерий не должен быть монотонной функцией положительного счета класса.

Пример: 'YCrit','ecost'

Значения для критерия X, заданного как пара, разделенная запятой, состоящая из 'XVals' и числового массива.

  • Если вы задаете XVals, то perfcurve вычисляет X и Y и pointwise доверительные границы для Y (когда применимый) только для заданного XVals.

  • Если вы не задаете XVals, то perfcurve, вычисляет X и Y и значения для всех очков по умолчанию.

Примечание

Вы не можете установить XVals и TVals одновременно.

Пример: 'XVals',[0:0.05:1]

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

Пороги для положительного счета класса, заданного как пара, разделенная запятой, состоящая из 'TVals' и или 'all' или числовой массив.

  • Если TVals установлен в 'all' или не задан, и XVals не задан, то perfcurve возвращает X, Y и значения T для всех очков и вычисляет pointwise доверительные границы для X и Y с помощью порогового усреднения.

  • Если TVals установлен в числовой массив, то perfcurve возвращает X, Y и значения T для заданных порогов и вычисляет pointwise доверительные границы для X и Y в этих порогах с помощью порогового усреднения.

Примечание

Вы не можете установить XVals и TVals одновременно.

Пример: 'TVals',[0:0.05:1]

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

Индикатор, чтобы использовать самые близкие значения в данных вместо заданного числового XVals или TVals, заданного как пара, разделенная запятой, состоящая из 'UseNearest' и или 'on' или 'off'.

  • Если вы задаете числовой XVals и устанавливаете UseNearest на 'on', то perfcurve возвращает самые близкие уникальные значения X, найденные в данных, и это возвращает соответствующие значения Y и T.

  • Если вы задаете числовой XVals и устанавливаете UseNearest на 'off', то perfcurve возвращает отсортированный XVals.

  • Если вы вычисляете доверительные границы перекрестной проверкой или начальной загрузкой, то этим параметром всегда является 'off'.

Пример: 'UseNearest','off'

Метод perfcurve для обработки очков NaN, заданных как пара, разделенная запятой, состоящая из 'ProcessNaN' и 'ignore' или 'addtofalse'.

  • Если ProcessNaN является 'ignore', то perfcurve удаляет наблюдения с очками NaN от данных.

  • Если ProcessNaN является 'addtofalse', то perfcurve добавляет экземпляры с очками NaN к ложным количествам классификации в соответствующем классе. Таким образом, perfcurve всегда считает экземпляры от положительного класса как ложное отрицание (FN), и это всегда считает экземпляры от отрицательного класса как положительная ложь (FP).

Пример: 'ProcessNaN','addtofalse'

Априорные вероятности для положительных и отрицательных классов, заданных как пара, разделенная запятой, состоящая из 'Prior' и 'empirical', 'uniform' или массива с двумя элементами.

Если Prior является 'empirical', то perfcurve выводит априорные вероятности от частот класса.

Если Prior является 'uniform', то perfcurve устанавливает все априорные вероятности быть равными.

Пример: 'Prior',[0.3,0.7]

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

Затраты Misclassification, заданные как пара, разделенная запятой, состоящая из 'Cost' и матрицы 2 на 2, содержа [Cost(P|P),Cost(N|P);Cost(P|N),Cost(N|N)].

Cost(N|P) является стоимостью неправильной классификации положительного класса как отрицательный класс. Cost(P|N) является стоимостью неправильной классификации отрицательного класса как положительный класс. Обычно, Cost(P|P) = 0 и Cost(N|N) = 0, но perfcurve позволяет вам задавать ненулевые затраты для правильной классификации также.

Пример: 'Cost',[0 0.7;0.3 0]

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

Уровень значения для доверительных границ, заданных как пара, разделенная запятой, состоящая из 'Alpha' и скалярного значения в области значений 0 до 1. perfcurve вычисляет 100* (1 – α) процент pointwise доверительные границы для X, Y, T и AUC для доверительного уровня 1 – α.

Пример: 'Alpha',0.01 задает 99% доверительных границ

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

Веса наблюдения, заданные как пара, разделенная запятой, состоящая из 'Weights' и вектор неотрицательных скалярных значений. Этот вектор должен иметь столько же элементов, сколько scores или labels делают.

Если scores и labels находятся в массивах ячеек, и необходимо предоставить Weights, веса должны быть в массиве ячеек также. В этом случае каждый элемент в Weights должен быть числовым вектором со столькими же элементов сколько соответствующий элемент в scores. Например, numel(weights{1}) == numel(scores{1}).

Когда perfcurve вычисляет X, Y и T или доверительные границы с помощью перекрестной проверки, это использует эти веса наблюдения вместо количеств наблюдения.

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

Значением по умолчанию является вектор 1 с или массива ячеек, в котором каждый элемент является вектором 1 с.

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

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

Если labels и scores являются массивами ячеек, этот параметр должен быть 0, потому что perfcurve может использовать или перекрестную проверку или загрузиться, чтобы вычислить доверительные границы.

Пример: 'NBoot',500

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

Тип доверительного интервала для bootci, чтобы использовать, чтобы вычислить доверительные границы, заданные как пара, разделенная запятой, состоящая из 'BootType' и одно из следующего:

  • 'bca' — Сместите исправленный и ускоренный метод процентили

  • 'norm или 'normal' — Нормальный аппроксимированный интервал с загруженной систематической ошибкой и стандартной погрешностью

  • 'per' или 'percentile' — Метод процентили

  • 'cper' или 'corrected percentile' — Сместите исправленный метод процентили

  • 'stud' или 'student' — Доверительный интервал Studentized

Пример: 'BootType','cper'

Дополнительные входные параметры для bootci, чтобы вычислить доверительные границы, заданные как пара, разделенная запятой, состоящая из 'BootArg' и {'Nbootstd',nbootstd} или {'Stderr',stderr}, аргументов пары "имя-значение" bootci.

Когда вы вычисляете доверительные интервалы начальной загрузки studentized ('BootType' является 'student'), можно дополнительно задать 'Nbootstd' или 'Stderr', аргументы пары "имя-значение" bootci, при помощи 'BootArg'.

  • 'BootArg',{'Nbootstd',nbootstd} оценивает стандартную погрешность статистики начальной загрузки с помощью начальной загрузки с выборками данных nbootstd. nbootstd является положительным целым числом, и его значение по умолчанию равняется 100.

  • 'BootArg',{'Stderr',stderr} оценивает стандартную погрешность статистики начальной загрузки пользовательским функциональным stderr, который берет [1:numel(scores)]' в качестве входного параметра. stderr является указателем на функцию.

Пример: 'BootArg',{'Nbootstd',nbootstd}

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

Опции для управления вычислением доверительных интервалов, заданных как пара, разделенная запятой, состоящая из 'Options' и массива структур, возвращенного statset. Эти опции требуют Parallel Computing Toolbox™. perfcurve использует этот аргумент для вычисления pointwise доверительные границы только. Чтобы вычислить эти границы, необходимо передать массивы ячеек для labels и scores или установить NBoot на положительное целое число.

Эта таблица суммирует доступные параметры.

ОпцияОписание
'UseParallel'
  • ложь Последовательное вычисление (значение по умолчанию).

  • tRUE Параллельное вычисление. Вам нужен Parallel Computing Toolbox для этой опции, чтобы работать.

'UseSubstreams'
  • ложь Не используйте отдельный подпоток для каждой итерации (значение по умолчанию).

  • tRUE Используйте отдельный подпоток для каждой итерации, чтобы вычислить параллельно восстанавливаемым способом. Чтобы вычислить восстанавливаемо, установите Streams на тип, позволяющий подпотоки: 'mlfg6331_64' или 'mrg32k3a'.

'Streams'

Объект RandStream или массив ячеек таких объектов. Если вы задаете Streams, используйте отдельный объект, кроме тех случаев, когда:

  • UseParallel является true.

  • UseSubstreams является false.

В этом случае используйте массив ячеек, одного размера в качестве параллельного пула. Если параллельный пул не открыт, то Streams должен предоставить один поток случайных чисел.

Если 'UseParallel' является true, и 'UseSubstreams' является false, то длина 'Streams' должна равняться количеству рабочих, используемых perfcurve. Если параллельный пул уже открыт, то длина 'Streams' является размером параллельного пула. Если параллельный пул не уже открыт, то MATLAB® может открыть пул для вас, в зависимости от вашей установки и настроек. Чтобы гарантировать более предсказуемые результаты, используйте parpool и явным образом создайте параллельный пул прежде, чем вызов perfcurve и установку 'Options',statset('UseParallel',true).

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

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

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

свернуть все

x - координирует для кривой производительности, возвращенной как вектор или m-by-3 матрица. По умолчанию значения X являются ложным положительным уровнем, FPR (осадки или 1 – специфика). Чтобы изменить X, используйте аргумент пары "имя-значение" XCrit.

  • Если perfcurve не вычисляет pointwise доверительные границы, или если он вычисляет их использующий вертикальное усреднение, то X является вектором.

  • Если perfcurve вычисляет доверительные границы с помощью порогового усреднения, то X является m-by-3 матрица, где m является количеством фиксированных пороговых значений. Первый столбец X содержит среднее значение. Вторые и третьи столбцы содержат нижнюю границу и верхнюю границу, соответственно, pointwise доверительных границ.

y- для кривой производительности, возвращенной как вектор или m-by-3 матрица. По умолчанию значения Y являются истинным положительным уровнем, TPR (отзыв или чувствительность). Чтобы изменить Y, используйте аргумент пары "имя-значение" YCrit.

  • Если perfcurve не вычисляет pointwise доверительные границы, то Y является вектором.

  • Если perfcurve вычисляет доверительные границы, то Y является m-by-3 матрица, где m является количеством фиксированных значений X или порогов (значения T). Первый столбец Y содержит среднее значение. Вторые и третьи столбцы содержат нижнюю границу и верхнюю границу, соответственно, pointwise доверительных границ.

Пороги на музыке классификатора к вычисленным значениям X и Y, возвращенного как вектор или m-by-3 матрица.

  • Если perfcurve не вычисляет pointwise доверительные границы или вычисляет их использующий пороговое усреднение, то T является вектором.

  • Если perfcurve вычисляет доверительные границы с помощью вертикального усреднения, T является m-by-3 матрица, где m является количеством фиксированных значений X. Первый столбец T содержит среднее значение. Вторые и третьи столбцы содержат нижнюю границу и верхнюю границу, соответственно, pointwise доверительных границ.

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

Для m отличные пороги нашли в массиве очков, perfcurve возвращает X, Y и массивы T с m + 1 строка. perfcurve устанавливает элементы T(2:m+1) на отличные пороги, и T(1) реплицирует T(2). Условно, T(1) представляет самый высокий порог 'reject all', и perfcurve вычисляет соответствующие значения X и Y для TP = 0 и FP = 0. Значение T(end) является самым низким порогом 'accept all' для который TN = 0 и FN = 0.

Область под кривой (AUC) для вычисленных значений X и Y, возвращенного как скалярное значение или вектор 3 на 1.

  • Если perfcurve не вычисляет pointwise доверительные границы, AUC является скалярным значением.

  • Если perfcurve вычисляет доверительные границы с помощью вертикального усреднения, AUC является вектором 3 на 1. Первый столбец AUC содержит среднее значение. Вторые и третьи столбцы содержат нижнюю границу и верхнюю границу, соответственно, доверительной границы.

Для совершенного классификатора, AUC = 1. Для классификатора, который случайным образом присваивает наблюдения классам, AUC = 0.5.

Если вы устанавливаете XVals на 'all' (значение по умолчанию), то perfcurve вычисляет AUC с помощью возвращенного X и значений Y.

Если XVals является числовым массивом, то perfcurve вычисляет AUC с помощью X и значений Y от всех отличных очков в интервале, которые заданы самыми маленькими и самыми большими элементами XVals. Более точно perfcurve находит значения X для всех отличных порогов, как будто XVals был установлен в 'all', и затем использует подмножество их (с соответствующими значениями Y) между min(XVals) и max(XVals), чтобы вычислить AUC.

perfcurve использует трапециевидное приближение, чтобы оценить область. Если первым или последним значением X или Y является NaN s, то perfcurve удаляет их, чтобы позволить вычисление AUC. Это заботится о критериях, которые производят NaN s для специального 'reject all' или порогов 'accept all', например, положительного прогнозирующего значения (PPV) или отрицательного прогнозирующего значения (NPV).

Оптимальная рабочая точка кривой ROC, возвращенной как 1 2 массив со значениями ложного положительного уровня (FPR) и истинного положительного уровня (TPR) для оптимальной рабочей точки ROC.

perfcurve вычисляет OPTROCPT для стандартной кривой ROC только и устанавливает на NaN s в противном случае. Чтобы получить оптимальную рабочую точку для кривой ROC, perfcurve сначала находит наклон, S, с помощью

S=Стоимость(P|N)Стоимость(N|N)Стоимость(N|P)Стоимость(P|P)*NP

  • Стойте (N |P) стоимость неправильной классификации положительного класса как отрицательный класс. Стойте (P |N) стоимость неправильной классификации отрицательного класса как положительный класс.

  • P = TP + FN и N = TN + FP. Они - общие количества экземпляра в положительном и отрицательном классе, соответственно.

perfcurve затем находит оптимальную рабочую точку путем перемещения прямой линии с наклонным S от левого верхнего угла графика ROC (FPR = 0, TPR = 1) вниз и направо, пока это не пересекает кривую ROC.

Значения для отрицательных подклассов, возвращенных как массив.

  • Если вы задаете только один отрицательный класс, то SUBY идентичен Y.

  • Если вы задаете k отрицательные классы, то SUBY является матрицей размера m-by-k, где m является количеством возвращенных значений для X и Y, и k является количеством отрицательных классов. perfcurve вычисляет значения Y путем подведения итогов количеств по всем отрицательным классам.

SUBY дает значения критерия Y каждого отрицательного класса отдельно. Для каждого отрицательного класса perfcurve помещает новый столбец в SUBY и заполняет его со значениями Y для истинного отрицания (TN) и положительной лжи (FP), считаемой только для этого класса.

Отрицательные имена классов, возвращенные как массив ячеек.

  • Если вы обеспечиваете входной массив отрицательных имен классов, NegClass, то имена копий perfcurve в SUBYNAMES.

  • Если вы не обеспечиваете NegClass, то perfcurve извлекает SUBYNAMES от входных меток. Порядок SUBYNAMES совпадает с порядком столбцов в SUBY. Таким образом, SUBY(:,1) является для отрицательного класса SUBYNAMES{1}, SUBY(:,2) является для отрицательного класса SUBYNAMES{2} и так далее.

Алгоритмы

свернуть все

Доверительные границы Pointwise

Если вы предоставляете массивы ячеек для labels и scores, или если вы устанавливаете NBoot на положительное целое число, то perfcurve возвращает pointwise доверительные границы для X, Y, T и AUC. Вы не можете предоставить массивы ячеек для labels и scores и установить NBoot на положительное целое число одновременно.

perfcurve передискретизирует данные, чтобы вычислить доверительные границы с помощью или перекрестной проверки или начальной загрузки.

  • Перекрестная проверка — Если вы предоставляете массивы ячеек для labels и scores, затем perfcurve, использует перекрестную проверку и обрабатывает элементы в массивах ячеек, когда перекрестная проверка сворачивается. labels может быть массивом ячеек числовых векторов, логических векторов, символьных матриц, массивов ячеек из символьных векторов или категориальных векторов. Все элементы в labels должны иметь тот же тип. scores может быть массивом ячеек числовых векторов. Массивы ячеек для labels и scores должны иметь то же число элементов. Количество меток в ячейке j labels должно быть равно количеству очков в ячейке j scores для любого j в диапазоне от 1 до числа элементов в scores.

  • Начальная загрузка — Если вы устанавливаете NBoot на положительный целочисленный n, perfcurve, генерирует копии начальной загрузки n, чтобы вычислить pointwise доверительные границы. Если вы используете XCrit или YCrit, чтобы установить критерий X или Y к анонимной функции, perfcurve может вычислить доверительные границы только с помощью начальной загрузки.

perfcurve оценивает доверительные границы с помощью одного из двух методов:

  • Вертикальное усреднение (VA) — perfcurve оценивает доверительные границы на Y и T в фиксированных значениях X. Таким образом, perfcurve берет выборки кривых ROC для фиксированных значений X, составляет в среднем соответствующий Y и значения T, и вычисляет стандартные погрешности. Можно использовать аргумент пары "имя-значение" XVals, чтобы зафиксировать значения X для вычислительных доверительных границ. Если вы не задаете XVals, то perfcurve вычисляет доверительные границы во всех значениях X.

  • Пороговое усреднение (TA) — perfcurve берет выборки кривых ROC в фиксированных порогах T для положительного счета класса, составляет в среднем соответствующий X и значения Y, и оценивает доверительные границы. Можно использовать аргумент пары "имя-значение" TVals, чтобы использовать этот метод для вычислительных доверительных границ. Если вы устанавливаете TVals на 'all' или не задаете TVals или XVals, то perfcurve возвращает X, Y и значения T для всех очков и вычисляет pointwise доверительные границы для Y и X с помощью порогового усреднения.

Когда вы вычисляете доверительные границы, Y является m-by-3 массив, где m является количеством фиксированных значений X или порогов (значения T). Первый столбец Y содержит среднее значение. Вторые и третьи столбцы содержат нижнюю границу и верхнюю границу, соответственно, pointwise доверительных границ. AUC является вектором - строкой с тремя элементами, в соответствии с тем же соглашением. Если perfcurve вычисляет доверительные границы с помощью ВА, то T является m-by-3 матрица, и X является вектор-столбцом. Если perfcurve использует TA, то X является m-by-3 матрица, и T является вектор-столбцом.

perfcurve возвращает pointwise доверительные границы. Это не возвращает одновременную полосу уверенности для целой кривой.

Ссылки

[1] Т. Фосетт. “Графики ROC: примечания и практические факторы для исследователей”, 2004.

[2] Цвейг, M. и Г. Кэмпбелл. “Рабочая характеристика получателя (ROC) Графики: Основной Инструмент Оценки в Клинической Медицине”. Clin. Chem. 1993, 39/4, стр 561–577.

[3] Дэвис, J. и М. Гоудрич. “Отношение Между Отзывом Точности и Кривыми ROC”. Продолжения ICML ’06, 2006, стр 233–240.

[4] Московиц, C. и М. Пепе. “Определяя количество и сравнивая прогнозирующую точность непрерывных прогностических факторов для бинарных результатов”. Биостатистика, 2004, 5, стр 113–127.

[5] Хуан, Y., М. Пепе и Цз. Фэн. “Оценивая прогнозирующий из непрерывного маркера”. U. Вашингтонский бумажный ряд биостатистики, 2006, 250–261.

[6] Briggs, W. и Р. Зэрецки. “График Навыка: Графический Метод для Оценки Непрерывных Диагностических Тестов”. Биометрика, 2008, 63, стр 250 – 261.

[7] Р. Беттингер. “Чувствительный к стоимости выбор классификатора Используя метод выпуклой оболочки ROC”. SAS Institute.

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

Представленный в R2009a