Regresión Lineal
La regresión lineal es un modelo estadístico que se utiliza para predecir el valor de una variable continua (dependiente) basado en una o varias variables independientes. Es uno de los modelos mas simples, pero a su vez, poderoso para entender y predecir modelos lineales.
En librerias como scikit-learn, la regresión lineal se implementa en la clase LinearRegression.
import numpy as numpyfrom sklearn.linear_model import LinearRegression X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]]) # y = 1 * x_0 + 2 * x_1 + 3 y = np.dot(X, np.array([1, 2])) + 3reg = LinearRegression().fit(X, y)reg.score(X, y) # 1.0reg.coef_ # [1.0, 2.0]reg.intercept_ # 3.0reg.predict(np.array([[3, 5]])) # ([16.0])Minerva también implementa la regresión lineal en la clase LinearRegression
import com.minerva.core.primitives.Matrix;import com.minerva.core.primitives.Vector;import com.minerva.models.regression.impl.LinearRegression; public class Main { public static void main(String[] args) { Matrix X = new Matrix(new double[][] { { 1.0, 1.0 }, { 1.0, 2.0 }, { 2.0, 2.0 }, { 2.0, 3.0 } }); Vector y = new Vector(new double[] { 6.0, 8.0, 9.0, 11.0 }); LinearRegression model = new LinearRegression(); model.fit(X, y); System.out.println("=== Parámetros Aprendidos ==="); System.out.println("Intercept: " + model.getIntercept()); System.out.println("Coeficientes: " + model.getCoefficients()); Matrix XNueva = new Matrix(new double[][] { { 3.0, 5.0 } }); Vector prediccion = model.predict(XNueva); System.out.println("\n=== Predicción ==="); System.out.println("Entrada: x₀=3, x₁=5"); System.out.println("Predicción: " + prediccion); System.out.println("Valor esperado: 16.0"); }}=== Parámetros Aprendidos ===Intercept: 3.0Coeficientes: [1.0, 2.0]=== Predicción ===Entrada: x₀=3, x₁=5Predicción: [16.0]Valor esperado: 16.0
API Reference
Constructor
LinearRegression model = new LinearRegression();Métodos
fit(Matrix X, Vector y)
Entrena el modelo usando los datos proporcionados.
model.fit(X, y);| Parámetro | Tipo | Descripción |
|---|---|---|
X | Matrix | Matriz de diseño (n_samples × n_features) |
y | Vector | Valores objetivo (n_samples) |
predict(Matrix X)
Genera predicciones para nuevas muestras.
Vector predictions = model.predict(XNew);| Parámetro | Tipo | Descripción |
|---|---|---|
X | Matrix | Nuevas muestras (n_samples × n_features) |
Retorna: Vector con las predicciones
getIntercept()
Retorna el término independiente ().
double intercept = model.getIntercept(); // ej: 3.0getCoefficients()
Retorna los coeficientes para cada feature.
Vector coefs = model.getCoefficients(); // ej: [1.0, 2.0]getWeights()
Retorna todos los pesos combinados [intercept, coef₁, coef₂, ...].
Vector weights = model.getWeights(); // ej: [3.0, 1.0, 2.0]Manejo de Errores
| Excepción | Cuándo | Causa |
|---|---|---|
IllegalArgumentException | fit() | X.rows() != y.size() |
ArithmeticException | fit() | Columnas colineales |
IllegalStateException | predict() | Modelo no entrenado |
Casos de Uso
Regresión Simple (1 variable)
Matrix X = new Matrix(new double[][] { {1.0}, {2.0}, {3.0}, {4.0}});Vector y = new Vector(new double[] {2.0, 4.0, 6.0, 8.0}); LinearRegression model = new LinearRegression();model.fit(X, y); System.out.println("Slope: " + model.getCoefficients()); // [2.0]System.out.println("Intercept: " + model.getIntercept()); // 0.0Múltiples Predicciones
Matrix XTest = new Matrix(new double[][] { {5.0, 6.0}, {7.0, 8.0}, {9.0, 10.0}}); Vector predictions = model.predict(XTest);Integración con RegressionMetrics
Minerva proporciona métricas de regresión para evaluar el modelo:
- MAE — Mean Absolute Error
- MSE — Mean Squared Error
- RMSE — Root Mean Squared Error
- R² — Coeficiente de determinación
- R² Ajustado — R² penalizado por número de features
import com.minerva.metrics.RegressionMetrics.RegressionMetrics; LinearRegression model = new LinearRegression();model.fit(X, y);Vector yPred = model.predict(X); RegressionMetrics metrics = new RegressionMetrics();double mae = metrics.MAE(y, yPred);double mse = metrics.MSE(y, yPred);double rmse = metrics.RMSE(y, yPred);double r2 = metrics.R2(y, yPred);double r2adj = metrics.R2adj(y, yPred, X.cols());