function [probExclusive] = calcEmpiricalProbExclusive(class, exclusive,distribA, distribB, ... sameDistrib, inputsDistribA, inputsDistriB) % Calculates the empirical probability of AintersectB % Inputs % 0. class: 'AnotB' or 'BnotA' - indicates whether the vector is AnotB or BnotA % 1. vector representing AnotB or BnotA % 2. distribA: A's distribution. % 3. distribB: B's distribution % 4. sameDistrib: 1 if A and B are in the same class, 0 if in different % classes. % 5. inputsDistribA: input parameters to A's distribution % 6. inputsDistribB: input parameters to B's distribution dim = length(exclusive); total = 2 .^ dim +2; % disp('exclusive'); % disp(exclusive); switch(distribA) case 'mean' mean1 = inputsDistrib(1,:); mean2 = inputsDistrib(2,:); p1 = inputsDistrib(3,:); p2 = inputsDistrib(4,:); for i=1:dim if(mean1(i) == 1) pA(i) = 1-p1(i); else pA(i) = p1(i); end end if(sameDistrib == 1) pB = pA; else for i=1:dim if(mean2(i) == 1) pB(i) = 1-p2(i); else pB(i) = p2(i); end end end probExclusive = 1; for i=1:dim if(class == 'A') p=pA(i) .* (1-pB(i)); else p=pB(i) .* (1-pA(i)); end if(exclusive(i) == 1) probExclusive = probExclusive .* p; else probExclusive = probExclusive .* (1-p); end end case 'mutEx' dim = inputsDistrib(1); p = inputsDistrib(2); for i= 1:dim % if rand number > 0.5, classOne = p, classTwo = 0 % otherwise classOne = 0, classTwo = p tmp = rand(); if(tmp >= 0.5) classOne(i) = p; classTwo(i) = 0; else classOne(i) = 0; classTwo(i) = p; end end pA = classOne; if(sameDistrib == 1) pB = pA; else pB = classTwo; end probExclusive = 1; for i=1:dim if(class == 'A') p=pA(i) .* (1-pB(i)); else p=pB(i) .* (1-pA(i)); end if(exclusive(i) == 1) probExclusive = probExclusive .* p; else probExclusive = probExclusive .* (1-p); end end case 'exp' dim = inputsDistrib(1); gamma = inputsDistrib(2); lambda = inputsDistrib(3); for i= 1:dim classOne(i) = gamma * exp(-lambda * i); classTwo(dim-i+1) = classOne(i); end pA = classOne; if(sameDistrib == 1) pB =pA; else pB = classTwo; end % disp('pA'); % disp(pA); % disp('pB'); % disp(pB); probExclusive = 1; for i=1:dim if(class == 'A') p=pA(i) .* (1-pB(i)); else p=pB(i) .* (1-pA(i)); end if(exclusive(i) == 1) probExclusive = probExclusive .* p; else probExclusive = probExclusive .* (1-p); end end case 'zipf' dim = inputsDistrib(1); s = inputsDistrib(2); classOne = zeros(1, dim); har = 0; for n= 1:dim har = har + 1/(n.^s); end for i= 1:dim classOne(i) = (1/(i.^s)) ./har; classTwo(dim-i+1) = classOne(i); end pA = classOne; if(sameDistrib == 1) pB =pA; else pB = classTwo; end probExclusive = 1; for i=1:dim if(class == 'A') p=pA(i) .* (1-pB(i)); else p=pB(i) .* (1-pA(i)); end if(exclusive(i) == 1) probExclusive = probExclusive .* p; else probExclusive = probExclusive .* (1-p); end end end