def vote_entropy(committee: BaseCommittee, X: modALinput, **predict_proba_kwargs) -> np.ndarray: """ Calculates the vote entropy for the Committee. First it computes the predictions of X for each learner in the Committee, then calculates the probability distribution of the votes. The entropy of this distribution is the vote entropy of the Committee, which is returned. Args: committee: The :class:`modAL.models.BaseCommittee` instance for which the vote entropy is to be calculated. X: The data for which the vote entropy is to be calculated. **predict_proba_kwargs: Keyword arguments for the :meth:`predict_proba` of the Committee. Returns: Vote entropy of the Committee for the samples in X. """ n_learners = len(committee) try: votes = committee.vote(X, **predict_proba_kwargs) except NotFittedError: return np.zeros(shape=(X.shape[0], )) p_vote = np.zeros(shape=(X.shape[0], len(committee.classes_))) entr = np.zeros(shape=(X.shape[0], )) for vote_idx, vote in enumerate(votes): vote_counter = Counter(vote) for class_idx, class_label in enumerate(committee.classes_): p_vote[vote_idx, class_idx] = vote_counter[class_label] / n_learners entr[vote_idx] = entropy(p_vote[vote_idx]) return entr
def vote_entropy(committee: BaseCommittee, X: modALinput, **predict_proba_kwargs) -> np.ndarray: n_learners = len(committee) try: votes = committee.vote(X, **predict_proba_kwargs) except NotFittedError: return np.zeros(shape=(X.shape[0], )) p_vote = np.zeros(shape=(X.shape[0], len(committee.classes_))) entr = np.zeros(shape=(X.shape[0], )) for vote_idx, vote in enumerate(votes): vote_counter = Counter(vote) for class_idx, class_label in enumerate(committee.classes_): p_vote[vote_idx, class_idx] = vote_counter[class_label] / n_learners entr[vote_idx] = entropy(p_vote[vote_idx]) return entr