Note
Go to the end to download the full example code.
Logistic regression
This example illustrates the use of the skwdro.linear_models.LogisticRegression class and the influence of the radius.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs, make_moons
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
from skwdro.linear_models import LogisticRegression
from utils.classifier_comparison import plot_classifier_comparison
Setup
n = 200 # Total number of samples
n_train = n // 2 # Number of training samples
n_test = n - n_train # Number of test samples
datasets = []
# Moons dataset
dataset = make_moons(n_samples=n, noise=0.1)
Xtrain, Xtest, ytrain, ytest = train_test_split(*dataset, train_size=n_train, test_size=n_test)
train_dataset, test_dataset = (Xtrain, ytrain), (Xtest, ytest)
datasets.append((train_dataset, test_dataset))
# Fix centers for blobs dataset
_, _, centers = make_blobs(centers=2, return_centers=True) # type: ignore
# Blobs dataset with std=2
dataset = make_blobs(n_samples=n, centers=centers, cluster_std=2)
Xtrain, Xtest, ytrain, ytest = train_test_split(*dataset, train_size=n_train, test_size=n_test)
train_dataset, test_dataset = (Xtrain, ytrain), (Xtest, ytest)
datasets.append((train_dataset, test_dataset))
# Blobs dataset with std=4
dataset = make_blobs(n_samples=n, centers=centers, cluster_std=4)
Xtrain, Xtest, ytrain, ytest = train_test_split(*dataset, train_size=n_train, test_size=n_test)
train_dataset, test_dataset = (Xtrain, ytrain), (Xtest, ytest)
datasets.append((train_dataset, test_dataset))
WDRO classifiers
rhos = [10**i for i in range(-3, 0)]
classifiers = []
for rho in rhos:
classifiers.append(LogisticRegression(rho=rho))
Make plot

Dataset 0, Classifier $\rho=0.001$: Test Acc. 85%, F1 83%
Dataset 0, Classifier $\rho=0.01$: Test Acc. 85%, F1 83%
Dataset 0, Classifier $\rho=0.1$: Test Acc. 85%, F1 83%
Dataset 1, Classifier $\rho=0.001$: Test Acc. 93%, F1 93%
Dataset 1, Classifier $\rho=0.01$: Test Acc. 93%, F1 93%
Dataset 1, Classifier $\rho=0.1$: Test Acc. 93%, F1 93%
Dataset 2, Classifier $\rho=0.001$: Test Acc. 77%, F1 78%
Dataset 2, Classifier $\rho=0.01$: Test Acc. 77%, F1 78%
Dataset 2, Classifier $\rho=0.1$: Test Acc. 77%, F1 78%
Total running time of the script: (1 minutes 37.088 seconds)