matlab自带的roc曲线绘制的函数 plotroc.m源代码
==============
function result = plotroc(varargin)
%PLOTROC Plot receiver operating characteristic.
%
% Syntax
%
%
plotroc(targets,outputs)
%
plotroc(targets1,outputs1,'name1',targets,outputs2,'name2',
...)
%
% Description
%
% PLOTROC(TARGETS,OUTPUTS)
plots the receiver operating characteristic
% for each output class. The
more each curve hugs the left and top edges
% of the plot, the better the
classification.
%
%
PLOTROC(TARGETS1,OUTPUTS2,'name1',...) generates multiple
plots.
%
% Example
%
% load
simplecluster_dataset
% net =
newpr(simpleclusterInputs,simpleclusterTargets,20);
% net =
train(net,simpleclusterInputs,simpleclusterTargets);
% simpleclusterOutputs =
sim(net,simpleclusterInputs);
%
plotroc(simpleclusterTargets,simpleclusterOutputs);
%
% See also ROC
% Copyright 2007-2008 The MathWorks, Inc.
if nargin < 1, error('NNET:Arguments','Not enough
input arguments.'); end
%% Info
if strcmp(varargin{1},'info')
info.name = mfilename;
info.title = 'Receiver
Operating Characteristic';
info.type = 'Plot';
info.version = 6;
result = info;
return;
end
if nargin < 1, error('NNET:Arguments','Incorrect
number of input arguments.'); end
%% Plot
v1 = varargin{1};
if ~isa(varargin{1},'network')
% User arguments - New
plot
count = round(nargin/3);
tt = cell(1,count);
yy = cell(1,count);
names = cell(1,count);
for i=1:count
tt{i} =
varargin{i*3-2};
yy{i} =
varargin{i*3-1};
if nargin >=
(i*3)
names{i} = varargin{i*3};
else
names{i} = '';
end
end
fig = new_figure('');
elseif (isa(v1,'network')
&& (nargin == 3))
[net,tr,signals] =
deal(varargin{:});
tt={};
yy={};
names = {};
for i=1:length(signals)
signal = signals{i};
if
~isempty(signal.indices)
tt = [tt {signal.T}];
yy = [yy {signal.Y}];
names = [names {signal.name}];
end
end
if length(names)
> 1
tt = [tt
{cell2mat([tt{:}])}];
yy = [yy
{cell2mat([yy{:}])}];
names = [names
{'All'}];
end
fig =
nn_find_tagged_figure(mfilename);
if isempty(fig)
fig =
new_figure(mfilename);
end
end
update_figure(fig,tt,yy,names);
if (nargout > 0), result = fig; end
%% New Figure
function fig = new_figure(tag)
fig = figure;
ud.numSignals = 0;
ud.numClasses = 0;
this = 'plotroc';
info = feval_r(this,'info');
set(fig,'name',[info.title ' (' this ')']);
set(fig,'menubar','none','toolbar','none','NumberTitle','off');
set(fig,'tag',tag,'UserData',ud)
%% Update Figure
function update_figure(fig,tt,yy,names)
ok = true;
if ok
plot_figure(fig,tt,yy,names);
else
clear_figure(fig);
end
drawnow
%% Plot Figure
function plot_figure(fig,tt,yy,names)
set(0,'CurrentFigure',fig);
ud = get(fig,'userdata');
t = tt{1}; if iscell(t), t = cell2mat(t); end
numSignals = length(names);
numClasses = size(t,1);
% Rebuild figure
if (ud.numSignals ~= numSignals) || (ud.numClasses ~=
numClasses)
clf(fig);
set(fig,'nextplot','replace');
ud.numSignals =
numSignals;
ud.numClasses =
numClasses;
ud.axes =
zeros(1,numSignals);
pos =
get(fig,'position');
windowSize = [350*numSignals,
300];
pos(3:4) = windowSize;
if (ud.numSignals == 0)
screenSize =
get(0,'ScreenSize');
screenSize =
screenSize(3:4);
pos(1:2)=
(screenSize-windowSize)/2;
end
set(fig,'position',pos);
colors = {[0 0 1],[0 0.8 0],[1
0 0]};
plotcols =
ceil(sqrt(numSignals));
plotrows =
ceil(numSignals/plotcols);
for plotrow=1:plotrows
for plotcol=1:plotcols
i = (plotrow-1)*plotcols+plotcol;
if (i<=numSignals)
a =
subplot(plotrows,plotcols,i);
set(a,'dataaspectratio',[1
1 1]);
set(a,'xlim',[0
1]);
set(a,'ylim',[0
1]);
hold on
axisdata =
[];
axisdata.lines
= zeros(1,numClasses);
for
j=1:numClasses
c =
colors{rem(j-1,length(colors))+1};