One-vs-One (OvO) multiclass strategy.
This strategy consists in fitting one binary classifier for each pair of classes. Because we are in a streaming context, the number of classes isn't known from the start, hence new classifiers are instantiated on the fly.
The number of classifiers is
k * (k - 1) / 2, where
k is the number of classes. However, each call to
learn_one only requires training
k - 1 models. Indeed, only the models that pertain to the given label have to be trained. Meanwhile, making a prediction requires going through each and every model.
A binary classifier, although a multi-class classifier will work too.
A mapping between pairs of classes and classifiers. The keys are tuples which contain a pair of classes. Each pair is sorted in lexicographical order.
from river import datasets from river import evaluate from river import linear_model from river import metrics from river import multiclass from river import preprocessing dataset = datasets.ImageSegments() scaler = preprocessing.StandardScaler() ovo = multiclass.OneVsOneClassifier(linear_model.LogisticRegression()) model = scaler | ovo metric = metrics.MacroF1() evaluate.progressive_val_score(dataset, model, metric)
Update the model with a set of features
x and a label
Predict the label of a set of features
The predicted label.
Predict the probability of each label for a dictionary of features
- x — 'dict'
dict[base.typing.ClfTarget, float]: A dictionary that associates a probability which each label.