exponenta event banner

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

Примеры

свернуть все

Загрузите образцы данных.

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')

Figure contains an axes. The axes with title ROC for Classification by Logistic Regression contains an object of type line.

Загрузите образцы данных.

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

Figure contains an axes. The axes with title ROC Curves for Logistic Regression, SVM, and Naive Bayes Classification contains 3 objects of type line. These objects represent Logistic Regression, Support Vector Machines, Naive Bayes.

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

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

AUClog
AUClog = 0.9659
AUCsvm
AUCsvm = 0.9489
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 , которая принимает две матрицы в пространстве признаков в качестве входных данных и преобразует их в матрицу Gram с использованием сигмоидного ядра.

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 с помощью функции sigmoid kernel. Рекомендуется стандартизировать данные.

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, дает лучшие результаты in-sample.

Сравните показатели AUC.

auc1
auc2
auc1 =

    0.9518


auc2 =

    0.9985

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

Загрузите образцы данных.

load fisheriris

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

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

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

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

[~,score] = resubPredict(Model);

Баллы - это апостериорные вероятности того, что наблюдение (строка в матрице данных) принадлежит классу. Столбцы score соответствуют классам, указанным в 'ClassNames'. Так, первый столбец соответствует сетозе, второй - версиколору, а третий - 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
    {'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

Figure contains an axes. The axes with title ROC Curve for Classification by Classification Trees contains 2 objects of type line.

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

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

Figure contains an axes. The axes with title ROC Curve for Classification by Classification Trees contains 2 objects of type line.

Загрузите образцы данных.

load fisheriris

Вектор столбца species состоит из цветков радужки трёх различных видов: сетозы, версиколора, виргиники. Двойная матрица 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');

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

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

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

Постройте график точечных доверительных интервалов.

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')

Figure contains an axes. The axes with title ROC Curve with Pointwise Confidence Bounds contains an object of type errorbar. This object represents PCBwVA.

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

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

Если установить 'TVals' кому 'All', или если вы не указываете 'TVals' или 'Xvals', то perfcurve прибыль X, Y, и T значения для всех баллов и вычисляет точечные доверительные границы для 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')

Figure contains an axes. The axes with title ROC Curve with Pointwise Confidence Bounds contains an object of type errorbar. This object represents PCBwTA.

Укажите пороговые значения для фиксации и вычисления кривой 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')

Figure contains an axes. The axes with title ROC Curve with Pointwise Confidence Bounds contains an object of type errorbar. This object represents PCBwTA.

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

свернуть все

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

Пример: {'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. Он также указывает, что точечные доверительные границы вычисляются с использованием метода процентиля.

Список отрицательных классов, указанный как разделенная запятыми пара, состоящая из '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 является матрицей затрат на ошибочную классификацию «2 на 2».

Внимание

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

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

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

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

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

  • При указании XVals, то perfcurve вычисляет X и Y и точечные доверительные границы для 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 значения для всех баллов и вычисляет точечные доверительные границы для X и Y использование усреднения порога.

  • Если TVals устанавливается в числовой массив, то perfcurve прибыль X, Y, и T значения для указанных пороговых значений и вычисляет точечные доверительные границы для 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 подсчитывает в соответствующем классе количество баллов до значения «false classification». То есть perfcurve всегда подсчитывает экземпляры из положительного класса как ложноотрицательные (FN), и всегда подсчитывает экземпляры из отрицательного класса как ложноположительные (FP).

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

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

Если Prior является 'empirical', то perfcurve извлекает предшествующие вероятности из частот класса.

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

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

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

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

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

Типы данных: 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' - Изученный доверительный интервал

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

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

При вычислении изученных доверительных интервалов начальной загрузки ('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. Эти параметры требуют Toolbox™ параллельных вычислений. perfcurve использует этот аргумент только для вычисления точечных доверительных границ. Чтобы вычислить эти границы, необходимо передать массивы ячеек для labels и scores или набор NBoot в положительное целое число.

В этой таблице представлены доступные параметры.

ВыборОписание
'UseParallel'
  • false - Последовательный расчет (по умолчанию).

  • true - Параллельные вычисления. Для работы этой опции требуется панель инструментов параллельных вычислений.

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

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

'Streams'

A 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 не вычисляет точечные доверительные границы, или если вычисляет их с помощью вертикального усреднения, то X является вектором.

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

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

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

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

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

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

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

Для каждого порогового значения, 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 не вычисляет точечные доверительные границы, 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}и так далее.

Алгоритмы

свернуть все

Точечные доверительные границы

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

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

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

  • Bootstrap - если установлен NBoot в положительное целое число n, perfcurve создает n загрузочных реплик для вычисления точечных доверительных границ. Если вы используете 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 значения для всех баллов и вычисляет точечные доверительные границы для Y и X использование усреднения порога.

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

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

Ссылки

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

[2] Цвейг, M. и Г. Кэмпбелл. «Графики операционных характеристик приемника (ROC): фундаментальный инструмент оценки в клинической медицине». Чим. 1993, 39/4, стр. 561-577.

[3] Дэвис, Дж. и М. Гоадрич. «Взаимосвязь между кривыми прецизионного отзыва и ROC». Труды ИКМЛ "06, 2006, стр. 233-240.

[4] Московиц, К. и М. Пепе. «Количественная оценка и сравнение точности прогнозирования непрерывных прогностических факторов для бинарных результатов». Биостатистика, 2004, 5, стр. 113-127.

[5] Хуан, Я., М. Пепе и З. Фэн. «Оценка прогнозируемости непрерывного маркера». U. Washington Biostatistics Paper Series, 2006, 250-261.

[6] Бриггс, У. и Р. Зарецки. «График навыков: графический метод оценки непрерывных диагностических тестов». Биометрия, 2008, 63, стр. 250 - 261.

[7] Р. Беттингер. «Выбор классификатора с учетом затрат с использованием метода ROC Convex Hull». Институт САС.

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

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