torch_linear_regression
A very simple library containing closed-form linear regression models using PyTorch. Accepts both NumPy arrays and PyTorch tensors, follows the scikit-learn estimator interface (fit/predict/score), and can run on GPU.
Models
- OLS -- Ordinary Least Squares:
(X'X)^-1 X'Y - Ridge -- Ridge regression with a fixed scalar penalty:
(X'X + lambda*I)^-1 X'Y - ReducedRankRidgeRegression -- Ridge regression followed by SVD truncation of the weight matrix
- RidgeMML -- Ridge regression with automatic per-column lambda estimation (Karabatsos 2017).
The closed-form approach results in fast and accurate results under most
conditions. However, when n_features is large and/or very underdetermined
(n_samples << n_features), the closed-form solution will start to
diverge from other solutions. Also, if the input X matrix is singular (has
redundant columns), an error will be thrown. If you encounter these issues,
consider using SVD / PCA to reduce the redundancy in your input matrix.
OLS, Ridge, and ReducedRankRidgeRegression include a model.prefit() method
that precomputes the inverse matrix. This is useful when fitting the same X
to multiple targets.
Installation
Install stable version:
pip install torch_linear_regression
Install development version:
pip install git+https://github.com/RichieHakim/torch_linear_regression.git
Usage
OLS / Ridge
See the demo notebook for more examples.
import torch_linear_regression as tlr
import numpy as np
from sklearn.datasets import make_regression
X, Y = make_regression(n_samples=100, n_features=10, noise=5, random_state=42)
model = tlr.OLS()
model.fit(X=X, y=Y)
Y_pred = model.predict(X)
print(f"R^2: {model.score(X=X, y=Y):.4f}")
RidgeMML
Ridge regression where each column of Y gets its own regularization parameter, estimated automatically via marginal maximum likelihood.
X columns are z-scored internally (required by the algorithm for lambda
comparability across features). Coefficients are un-z-scored before
storage, so predict(X_raw) works on raw data.
import torch_linear_regression as tlr
import numpy as np
## Multi-target regression
X = np.random.randn(500, 20)
beta_true = np.random.randn(20, 5)
Y = X @ beta_true + 0.5 * np.random.randn(500, 5)
model = tlr.RidgeMML()
model.fit(X, Y)
print(f"R^2: {model.score(X, Y):.4f}")
print(f"Lambdas: {model.lambdas_}") ## per-column regularization
print(f"Converged: {~model.convergence_failures_.any()}")
## Pre-supplied lambdas (skip MML optimization)
model_fixed = tlr.RidgeMML(lambdas=np.ones(5) * 10.0)
model_fixed.fit(X, Y)
## GPU acceleration
model_gpu = tlr.RidgeMML(device="cuda")
model_gpu.fit(X, Y)
## Control memory for large p_y
model_batched = tlr.RidgeMML(batch_size_solve=50)
model_batched.fit(X, Y)
Key differences from Ridge:
Ridge |
RidgeMML |
|
|---|---|---|
| Lambda | Single scalar, user-specified | Per-column of Y, estimated via MML |
| X standardization | None | Intrinsic z-scoring (ddof=1) |
| Intercept | Optional | Always (derived from column means) |
| Dependencies | numpy, torch | numpy, torch |
Metadata
Release files for torch-linear-regression 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| torch_linear_regression-0.2.0.tar.gz | 21.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| torch_linear_regression-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 39.1 kB
Release files / torch_linear_regression-0.2.0.tar.gz
| Download URL | torch_linear_regression-0.2.0.tar.gz |
|---|---|
| Size | 21.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1682251f368b02dd352a62c76089194faa114e212a805ef068678e0b26a1af75
|
|
BLAKE2b-256 checksum How to use checksums |
a74e0ac2ff0d4e484ca10bb86ce6f416f4d68c0100f67772599d13b0573c1353
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 26, 2026.
Transparency logRelease files / torch_linear_regression-0.2.0-py3-none-any.whl
| Download URL | torch_linear_regression-0.2.0-py3-none-any.whl |
|---|---|
| Size | 17.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d857e0a7b608c1e48ab9b5dba61caed065c2b61d72e25a9e7180acac9b7aa8d7
|
|
BLAKE2b-256 checksum How to use checksums |
dbf81061ae24c5951590201cb14fd7116685c93b041403836cdbfae9f16c78df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 26, 2026.
Transparency log