Software

spdal

Single-pass, discard-after-learn hyperellipsoid classifiers for online learning

PyPI GitHub

spdal implements a family of classifiers that see each training sample once and then discard it, so the full dataset is never stored. Every classifier follows scikit-learn’s partial_fit / predict interface and can be dropped into an existing pipeline.

pip install spdal
from sklearn.datasets import make_classification
from spdal import TRACED
import numpy as np

X, y = make_classification(n_samples=500, random_state=42)
classes = np.unique(y)

clf = TRACED()
for i in range(0, 400, 50):          # stream the data in chunks
    clf.partial_fit(X[i:i+50], y[i:i+50], classes=classes)

print(clf.predict(X[400:]))

Included classifiers

Class Method Year
VEBF Versatile Elliptic Basis Function 2010
SCIL Streaming Chunk Incremental Learning 2019
LRHE Learning with Recoil in Hyperellipsoidal Structure 2020
SHEF Scalable Hyper-Ellipsoidal Function 2020
D4 Diversion of Data Distribution Direction (ESWA 2025) 2025
TRACED Trend-Adaptive Classification with Ellipsoidal Disambiguation (Information Sciences 2026) 2026

D4 and TRACED are reference implementations of my published methods. The other classifiers are baselines from the literature, implemented under the same interface so they can be compared directly.

molprim

Primitive structure extraction and graph kernels for molecular graph classification

PyPI GitHub Demo

molprim is the implementation of the JCSSE 2020 paper on classifying biochemical compounds by their primitive structures. It rewrites each molecular graph as a smaller graph whose vertices are rings, branching points and bonds, and then compares molecules with graph kernels (Weisfeiler–Lehman subtree, Weisfeiler–Lehman shortest-path, or shortest-path). Every step is a scikit-learn transformer, so it fits into Pipeline and GridSearchCV, and it needs neither graph-tool nor grakel.

pip install molprim
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
from sklearn.svm import SVC
from molprim import GraphKernelTransformer, PrimitiveStructureExtractor, fetch_tudataset

graphs, y = fetch_tudataset("MUTAG")
model = make_pipeline(
    PrimitiveStructureExtractor(),
    GraphKernelTransformer(kernel="wl_sp", n_iter=2),
    SVC(kernel="precomputed"),
)
print(cross_val_score(model, graphs, y, cv=5).mean())