Skip to content

Predictive Models

Linear CPM

LinearCPM

A PyTorch implementation of CPM optimized for speed.

Supports both regression and binary classification tasks. For classification, uses logistic regression (linear model + sigmoid).

Optimizations: 1. Vectorized Over Permutations: Fits all N_perms models in parallel. 2. Fast Cholesky Solver: Uses Normal Equations (XtX^-1 Xty) instead of SVD/QR. 3. Shared Covariate Logic: Handles fixed covariates efficiently.

Input Shapes: - X: [N_samples, N_features] - y: [N_samples, N_perms]

__init__(edges, device='cpu', task_type=TaskType.regression)

Args: edges: Boolean masks tensor with shape [N_features, 2, N_runs]. Dimension 1 corresponds to [Positive, Negative]. device: 'cpu' or 'cuda' task_type: TaskType.regression or TaskType.classification

fit(X, y, covariates)

Fits all CPM variations (Connectome, Covariates, Residuals, Full) for all permutations. Args: X: [N_samples, N_features] y: [N_samples, N_perms] covariates: [N_samples, N_cov]

get_network_strengths(X, covariates)

Calculates network strengths for ALL permutations simultaneously.

predict(X, covariates, return_proba=False)

Predicts y for all permutations.

Args: X: Features [N_samples, N_features] covariates: Covariates [N_samples, N_cov] return_proba: If True and task is classification, returns probabilities. If False and task is classification, returns class predictions (0/1). Ignored for regression.

Returns: Tensor with shape [N_samples, N_models, N_networks, N_runs]. - For regression: continuous predictions - For classification with return_proba=True: probabilities [0, 1] - For classification with return_proba=False: class labels {0, 1}

predict_class(X, covariates)

Predict class labels (0/1) for classification tasks.

Args: X: Features [N_samples, N_features] covariates: Covariates [N_samples, N_cov]

Returns: Tensor with shape [N_samples, N_models, N_networks, N_runs] containing class labels {0, 1}.

Note: Only applicable for classification tasks. For regression, returns same as predict().

predict_proba(X, covariates)

Predict class probabilities for classification tasks.

Args: X: Features [N_samples, N_features] covariates: Covariates [N_samples, N_cov]

Returns: Tensor with shape [N_samples, N_models, N_networks, N_runs] containing probabilities.

Note: Only applicable for classification tasks. For regression, returns same as predict().

Nonlinear CPM models

BaseCPM

Bases: ABC

Base class for non-linear CPM models.

Matches the tensor-based pipeline interface of LinearCPM but delegates the connectome and full model fitting to subclass-defined estimators (sklearn, pygam, etc.). Covariates and residuals models always use ordinary least-squares (LinearRegression).

Constructor

edges : tensor [N_features, 2, N_runs] device : str ('cpu' or 'cuda') — used only for output tensors task_type : TaskType — stored but not currently used (subclasses are regression-only; classification uses LinearCPM's IRLS)

fit(X, y, covariates)

Fit all CPM model variants for every permutation run.

Parameters:

Name Type Description Default
X array - like[N_samples, N_features]
required
y array - like[N_samples, N_runs]
required
covariates array - like[N_samples, N_cov]
required

fit_model(X, y) abstractmethod

Return a fitted estimator for (X, y). X and y are numpy.

get_network_strengths(X, covariates)

Calculate network strengths for all runs.

Returns:

Type Description
dict with "connectome" and "residuals" sub-dicts, each mapping
"positive"/"negative" to tensors [N_samples, N_runs].

predict(X, covariates, return_proba=False)

Predict for all runs.

Returns:

Type Description
Tensor[N_samples, N_models, N_networks, N_runs]

predict_model(estimator, X)

Predict with a fitted estimator. Override for non-sklearn APIs.