Skip to content

Commit c2cf0ff

Browse files
committed
add: multilabel strategies from Esuli-Sebastiani paper added
1 parent c6f8d7b commit c2cf0ff

File tree

2 files changed

+46
-2
lines changed

2 files changed

+46
-2
lines changed

examples/multilabel_svm.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import matplotlib.pyplot as plt
33

44
from modAL.models import ActiveLearner
5-
from modAL.multilabel import SVM_binary_minimum
5+
from modAL.multilabel import *
66

77
from sklearn.multiclass import OneVsRestClassifier
88
from sklearn.svm import SVC
@@ -28,7 +28,7 @@
2828

2929
learner = ActiveLearner(
3030
estimator=OneVsRestClassifier(SVC(probability=True)),
31-
query_strategy=SVM_binary_minimum,
31+
query_strategy=mean_score,
3232
X_training=X_initial, y_training=y_initial
3333
)
3434

modAL/multilabel.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,3 +117,47 @@ def mean_max_loss(classifier: BaseEstimator,
117117

118118
query_idx = multi_argmax(loss, n_instances)
119119
return query_idx, X_pool[query_idx]
120+
121+
122+
def max_uncertainty(classifier: BaseEstimator,
123+
X_pool: modALinput,
124+
n_instances: int = 1) -> Tuple[np.ndarray, modALinput]:
125+
classwise_uncertainty = classifier.predict_proba(X_pool)
126+
classwise_max = np.max(classwise_uncertainty, axis=1)
127+
query_idx = multi_argmax(classwise_max, n_instances)
128+
129+
return query_idx, X_pool[query_idx]
130+
131+
132+
def mean_uncertainty(classifier: BaseEstimator,
133+
X_pool: modALinput,
134+
n_instances: int = 1) -> Tuple[np.ndarray, modALinput]:
135+
classwise_uncertainty = classifier.predict_proba(X_pool)
136+
classwise_mean = np.mean(classwise_uncertainty, axis=1)
137+
query_idx = multi_argmax(classwise_mean, n_instances)
138+
139+
return query_idx, X_pool[query_idx]
140+
141+
142+
def max_score(classifier: BaseEstimator,
143+
X_pool: modALinput,
144+
n_instances: int = 1) -> Tuple[np.ndarray, modALinput]:
145+
classwise_uncertainty = classifier.predict_proba(X_pool)
146+
classwise_predictions = classifier.predict(X_pool)
147+
classwise_scores = classwise_uncertainty*(classwise_predictions - 1/2)
148+
classwise_max = np.max(classwise_scores, axis=1)
149+
query_idx = multi_argmax(classwise_max, n_instances)
150+
151+
return query_idx, X_pool[query_idx]
152+
153+
154+
def mean_score(classifier: BaseEstimator,
155+
X_pool: modALinput,
156+
n_instances: int = 1) -> Tuple[np.ndarray, modALinput]:
157+
classwise_uncertainty = classifier.predict_proba(X_pool)
158+
classwise_predictions = classifier.predict(X_pool)
159+
classwise_scores = classwise_uncertainty*(classwise_predictions-1/2)
160+
classwise_mean = np.mean(classwise_scores, axis=1)
161+
query_idx = multi_argmax(classwise_mean, n_instances)
162+
163+
return query_idx, X_pool[query_idx]

0 commit comments

Comments
 (0)