Quick Start¶
To demonstrate some of the features of the spines package we’ll begin by constructing a simple OLS regression model.
Creating a Model¶
First we’ll import the libraries we’ll need, in our case here just numpy and spines:
[1]:
import numpy as np
from spines import Model, Parameter
Now we’ll construct the OLS Regression model class:
[2]:
class OLSRegression(Model):
"""
OLS Regression model
"""
betas = Parameter(np.ndarray)
intercept = Parameter(bool, default=False)
def fit(self, X, y):
"""Fits the model"""
if self.intercept:
X = np.hstack((X, np.full((X.shape[0], 1), 1.0)))
self.betas = np.matmul(np.matmul(np.linalg.inv(np.matmul(X.T, X)), X.T), y)
def predict(self, X):
return np.matmul(X, self.betas)
def error(self, X, y):
y_hat = self.predict(X)
return np.mean((y-y_hat)**2.0)
Let’s generate some random, slightly noisy data to fit the model with:
[3]:
X = np.random.rand(100, 3)
y = (X * np.array([1.0, 0.5, 2.0])).sum(axis=1)
X += np.random.normal(scale=0.01, size=X.shape)
y += np.random.normal(scale=0.05, size=y.shape)
Now we can create our model instance and fit it:
[4]:
ols_model = OLSRegression()
ols_model.fit(X, y)
The results:
[5]:
ols_model.parameters
[5]:
<ParameterStore final=True> {
<Parameter betas [type=ndarray] (required)>: [0.99080627 0.51589418 2.00767143],
<Parameter intercept [type=bool]>: False,
}
[6]:
ols_model.error(X, y)
[6]:
0.002558902684175054