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

names = [f"$\\rho={rho}$" for rho in rhos]
plot_classifier_comparison(names, classifiers, datasets)
Training data, Testing data, $\rho=0.001$, $\rho=0.01$, $\rho=0.1$
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)

Gallery generated by Sphinx-Gallery