Кривая рабочей характеристики приемника (ROC) или другая кривая эффективности для вывода классификатора
[___] = perfcurve(
возвращает координаты кривой ROC и любого другого выходного аргумента из предыдущих синтаксисов с дополнительными опциями, заданными одной или несколькими labels
,scores
,posclass
,Name,Value
)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')
Загрузите выборочные данные.
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.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
с функцией, которая влияет на счета двух отрицательных классов. Одной из таких функций является .
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
Найдите порог, который соответствует оптимальной рабочей точке.
T((X==OPTROCPT(1))&(Y==OPTROCPT(2)))
ans = 0.2857
Задайте virginica
в качестве отрицательного класса вычислите и постройте график кривой ROC для versicolor
.
Снова, вы должны поставить perfcurve
с функцией, которая влияет на счета отрицательного класса. Пример функции, которую нужно использовать, .
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
состоит из цветков радужки трех различных видов: сетоза, версиколор, виргиника. Матрица с двойной 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')
Не всегда можно управлять ложноположительной частотой (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')
Задайте пороговые значения, которые нужно исправить и вычислить кривую 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')
labels
- Истинные метки классовМетки истинного класса, заданные как числовой вектор, логический вектор, символьная матрица, строковые массивы, массив ячеек из векторов символов или категориальный массив. Для получения дополнительной информации смотрите Сгруппированные переменные.
Пример: {'hi','mid','hi','low',...,'mid'}
Пример: ['H','M','H','L',...,'M']
Типы данных: single
| double
| logical
| char
| string
| cell
| categorical
scores
- Счета, возвращенные классификаторомСчета, возвращенные классификатором для некоторых выборочных данных, заданные как вектор с плавающими точками. scores
должно иметь то же количество элементов, что и labels
.
Типы данных: single
| double
posclass
- Положительная метка классаПоложительная метка класса, заданная как числовой скаляр, логический скаляр, вектор символов, строковый скаляр, камера, содержащая символьный вектор или категориальный скаляр. Положительный класс должен быть представителем входных меток. Значение 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'
- Список отрицательных классов'all'
(по умолчанию) | числовой массив | категориальный массив | строковые массивы | массив ячеек из векторов символовСписок отрицательных классов, заданный как разделенная разделенными запятой парами, состоящая из 'NegClass'
и числовой массив, категориальный массив, строковые массивы или массив ячеек из векторов символов. По умолчанию, perfcurve
устанавливает NegClass
на 'all'
и рассматривает все непозитивные классы, найденные во входном массиве меток, как отрицательные.
Если NegClass
является подмножеством классов, найденных в входе массиве меток, затем perfcurve
отбрасывает образцы с метками, которые не относятся ни к положительным, ни к отрицательным классам.
Пример: 'NegClass',{'versicolor','setosa'}
Типы данных: single
| double
| categorical
| char
| string
| cell
'XCrit'
- Критерий для вычисления X
'fpr'
(по умолчанию) | 'fnr'
| 'tnr'
| 'ppv'
| 'ecost'
| ...Критерий для вычисления 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'
'YCrit'
- Критерий для вычисления Y
'tpr'
(по умолчанию) | те же опции критериев для X
'XVals'
- Значения для X
критерий'all'
(по умолчанию) | числовой массивЗначения для 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'
или числовой массив.
Если 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
'UseNearest'
- Индикатор для использования ближайших значений в данных'on'
(по умолчанию) | 'off'
Индикатор для использования ближайших значений в данных вместо заданного числового XVals
или TVals
, заданная как разделенная разделенными запятой парами, состоящая из 'UseNearest'
и любой из них 'on'
или 'off'
.
Если вы задаете числовое XVals
и установите UseNearest
на 'on'
, затем perfcurve
возвращает ближайший уникальный X
значения, найденные в данных, и они возвращают соответствующие значения Y
и T
.
Если вы задаете числовое XVals
и установите UseNearest
на 'off'
, затем perfcurve
возвращает отсортированное XVals
.
Если вы вычисляете доверительные границы путем перекрестной валидации или bootstrap, то этот параметр всегда 'off'
.
Пример: 'UseNearest','off'
'ProcessNaN'
— perfcurve
способ обработки NaN
счета'ignore'
(по умолчанию) | 'addtofalse'
perfcurve
способ обработки NaN
счета, заданные как разделенная разделенными запятой парами, состоящая из 'ProcessNaN'
и 'ignore'
или 'addtofalse'
.
Если ProcessNaN
является 'ignore'
, затем perfcurve
удаляет наблюдения с помощью NaN
счета из данных.
Если ProcessNaN
является 'addtofalse'
, затем perfcurve
добавляет образцы с NaN
считает ложными счетчики классификации в соответствующем классе. То есть, perfcurve
всегда отсчитывает образцы из положительного класса как ложноотрицательные (FN), и он всегда отсчитывает образцы из отрицательного класса как ложноположительные (FP).
Пример: 'ProcessNaN','addtofalse'
'Prior'
- Априорные вероятности для положительных и отрицательных классов'empirical'
(по умолчанию) | 'uniform'
| массив с двумя элементамиПредыдущие вероятности для положительных и отрицательных классов, заданные как разделенная разделенными запятой парами, состоящая из 'Prior'
и 'empirical'
, 'uniform'
или массив с двумя элементами.
Если Prior
является 'empirical'
, затем perfcurve
выводит предыдущие вероятности из частот классов.
Если Prior
является 'uniform'
, затем perfcurve
устанавливает все предыдущие вероятности равными.
Пример: 'Prior',[0.3,0.7]
Типы данных: single
| double
| char
| string
'Cost'
- Расходы на неправильную классификацию[0 0.5;0.5 0]
(по умолчанию) | матрицу 2 на 2Затраты на неправильную классификацию, заданные как разделенная разделенными запятой парами, состоящая из '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'
- Уровень значимостиУровень значимости для доверительных границ, заданный как разделенная разделенными запятой парами, состоящая из 'Alpha'
и скалярное значение в области значений от 0 до 1. perfcurve
вычисляет 100 * (1 - α) процентов точных доверительных границ для X
, Y
, T
, и AUC
для доверия уровня 1 - α.
Пример: 'Alpha',0.01
задает 99% доверительных границ
Типы данных: single
| double
'Weights'
- Веса наблюденийВеса наблюдений, заданные как разделенная разделенными запятой парами, состоящая из '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'
- Количество реплик начальной загрузкиКоличество реплик начальной загрузки для расчета из доверия границ, заданное как разделенная запятой пара, состоящее из 'NBoot'
и положительное целое число. Значение по умолчанию 0 означает, что доверительные границы не вычисляются.
Если labels
и scores
являются массивами ячеек, этот параметр должен быть 0, потому что perfcurve
может использовать перекрестную валидацию или bootstrap для вычисления доверительных границ.
Пример: 'NBoot',500
Типы данных: single
| double
'BootType'
- Тип доверительного интервала для bootci
'bca'
(по умолчанию) | 'norm
| 'per'
| 'cper'
| 'stud'
Доверие интервала для bootci
для использования для вычисления доверительных границ, заданных как разделенная разделенными запятой парами, состоящая из 'BootType'
и одно из следующих:
'bca'
- Метод коррекции смещения и ускорения процентиля
'norm
или 'normal'
- Нормальный аппроксимированный интервал с начальным смещением и стандартной ошибкой
'per'
или 'percentile'
- Метод процентиля
'cper'
или 'corrected percentile'
- Метод коррекции смещения процентиля
'stud'
или 'student'
- Исследуемый доверительный интервал
Пример: 'BootType','cper'
'BootArg'
- Дополнительные входные параметры для bootci
{'Nbootstd',nbootstd}
| {'Stderr',stderr}
Необязательные входные параметры для 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
Опции для управления расчета интервалов доверия, заданные как разделенная запятой пара, состоящая из 'Options'
и массив структур, возвращенный statset
. Эти опции требуют Parallel Computing Toolbox™. perfcurve
использует этот аргумент только для вычисления точечных доверительных границ. Чтобы вычислить эти границы, вы должны передать массивы ячеек для labels
и scores
или установите NBoot
в положительное целое число.
В этой таблице представлены доступные опции.
Опция | Описание |
---|---|
'UseParallel' |
|
'UseSubstreams' |
|
'Streams' |
A
В этом случае используйте массив ячеек того же размера, что и параллельный пул. Если параллельный пул не открыт, то |
Если 'UseParallel'
является true
и 'UseSubstreams'
является false
, затем длина 'Streams'
должно равняться количеству работников, используемых в perfcurve
. Если параллельный пул уже открыт, то длина 'Streams'
- размер параллельного пула. Если параллельный пул еще не открыт, то MATLAB® может открыть пул для вас, в зависимости от вашей установки и настроек. Чтобы гарантировать более предсказуемые результаты, используйте parpool
(Parallel Computing Toolbox) и явным образом создать параллельный пул перед вызовом perfcurve
и настройка 'Options',statset('UseParallel',true)
.
Пример: 'Options',statset('UseParallel',true)
Типы данных: struct
X
- x -координаты для кривой эффективностиfpr
(по умолчанию) | m -by-3 матрицаx -cordinates для кривой эффективности, возвращенный как вектор или матрица m -by-3. По умолчанию X
значения являются ложноположительной частотой, FPR (выпадение или 1 - специфичность). Как изменить X
, используйте XCrit
аргумент пары "имя-значение".
Если perfcurve
не вычисляет точечные доверительные границы, или если вычисляет их с помощью вертикального усреднения, то X
является вектором.
Если perfcurve
вычисляет доверительные границы с помощью усреднения порога, затем X
- матрица m -by-3, где m - количество фиксированных пороговых значений. Первый столбец X
содержит среднее значение. Второй и третий столбцы содержат нижнюю и верхнюю границы, соответственно, точечных доверительных границ.
Y
- y -координаты для кривой эффективностиtpr
(по умолчанию) | m -by-3 матрицаy -cordinates для кривой эффективности, возвращенный как вектор или матрица m -by-3. По умолчанию Y
значения являются истинной положительной частотой, TPR (отзыв или чувствительность). Как изменить Y
, использовать YCrit
аргумент пары "имя-значение".
Если perfcurve
не вычисляет точечные доверительные границы, тогда Y
является вектором.
Если perfcurve
вычисляет доверительные границы, затем Y
- матрица m -by-3, где m - количество фиксированных X
значения или пороги (T
значения). Первый столбец Y
содержит среднее значение. Второй и третий столбцы содержат нижнюю и верхнюю границы, соответственно, точечных доверительных границ.
T
- Пороги по счетам классификатораПороги по счетам классификатора для вычисленных значений 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
- Площадь под кривойПлощадь под кривой (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
являются NaN
s, тогда perfcurve
удаляет их, чтобы разрешить вычисление AUC
. Это заботится о критериях, которые производят NaN
s для специальной 'reject all'
или 'accept all'
пороги, для примера, положительное прогнозирующее значение (PPV) или отрицательное прогнозирующее значение (NPV).
OPTROCPT
- Оптимальная рабочая точка кривой ROCОптимальная рабочая точка кривой ROC, возвращаемая как массив 1 на 2 с ложной положительной частотой (FPR) и истинной положительной частотой (TPR) для оптимальной рабочей точки ROC.
perfcurve
вычисляет OPTROCPT
только для стандартной кривой ROC и устанавливает значение NaN
s в противном случае. Чтобы получить оптимальную рабочую точку для кривой ROC, perfcurve
сначала находит уклон, S, используя
Стоимость (N | P) - это стоимость неправильной классификации положительного класса как отрицательного. Стоимость (P | N) - это стоимость неправильной классификации отрицательного класса как положительного класса.
P = TP + FN и N = TN + FP. Они являются общим количеством образцов в положительном и отрицательном классах, соответственно.
perfcurve
затем находит оптимальную рабочую точку путем перемещения прямой линии с S уклона из верхнего левого угла графика ROC (FPR = 0
, TPR = 1
) вниз и вправо, пока он не пересечет кривую ROC.
SUBY
- Значения для отрицательных подклассовЗначения для отрицательных подклассов, возвращенные как массив.
Если вы задаете только один отрицательный класс, то SUBY
идентичен Y
.
Если вы задаете k отрицательные классы, то SUBY
- матрица размера m -by - k, где m - количество возвращенных значений для X
и Y
, и k количество отрицательных классов. perfcurve
вычисляет Y
значения путем суммирования счетчиков по всем отрицательным классам.
SUBY
приводит значения Y
критерий для каждого отрицательного класса отдельно. Для каждого отрицательного класса, perfcurve
помещает новый столбец в SUBY
и заполняет его Y
значения для истинного отрицательного (TN) и ложного положительного (FP), отсчитываемые только для этого класса.
SUBYNAMES
- Отрицательные имена классовОтрицательные имена классов, возвращенные как массив ячеек.
Если вы предоставляете входной массив отрицательных имен классов,, 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.
Чтобы выполнять параллельно, задайте 'Options'
аргумент имя-значение в вызове этой функции и установите 'UseParallel'
поле структуры опций для true
использование statset
.
Для примера: 'Options',statset('UseParallel',true)
Для получения дополнительной информации о параллельных вычислениях смотрите Запуск функций MATLAB с автоматической поддержкой параллельных вычислений (Parallel Computing Toolbox).
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.