Bonjour
j'ai une matrice des images et les labels des images mais j'ai besoin de calculer la précision et le rappel

Matrice:
0,547217125382263 0,141869547608048 2,73514224914026 0,908408074028879 66000
0,389065687474500 0,676138191520245 1,05622436741489 0,964604514105959 86583
0,978419671363857 0,186406440276045 2,60229686658147 0,884023965502944 60605
0,762748929834357 0,141494795830999 2,71359919601333 0,912546780229707 65272
0,832627390578873 0,214033586246137 2,48664448744442 0,895588412622574 63112
1,40871939736346 0,0594342793991338 3,30261729242964 0,751310903049683 53700
1,80418305947697 0,0474576273892040 3,43020739621968 0,665833540372671 69600
1,47542270531401 0,0638659856760691 3,29036773963911 0,732349570966429 83400
0,654374225526642 0,391483936194073 1,67537406947944 0,918955014334420 81300
0,346565656565657 0,556578673820999 1,34645013162693 0,918493288590604 60000
0,823718973047832 0,271027190755556 2,00434841329787 0,920513396825397 75600
0,340451494813911 0,172443607137157 2,34959186326421 0,912242561205273 89100
0,393422818791946 0,237279818726884 2,10260737675332 0,900400101203793 90000
1,13235714285714 0,155687964002268 2,70758143813798 0,843950481859411 84600
1,48244334208735 0,175643278810805 2,69680916640570 0,858117903487429 82800

lables:
'dinosaur'
'dinosaur'
'dinosaur'
'dinosaur'
'dinosaur'
'dinosaur'
'papillon'
'papillon'
'avion'
'avion'
'avion'
'avion'
'avion'
'dinosaur'
'dinosaur'


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
% returns the precision-recall points for plotting. 
% 'dismat' is an NxN distance matrix containing the distance between each feature and every other feature
% 'labels' is an N-length vector that that corresponds to each row and column of 'dismat'
function [prec,recall] = calcPrecisionRecall(dismat, labels)
 
if size(labels, 1) ~= 1
    labels = labels';
end
 
numClasses = length(unique(labels));
 
[sortedDistMat, idx] = sort(dismat);   % every column is sorted
recalledClasses = labels(idx);
 
recalledMatches = bsxfun(@eq, recalledClasses(2:end, :), labels);
 
classMatches = zeros(size(recalledMatches, 1), numClasses);
instancesPerClass = zeros(1, numClasses);
for ii=1:numClasses
    classMatches(:, ii) = sum(recalledMatches(:, labels == ii), 2);
    instancesPerClass(ii) = sum(labels == ii);
end
 
% we'll just increase the rank to get the points
prec = zeros(size(classMatches));
recall = zeros(size(classMatches));
sumClassMatches = cumsum(classMatches);
rank = 1:size(classMatches, 1)
for ci =1:numClasses
    prec(rank, ci) = sumClassMatches(rank, ci) ./ (rank' * instancesPerClass(ci));
    recall(rank, ci) = sumClassMatches(rank, ci) / ((instancesPerClass(ci) - 1) * instancesPerClass(ci));
end
 
% average all precision and all recall values (datapoints will therefore be avg prec--avg recall for a certain rank)
avgPrec = mean(prec, 2);
avgRecall = mean(recall, 2);