Matlab functions for finding false acceptance rate????

11 ビュー (過去 30 日間)
saba
saba 2012 年 4 月 24 日
編集済み: SGUNITN 2018 年 2 月 9 日
i want to calculate the false acceptance rate for a image data base.....can u plz help me with functions or code that i can use for this purpose. i have divided my data into training and testing set now i will do the comparison comparing 1 to n values and check the FAR but i dont know how to implement it...plz help
  1 件のコメント
Jan
Jan 2018 年 2 月 7 日
編集済み: Jan 2018 年 2 月 7 日
Concerning the Copyright note in Sandeep Gupta's answer: See the MATLAB Central Terms of Use:
4. MATLAB Answers
You agree that all Content that you contribute to the MATLAB Answers
portion of MATLAB Central will be licensed under the Creative Commons
Attribution Share Alike 3.0 license.
As far as I know this is no conflict with a copyright claim, as long as it is not accompanied by any stricter conditions as the "CC BY-SA 3.0" license.

サインインしてコメントする。

回答 (1 件)

SGUNITN
SGUNITN 2018 年 2 月 6 日
編集済み: SGUNITN 2018 年 2 月 7 日
Please acknowledge to "Machine-learning-using-PRTools" project while using this code and use the link (https://www.researchgate.net/project/Machine-learning-using-PRTools) in the footnote.
The database, label and source code can be downloaded at https://www.researchgate.net/project/Machine-learning-using-PRTools
To generate the input data
genMDS = gendatm; %160 x 20
csvwrite('gendatm3Feb18.csv', genMDS.data);
And create the labels 160x1 array with 16 class of size 20.
Create a file name main.m
This is the main file containing 2 functions.
--------------------------------------------------------------------------
clear;
clc;
%genMDS = gendatm; %160 x 20
%csvwrite('gendatm3Feb18.csv', genMDS.data);
% scatterd(genMDS); % defines the plotting domain of interest
data = csvread('gendatm3Feb18.csv');
labels = csvread('labels8x20.csv'); % Read a 1 D labels 8 x 20
prData = prdataset(data, labels);
prData = setprior(prData,0);
prData(isnan(prData)) = 0;
%//////////////////////////////////////////////////////////////////////
nClasses = 8;
nTrainingSamples = 5;
nSamplesPerClass = 20;
[train, test] = gendat(prData, nTrainingSamples/nSamplesPerClass); % Here assign observations for
training
w = qdc(train); % the class names (labels) of train are stored in w
trueTrainingLabels = getlabels(w); % this routine shows labels
%plotc(w, 'col');
%hold on;
%scatterd(a); % defines the plotting domain of interest
FR = test*w; % classify test set
arrFRLabels = FR*labeld; % get the labels of the test objects
%disp([+d arrFRLabels]); % show the posterior probabilities and labels
weighted_average_error = FR*testc;
%///////////////////////////////////////////////////////////////////
prCM = test*w*classc; % Confusion Matrix
csvwrite('cm.csv', prCM.data);
csvwrite('true_label.csv', prCM.nlab);
csvwrite('est_label.csv', arrFRLabels);
% Calculate FRR that is the number of false rejected for each class.
FRR = fxGetFRR(arrFRLabels, nClasses, nSamplesPerClass-nTrainingSamples);
xlswrite('result.xls', FRR, 'FRR');
%///////////////////////////////////////////////////////////////////
% Attack Scenario
FAR = cell(nClasses+3, 3);
FAR(1,:) = {'Class', 'TRR', 'FAR'};
attackLabels = zeros((nClasses-1)*nSamplesPerClass, 1);
for c = 1:nClasses
attackLabels(1:nTotalAttacks, 1) = c;
% Exclude data between startRow and endRow
startExRow = (c-1)*nSamplesPerClass;
endExRow = startExRow + nSamplesPerClass + 1;
A = data(1:startExRow,:);
B = data(endExRow:nClasses*nSamplesPerClass,:);
attackData = vertcat(A,B);
prAttack = prdataset(attackData, attackLabels);
prAttack = setprior(prAttack,0);
prAttack(isnan(prAttack)) = 0;
trueAttackLabels = getlabels(prAttack);
% FAR
FA = prAttack*w;
arrFALabels = FA*labeld;
% Calculate FAR that is the number of false acceptance for each class.
FARperClass = fxGetFAR(arrFALabels, nClasses, nSamplesPerClass, c);
FAR(c+1,:) = FARperClass;
end
FAR{nClasses+2,1} = 'SUM';
FAR{nClasses+3,1} = 'PERCENTAGE';
for col = 2:3
sum = 0;
for c = 2:nClasses+1
sum = sum + FAR{c,col};
end
FAR{nClasses+2,col} = sum;
FAR{nClasses+3, col} = FAR{nClasses+2,col}/(nClasses*(nClasses-1)*nSamplesPerClass);
end
xlswrite('result.xls', FAR, 'FAR');
--------------------------------------------------------------------------------------------------
Second file, create a file name fxGetFRR.m
function FRR = fxGetFRR(arrLabels, aClasses, aObservations)
% FAR - False Rejection Rate is number of false rejections per class
% for a legitimate user.
FRR = cell(aClasses+3, 3);
FRR(1,:) = {'Class', 'TAR', 'FRR'};
for c = 1:aClasses
trueAccepts = 0;
for o = 1:aObservations
nCount = aObservations * (c-1) + o;
%fprintf('%d,%d\n', c, aLabels(nCount))
if arrLabels(nCount) == c
trueAccepts = trueAccepts + 1;
end
end
FRR(c+1,:) = {c, trueAccepts, aObservations - trueAccepts};
end
FRR{aClasses+2,1} = 'SUM';
FRR{aClasses+3,1} = 'PERCENTAGE';
for col = 2:3
sum = 0;
for c = 2:aClasses+1
sum = sum + FRR{c,col};
end
FRR{aClasses+2,col} = sum;
FRR{aClasses+3, col} = FRR{aClasses+2,col}/(aClasses*aObservations);
end
--------------------------------------------------------------------------------------------------
Third file, create a file name fxGetFAR.m
function FAR = fxGetFAR(arrLabels, aClasses, aObservations, aC)
% FAR - False acceptance rate is number of false acceptance per class
% for imposters.
nTotalObservations = (aClasses-1)*aObservations;
falseAccepts = 0;
for o = 1:nTotalObservations
if arrLabels(o) == aC
falseAccepts = falseAccepts + 1;
end
end
FAR = {aC, nTotalObservations - falseAccepts, falseAccepts};
  2 件のコメント
Jan
Jan 2018 年 2 月 7 日
How is this code used? Neither the inputs files are provided, nor is it explained, what they should contain.
"sum" is used as name of a variable, which is an evergreen problem in the forum. The code can be simplified, e.g.:
falseAccepts = 0;
for o = 1:nTotalObservations
if arrLabels(o) == aC
falseAccepts = falseAccepts + 1;
end
end
can and should be replaced by:
falseAccept = sum(arrLabels(1:nTotalObservations) == aC);
Or
sum = 0;
for c = 2:nClasses+1
sum = sum + FAR{c,col};
end
by
S = sum([FAR{2:nClasses+1, col}]);
SGUNITN
SGUNITN 2018 年 2 月 9 日
編集済み: SGUNITN 2018 年 2 月 9 日
Please refer to the link https://www.researchgate.net/project/Machine-learning-using-PRTools
I have uploaded the source file along with labels file. DataSet can be generated dynamically.
genMDS = gendatm; %160 x 20
Most of the modern compilers optimize the instruction. for example, in case of C++ if you write the instruction
if (1) {
// DO NOTHING
}
g++ compiler will optimize the program by excluding the redundant code like above.
I guess Matlab compiler can also take care of below type of code.
sum = 0;
for c = 2:nClasses+1
sum = sum + FAR{c,col};
end
I deliberately not have optimized my code. However, your suggestions are appreciated.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCode Generation についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by