perfcurve

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

Описание

пример

[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 приводит к лучшим результатам. Для визуального сравнения производительности классификации с этими двумя гамма значениями параметров смотрите, Обучают Классификатор 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 возвратить XY, и 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 возвращает XY, и 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 значение
Числовой векторЧисловой скаляр
Логический векторЛогический скаляр
Символьная матрицаСимвольный вектор
Массив строкСкаляр строки
Массив ячеек из символьных векторовВектор символов или ячейка, содержащая вектор символов
Категориальный вектор Категориальный скаляр

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

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

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

Задайте дополнительные разделенные запятой пары Name,Value аргументы. 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 возвращает XY, и T значения для всех баллов и вычисляют pointwise доверительные границы для X и Y использование порогового усреднения.

  • Если TVals установлен в числовой массив, затем perfcurve возвращает XY, и 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 доверительные границы для XYT, и AUC для доверительного уровня 1 – α.

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

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

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

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

Когда perfcurve вычисляет XY и 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' isstudent), можно дополнительно задать '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'
  • false — Последовательный расчет (значение по умолчанию).

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

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

  • 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 возвращает XY и 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 NaNs, затем perfcurve удаляет их, чтобы позволить вычисление AUC. Это заботится о критериях, которые производят NaNs для специального 'reject all' или 'accept all' пороги, например, положительное прогнозирующее значение (PPV) или отрицательное прогнозирующее значение (NPV).

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

perfcurve вычисляет OPTROCPT поскольку стандартный ROC изгибается только, и устанавливает на NaNs в противном случае. Получить оптимальную рабочую точку для кривой 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 доверительные границы для XYT, и 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 возвращает XY, и 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