Mercurial > hg > camir-aes2014
diff core/magnatagatune/metric_fulfills_ranking.m @ 0:e9a9cd732c1e tip
first hg version after svn
author | wolffd |
---|---|
date | Tue, 10 Feb 2015 15:05:51 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/magnatagatune/metric_fulfills_ranking.m Tue Feb 10 15:05:51 2015 +0000 @@ -0,0 +1,90 @@ +function [out, equal, singles, valid] = metric_fulfills_ranking(met, Y, clips) +% out = sim_fulfills_ranking(met, Y, ids) +% +% outputs (0-1) percentage of ranking constraints +% completely fulfilled by the given distance measure + +% --- +% for each valid query, check if the ranking is fulfilled +% we also count eeventswhere the distance is equal +% --- +valid = ~(cellfun(@isempty, Y(:,1)) | cellfun(@isempty, Y(:,2))); + +equal = 0; +singles = false(size(Y,1),1); +for i = 1:size(Y,1) + + if valid(i) + + if numel(Y{i,1}) == 1 && numel(Y{i,2}) == 1 + % --- + % Efficient singular ranking comparison + % using met.distance(clipa,clipb) + % --- + % NOTE: by using the < here, we loose half of the + % examples which have been same distance and + % randomly positioned in earlier runs :( + % --- + distgood = met.distance(clips(i), clips(Y{i,1})); + distbad = met.distance(clips(i), clips(Y{i,2})); + + singles(i) = distgood < distbad; + if distgood == distbad + equal = equal + 1; + end + else + % --- + % NOTE: Only reactivated for testing of + % outdated similarity data + % --- + + warning 'code only for outdated similarity data\n'; + + % --- + % NOTE: this code is analogous to the above + % --- + singles(i) = 1; + for j=1:numel(Y{i,1}) + for k = 1:numel(Y{i,2}) + + % --- + % All the entries in Y(i,1) have to come before + % the ones in Y(i,2) + % --- + distgood = met.distance(clips(i), clips(Y{i,1}(j))); + distbad = met.distance(clips(i), clips(Y{i,2}(k))); + singles(i) = singles(i) && (distgood < distbad); + + % count equalities + if distgood == distbad + equal = equal + 1; + end + if ~singles(i) + break; + end + end + end + + + end + else + end +end + + +out(1) = mean(singles(valid)); +if size(Y,2) == 3 + % --- + % weighted sum of singles: count satisfied votes + % --- + weights = cell2mat( Y( valid, 3)); + out(2) = sum(weights(singles(valid))) / sum(weights); +else + out(2) = -1; +end +out = out'; + +% markup invalid rankings +% singles(~valid) = -1; + +