12345678910111213141516171819202122232425262728293031323334353637383940 |
- function [attAffinity] = CalcAttributesAffinity_S2(data, attData, last_known_node, addMissingAtt, threshold)
- n = size(attData,1);
- numAtt = size(attData,2);
-
- if addMissingAtt> 0 && last_known_node < n
- attData = AddMissingNodesAttrFromNeighborsNeighbors(data, attData, last_known_node, addMissingAtt);
- end
-
- count = sum(attData,2);
- nnz_n = nnz(count);
- % fprintf('calculating attribtes affinity matrix - common start\n');
- common = attData*attData';
- [r,c,v] = find(common);
- clear('common');
- x=size(r,1);
- perc_x = x/(n*n);
- LogMsg(sprintf('attAffinity common (%d, %.3f) - nnz=%d, %7.5f%%, max %d, min %d, mean %7.5f',numAtt,threshold,x,100*perc_x,max(v),min(v),mean(v)));
- LogMsg(sprintf('attAffinity count (%d, %.3f) - nnz=%d, %7.5f%%, max %d, min %d, mean %7.5f',numAtt,threshold,nnz_n, 100*nnz_n/n, max(count),min(count),mean(count)));
- % Sigal 22.3.13 - TODO use sparse if x < 40%
- if perc_x<0.4
- attAffinity = sparse(n,n);
- else
- attAffinity = zero(n,n);
- LogMsg(sprintf('*** attAffinity - using full matrix'));
- end
- for i=1:x
- total = count(r(i))+count(c(i))-v(i);
- if total > 0
- val = v(i)/total;
- if val > threshold
- attAffinity(r(i),c(i)) = val;
- % else
- % filter = filteer+1;
- end
- end
- end
- nnz_n = nnz(attAffinity);
- LogMsg(sprintf('attAffinity total (%d, %.3f) - nnz=%d, %7.5f%%',numAtt,threshold,nnz_n,100*nnz_n/(n*n)));
-
- end %function
|