Regression predicts a number, not a class. LinearRegression fits a hyperplane. Score with MAE (mean absolute error, same units as y) and R² (1 is a perfect fit, 0 is “always guess the mean”).
Goal
Fit a linear model on toy regression data and print MAE and R².
Linear regression
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score
X, y = make_regression(n_samples=200, n_features=3, noise=12, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=0
)
reg = LinearRegression()
reg.fit(X_train, y_train)
pred = reg.predict(X_test)
print("MAE", round(mean_absolute_error(y_test, pred), 2))
print("R2 ", round(r2_score(y_test, pred), 3))
print("coef", reg.coef_.round(2))Predicted vs true
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
X, y = make_regression(n_samples=200, n_features=1, noise=15, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=0
)
reg = LinearRegression()
reg.fit(X_train, y_train)
pred = reg.predict(X_test)
plt.scatter(X_test, y_test, alpha=0.7, label="true")
order = np.argsort(X_test[:, 0])
plt.plot(X_test[order, 0], pred[order], color="C1", label="pred")
plt.legend()
plt.title("Linear regression")
plt.show()From a table
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
df = pd.DataFrame(
{
"units": [12, 7, 9, 4, 11, 3, 10, 8],
"price": [10.5, 22.0, 10.5, 10.5, 22.0, 10.5, 22.0, 10.5],
}
)
df["revenue"] = df["units"] * df["price"]
X = df[["units", "price"]]
y = df["revenue"]
reg = LinearRegression()
reg.fit(X, y)
print("R2", round(r2_score(y, reg.predict(X)), 3))
print("coef", reg.coef_.round(3), "intercept", round(reg.intercept_, 3))Revenue is exactly units * price here, so R² is 1 and the intercept is ~0. Real sales have noise.
Pitfall
Do not use accuracy_score on regression. Accuracy is for labels. Use MAE, RMSE, or R².