ntucllab / libact

Pool-based active learning in Python
http://libact.readthedocs.org/
BSD 2-Clause "Simplified" License
776 stars 174 forks source link

Can't instantiate abstract class QueryStrategy with abstract methods make_query #142

Closed themooneer closed 6 years ago

themooneer commented 6 years ago

I'm testing your example code to explore this library and there is an error while instantiating the query strategy

# declare Dataset instance, X is the feature, y is the label (None if unlabeled)
dataset = Dataset(X, y)
query_strategy = QueryStrategy(dataset) # declare a QueryStrategy instance
labler = Labeler() # declare Labeler instance
model = Model() # declare model instance

for _ in range(quota): # loop through the number of queries
    query_id = query_strategy.make_query() # let the specified QueryStrategy suggest a data to query
    lbl = labeler.label(dataset.data[query_id][0]) # query the label of the example at query_id
    dataset.update(query_id, lbl) # update the dataset with newly-labeled example
    model.train(dataset) # train model with newly-updated Dataset

Error

Traceback (most recent call last): File "path_to_my_script/script.py", line 30, in QueryStrategy(dataset).make_query() # declare a QueryStrategy instance TypeError: Can't instantiate abstract class QueryStrategy with abstract methods make_query

Am using Python 2.7.13 on Debian Os

Thanks in advance!

yangarbiter commented 6 years ago

QueryStrategy is a abstract class. You should do something like:

from libact.query_strategies import UncertaintySampling
UncertaintySampling(dataset).make_query()
themooneer commented 6 years ago

I did it like you mentioned, but it misses a model !! :( line 32, in query_strategy = UncertaintySampling(dataset).make_query() # declare a QueryStrategy instance File "/usr/local/lib/python2.7/dist-packages/libact/query_strategies/uncertainty_sampling.py", line 75, in init "init() missing required keyword-only argument: 'model'" TypeError: init() missing required keyword-only argument: 'model'

yangarbiter commented 6 years ago

Sorry about that. Try this one.

from libact.models import LogisticRegression
from libact.query_strategies import UncertaintySampling
UncertaintySampling(dataset, model=LogisticRegression()).make_query()
themooneer commented 6 years ago

Is there any example of Dataset Instanciation please ? I think that the documentation is not so clear

yangarbiter commented 6 years ago

You can reference the examples here. https://github.com/ntucllab/libact/blob/master/examples/plot.py