Skip to content

Commit

Permalink
Fix math domain err in clustering entropy
Browse files Browse the repository at this point in the history
  • Loading branch information
marinkaz committed Aug 9, 2019
1 parent 1875397 commit dd4d9a9
Showing 1 changed file with 9 additions and 7 deletions.
16 changes: 9 additions & 7 deletions nimfa/models/nmf.py
Original file line number Diff line number Diff line change
Expand Up @@ -249,10 +249,13 @@ def entropy(self, membership=None, idx=None):
mbs = np.array(self.predict(what="samples", prob=False, idx=idx)).squeeze()
dmbs, dmembership = {}, {}
[dmbs.setdefault(mbs[i], set()).add(i) for i in range(len(mbs))]
[dmembership.setdefault(membership[i], set()).add(i)
for i in range(len(membership))]
return -1. / (n * log(len(dmembership), 2)) * sum(sum(len(dmbs[k].intersection(dmembership[j])) *
log(len(dmbs[k].intersection(dmembership[j])) / float(len(dmbs[k])), 2) for j in dmembership) for k in dmbs)
[dmembership.setdefault(membership[i], set()).add(i) for i in range(len(membership))]
entropy = 0.
for k in dmbs:
for j in dmembership:
entropy += len(dmbs[k].intersection(dmembership[j])) * np.log2(len(dmbs[k].intersection(dmembership[j])) / float(len(dmbs[k])))
entropy *= -1. / (n * np.log2(len(dmembership)))
return entropy

def predict(self, what='samples', prob=False, idx=None):
"""
Expand Down Expand Up @@ -386,9 +389,8 @@ def purity(self, membership=None, idx=None):
mbs = np.array(self.predict(what="samples", prob=False, idx=idx)).squeeze()
dmbs, dmembership = {}, {}
[dmbs.setdefault(mbs[i], set()).add(i) for i in range(len(mbs))]
[dmembership.setdefault(membership[i], set()).add(i)
for i in range(len(membership))]
return 1. / n * sum(max(len(dmbs[k].intersection(dmembership[j])) for j in dmembership) for k in dmbs)
[dmembership.setdefault(membership[i], set()).add(i) for i in range(len(membership))]
return 1. / n * sum(np.max([len(dmbs[k].intersection(dmembership[j])) for j in dmembership]) for k in dmbs)

def rss(self, idx=None):
"""
Expand Down

0 comments on commit dd4d9a9

Please sign in to comment.