diff core/magnatagatune/ranking_from_comparison_trivial.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/ranking_from_comparison_trivial.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,90 @@
+function [r, valididx, clip_ids] = ranking_from_comparison_trivial(comparison, comparison_ids)
+% returns a ranking for each of the compared songs 
+%
+% r(idx,1) =  all indexes which are similar to clip idx
+% r(idx,2) = all indexes which are dissimilar to clip idx
+%
+% if onlyvalid is set to true, only the transitive hull of 
+% clips having sim and dissim values will be output
+
+% ---
+% in comparison, the outlying piece is highlighted. 
+% thus, we naively consider that
+% a. both of the remaining pieces are more similar to each other.
+% b. the outlier is dissimilar to both of the other pieces
+% ---
+
+[outsort, outidx] = sort(comparison(:,4:6),2,'ascend');
+
+r = cell(numel(comparison_ids), 2);
+s = zeros(numel(comparison_ids), 2); % score for rankings
+for i = 1:size(comparison, 1)
+
+    % get the three relevant comparison ids
+
+    pos = comparison(i, outidx(i,1:3));
+    vals = outsort(i,:);
+    
+    % ---
+    % each of the three clips will be evaluated based on its position
+    % the last clip is the potential outlyier
+    % ---
+    
+    % ---
+    % usual case: two small values and a last outlie
+    % ---
+    if vals(2) ~= vals(3)
+        
+        
+        % ---
+        % first (most common) clip:
+        % the second clip is more similar than the third one
+        % ---
+        r{pos(1),1} = cat(1, r{pos(1),1}, pos(2));  % similar
+        r{pos(1),2} = cat(1, r{pos(1),2}, pos(3));  % dissimilar
+%     else
+%         
+%         % ok, both seem more dissimilar to clip 1
+%         r{pos(1),2} = cat(1, r{pos(1),1}, pos(2));  % both dissimilar
+%         r{pos(1),2} = cat (1, r{pos(1),2}, pos(3));  % dissimilar
+    end
+    
+    if vals(3) ~= vals(1)
+        % ---
+        % the second clip is more similar to the first than 
+        % the third
+        % ---
+        r{pos(2),1} = cat(1, r{pos(2),1}, pos(1));
+        r{pos(2),2} = cat(1, r{pos(2),2}, pos(3));
+    
+        % ---
+        % the third clip is not similar to any of the former 
+        % NOTE: we avoid this information as it possibly leads 
+        % to some contradictionary statements
+        % ---
+            r{pos(3),2} = cat(1, r{pos(3),2}, pos(1));
+            r{pos(3),2} = cat(1, r{pos(3),2}, pos(2));
+    end
+    
+
+end
+
+% ---
+% we cleanup r and 
+% run basic checks on emptiness and paradox assumptions
+% ---
+valididx = zeros(size(r,1), 1);
+for i = 1:size(r, 1)
+    
+    % make unique
+    r{i,1} = unique(r{i,1});
+    r{i,2} = unique(r{i,2});
+    
+    % check
+    valididx(i) = ~isempty(r{i,1}) && ~isempty(r{i,2}) && ...
+        isempty(intersect(r{i,1}, r{i,2}));
+end
+
+valididx = logical(valididx);
+clip_ids = 1:numel(comparison_ids);
+