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

Примеры

свернуть все

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

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

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

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

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

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

Спрогнозируйте метки и счета классов для вида на основе дерева Model.

[~,score] = resubPredict(Model);

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

Вычислите кривую ROC для предсказаний, что наблюдение принадлежит версиколору, учитывая истинные метки классов 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) и дискретизации с помощью bootstrap.

[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.

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

свернуть все

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

Пример: {'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.

  • Если вы вычисляете доверительные границы путем перекрестной валидации или bootstrap, то этот параметр всегда '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

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

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

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

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

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

Пример: '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.

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

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

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

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

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

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

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

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

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

'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 (Parallel Computing Toolbox) и явным образом создать параллельный пул перед вызовом perfcurve и настройка 'Options',statset('UseParallel',true).

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

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

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

свернуть все

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

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

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

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

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

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

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

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

  • Если perfcurve вычисляет доверительные границы с помощью вертикального усреднения, T - матрица m -by-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. The 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=Cost(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 возвращает данные к вычислению доверительных границ с помощью перекрестной валидации или bootstrap.

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

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

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

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

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

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

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

Ссылки

[1] Т. Фосетт. «ROC Графиков: Notes and Practical Факторов for Research», 2004.

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

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

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

[5] Huang, Y., M. Pepe, and Z. Feng. «Оценка предсказуемости непрерывного маркера». U. Washington Biostatistics Paper Series, 2006, 250-261.

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

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

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

Введенный в R2009a