Ir al contenido principal

Fundamentos de la regresión lineal en Python

Descubre qué define un problema de regresión y cómo funciona un algoritmo de regresión lineal en Python.
Actualizado 17 sept 2026  · 15 min leer

Explorar con IA

ChatGPTClaudePerplexity

La ciencia de datos ha avanzado como pocas disciplinas. Integra multitud de áreas —Estadística, Álgebra lineal, Machine Learning, Bases de datos— y las combina de la forma más útil posible. Pero, en el fondo, ¿qué hace que este campo sea tan fascinante? - Sus potentes algoritmos estadísticos

Uno de los algoritmos estadísticos más básicos es la regresión lineal. Aunque es antiguo, nunca pasa de moda para alguien que está empezando en ciencia de datos. Entender el principio de funcionamiento de la regresión lineal es clave para comprender la evolución de toda una familia de algoritmos estadísticos llamada modelos lineales generalizados. Además, te ayudará a entender otros aspectos comunes de los algoritmos estadísticos y de machine learning como las funciones de coste, los coeficientes, la optimización, etc.

Como sugiere el título, en este tutorial verás la regresión lineal en detalle. Antes de meternos de lleno en la teoría, aclaremos el término regresión.

Entender un problema de regresión

La regresión pertenece a las tareas de aprendizaje supervisado, donde los conjuntos de datos usados para modelado predictivo/estadístico contienen etiquetas continuas. Pero definamos un problema de regresión de forma más matemática.

Considera la siguiente imagen: training set Fuente: apuntes de Andrew Ng

En la imagen, X es el conjunto de valores que corresponden a las superficies habitables de distintas casas (también llamado espacio de entrada) y y es el precio de esas casas, pero fíjate en que estos valores los predice h. h es la función que mapea los valores de X a y (a menudo, el predictor). Por tradición, a esta h se la denomina función de hipótesis. Ten presente que este dataset solo tiene una característica, es decir, la superficie habitable; considéralo un conjunto de juguete para entender los conceptos.

Observa que los valores predichos aquí son continuos. Tu objetivo, dado un conjunto de entrenamiento, es aprender una función $h : \mathcal{X} \rightarrow \mathcal{Y}$ tal que h(x) sea un buen predictor del valor correspondiente de y. Ten también en cuenta que el dominio de valores que aceptan X e Y son números reales y puedes definirlo como: $\mathcal{X} = \mathcal{Y} = \mathbb{IR}$, donde $\mathbb{IR}$ es el conjunto de los números reales.

Un par (x(i), y(i)) se llama ejemplo de entrenamiento. Puedes definir el conjunto de entrenamiento como {(x(i), y(i)) ; i = 1,...,m} (si el conjunto tiene m instancias y solo hay una característica x).

Un poco de matemáticas para que no haya dudas ni en lo básico. Según Han, Kamber y Pei:

"En general, estos métodos se usan para predecir el valor de una variable de respuesta (dependiente) a partir de una o más variables predictoras (independientes), donde las variables son numéricas." - Data Mining: Concepts and Techniques (3rd edn.)

Así de simple.

Al entender un problema típico de regresión, también has visto cómo definir su hipótesis. ¡Perfecto! Ahora vamos directos a la mecánica de la regresión lineal.

Regresión lineal: ¿cómo funciona?

Antes de entrar en detalles, no está de más recordar cuándo se descubrió. Tenemos que remontarnos al siglo XVIII. El gran Carl Friedrich Gauss propuso una de las formas más elementales de la regresión estadística, aunque hay debate al respecto. No entraremos en ello. Si te interesa la discusión entre Gauss y Adrien-Marie Legendre, échale un vistazo a este enlace.

La regresión lineal es quizá uno de los algoritmos más conocidos y comprendidos en estadística y machine learning. Nació en el ámbito de la estadística como modelo para entender la relación entre variables numéricas de entrada y salida, pero con el tiempo se ha convertido en parte esencial del arsenal moderno de machine learning.

Veamos un dataset de ejemplo. Usaremos el mismo conjunto de predicción de precios de casas, pero esta vez con dos características. La tarea es la misma: predecir el precio de la vivienda.

house price prediction dataset Fuente: apuntes de Andrew Ng

Como se mencionó, ahora las x son bidimensionales, es decir, tu dataset tiene dos características. Por ejemplo, x1(i) es la superficie habitable de la i-ésima casa del conjunto de entrenamiento, y x2(i) es su número de dormitorios.

Para hacer regresión, debes decidir cómo vas a representar h. Como elección inicial, aproxima y como una función lineal de x:

hθ(x) = θ0 + θ1x1 + θ2x2

Aquí, los θi son los parámetros (también llamados pesos) que parametrizan el espacio de funciones lineales que mapean de $\mathcal{X}$ a $\mathcal{Y}$. En pocas palabras, estos parámetros se usan para mapear correctamente $\mathcal{X}$ a $\mathcal{Y}$. Para simplificar, omitiremos el subíndice θ en hθ(x) y escribiremos simplemente h(x). Para simplificar aún más la notación, introducimos la convención x0 = 1 (el término de intercepto), de modo que

function

donde en el lado derecho consideramos θ y x como vectores, y n es el número de variables de entrada (sin contar x0).

La gran pregunta ahora es: ¿cómo eliges o aprendes los parámetros θ? No puedes cambiar tus variables de entrada para predecir los precios. Solo puedes ajustar estos parámetros θ.

Una forma natural es hacer que h(x) se acerque a y, al menos para los ejemplos de entrenamiento. Para formalizarlo, definamos una función que determine, para cada valor de θ, cuán cerca están los h(x(i)) de los y(i) correspondientes. La función tiene este aspecto:

function

Fuente: StackOverflow

¿Por qué usamos el término cuadrático en lugar del valor absoluto? Piensa en el término cuadrático como una ventaja para las operaciones posteriores al entrenar el modelo. Si quieres profundizar, aquí tienes más.

Acabas de ver una de las fórmulas más importantes en ciencia de datos/machine learning/estadística: la función de coste.

Esta derivación es esencial porque no solo da pie a la siguiente evolución de la regresión lineal (mínimos cuadrados ordinarios) sino que también sienta las bases de toda una clase de algoritmos lineales (recuerda los modelos lineales generalizados).

Es importante señalar que la regresión lineal suele dividirse en dos formas básicas:

  • Regresión lineal simple (SLR), con solo dos variables (la que viste al principio)
  • Regresión lineal múltiple (MLR), con más de dos variables (la que acabas de ver)

Son conceptos sencillos, pero pueden llevar a confusión.

Ya has asentado las bases de la regresión lineal. Ahora veremos formas de estimar los parámetros que viste arriba. Esta estimación es, en esencia, el entrenamiento de la regresión lineal. Existen varios métodos para entrenarla, siendo mínimos cuadrados ordinarios (OLS) el más popular. Por eso, es habitual llamar a un modelo de regresión lineal entrenado con OLS: regresión lineal por mínimos cuadrados.

Nota: en este contexto, a los parámetros también se les llama coeficientes del modelo.

Optimizar un modelo de regresión lineal: distintos enfoques

Aprender/entrenar un modelo de regresión lineal significa estimar los valores de los coeficientes/parámetros usados en su representación con los datos que tienes.

En esta sección, daremos un repaso a algunas técnicas para preparar un modelo de regresión lineal.

Regresión por mínimos cuadrados

Terminamos la sección anterior con la idea de elegir θ para minimizar J(θ). Para ello, usemos un algoritmo de búsqueda que parta de una "estimación inicial" de θ y cambie θ iterativamente para reducir J(θ) hasta converger a un valor que lo minimice. En concreto, consideremos el algoritmo de descenso por gradiente, que parte de un θ inicial y repite la actualización:

function Fuente: apuntes de Andrew Ng

(Esta actualización se realiza simultáneamente para j = 0, . . . , n.) Aquí, α es la tasa de aprendizaje. Es un algoritmo muy natural que da pasos en la dirección de mayor descenso de J. Este término α controla efectivamente lo pronunciado del paso hacia la disminución de J. Visualmente, se puede expresar así:

gradient descent Fuente: ml-cheatsheet

Intuitivamente, la fórmula anterior indica el pequeño cambio en J respecto al parámetro θj y cómo afecta al valor inicial de θj. Fíjate en que aparece una derivada parcial. Toda la derivación queda fuera del alcance de este tutorial.

Para un único ejemplo de entrenamiento, la regla de actualización es:

function Fuente: ml-cheatsheet

Esta regla se llama regla LMS (de “least mean squares”) y también se conoce como regla de aprendizaje de Widrow-Hoff.

Resumamos OLS:

"El procedimiento de mínimos cuadrados ordinarios busca minimizar la suma de los residuos al cuadrado. Dada una recta de regresión a través de los datos, calculamos la distancia de cada punto a la recta, la elevamos al cuadrado y sumamos todos los errores cuadrados. Esa es la cantidad que OLS intenta minimizar." - Jason Brownlee

Optimización con descenso por gradiente

En la regla de entrenamiento anterior ya visteis cómo incorporar el descenso por gradiente. En esencia, es un proceso para optimizar los coeficientes minimizando iterativamente el error del modelo en tus datos de entrenamiento.

Funciona empezando con valores aleatorios para cada coeficiente. Se calcula la suma de los errores al cuadrado para cada par entrada-salida. Se usa una tasa de aprendizaje como factor de escala y se actualizan los coeficientes en la dirección que minimiza el error. Se repite hasta alcanzar un mínimo de error cuadrático total o no haya más mejora.

El término α (tasa de aprendizaje) es crucial porque determina el tamaño del paso de mejora en cada iteración.

Hay dos variantes habituales del descenso por gradiente:

  • El método que evalúa todos los ejemplos del conjunto de entrenamiento en cada paso: descenso por gradiente por lotes (batch).
  • El método que recorre el conjunto y, cada vez que encuentra un ejemplo, actualiza los parámetros según el gradiente del error respecto a ese único ejemplo: descenso por gradiente estocástico (también incremental).

Hasta aquí el descenso por gradiente. Veamos ahora otra manera de optimizar un modelo de regresión lineal: la regularización.

Regularización

DataCamp ya tiene un buen artículo introductorio sobre regularización. Te puede venir bien leerlo antes de seguir.

En general, los métodos de regularización penalizan los coeficientes de las características con valores extremadamente grandes para reducir el error. No solo mejora la tasa de error, sino que reduce la complejidad del modelo. Es especialmente útil cuando trabajas con un dataset con muchas características y tu modelo base no distingue bien su importancia (no todas las variables son igual de relevantes, ¿verdad?).

En regresión lineal hay dos variantes habituales de regularización:

Lasso regression: añade un término de penalización equivalente al valor absoluto de la magnitud de los coeficientes (también llamada regularización L1). El término de penalización es: penalty term

donde:

  • $\lambda$ es el factor constante que añade control sobre la velocidad de mejora del error (tasa de aprendizaje)
  • el dataset tiene (M+1) características, así que recorre de 0 a M. wj es el peso/coeficiente.

Ridge regression: añade un término de penalización equivalente al cuadrado de la magnitud de los coeficientes (también llamada regularización L2). El término de penalización es: penalty term

¿Sigue mereciendo la pena aprender regresión lineal?

¡Y tanto! Ya has visto cómo la regresión lineal presenta con elegancia conceptos críticos de machine learning como funciones de coste, optimización, relaciones entre variables y mucho más. Todo esto es vital incluso al construir una red neuronal. La aplicabilidad cambia en algunos puntos, pero los conceptos de fondo son los mismos. Sin entender estas bases, nunca sabrás por qué tu red neuronal no rinde bien.

Además, a partir de una idea sencilla —modelar relaciones entre variables— surgieron muchos conceptos y, lo más importante, toda una familia de algoritmos: los modelos lineales generalizados. Así que, para cualquier aspirante a profesional de Data Science/Machine Learning/Inteligencia artificial, este algoritmo no es opcional. ¡A estas alturas ya lo habrás visto!

Ahora vas a implementar una regresión lineal sencilla en Python por tu cuenta. ¡Vamos allá!

Un caso práctico en Python

Para este caso práctico, usarás la librería Statsmodel de Python. Es muy popular y ofrece clases y funciones para estimar muchos modelos estadísticos, realizar pruebas y explorar datos estadísticos. Para los datos, emplearás el famoso Boston House dataset. scikit-learn incluye este dataset, así que no necesitas descargarlo.

Empecemos importando la librería statsmodels y el dataset:

import statsmodels.api as sm
from sklearn import datasets

data = datasets.load_boston()

Scikit-learn ofrece una descripción del dataset que puedes ver así:

print (data.DESCR)
Boston House Prices dataset
===========================

Notes
------
Data Set Characteristics:  

    :Number of Instances: 506

    :Number of Attributes: 13 numeric/categorical predictive

    :Median Value (attribute 14) is usually the target

    :Attribute Information (in order):
        - CRIM     per capita crime rate by town
        - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.
        - INDUS    proportion of non-retail business acres per town
        - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
        - NOX      nitric oxides concentration (parts per 10 million)
        - RM       average number of rooms per dwelling
        - AGE      proportion of owner-occupied units built prior to 1940
        - DIS      weighted distances to five Boston employment centres
        - RAD      index of accessibility to radial highways
        - TAX      full-value property-tax rate per $10,000
        - PTRATIO  pupil-teacher ratio by town
        - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
        - LSTAT    % lower status of the population
        - MEDV     Median value of owner-occupied homes in $1000's

    :Missing Attribute Values: None

    :Creator: Harrison, D. and Rubinfeld, D.L.

This is a copy of UCI ML housing dataset.
http://archive.ics.uci.edu/ml/datasets/Housing


This dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.

The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic
prices and the demand for clean air', J. Environ. Economics & Management,
vol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics
...', Wiley, 1980.   N.B. Various transformations are used in the table on
pages 244-261 of the latter.

The Boston house-price data has been used in many machine learning papers that address regression
problems.   

**References**

   - Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.
   - Quinlan, R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.
   - many more! (see http://archive.ics.uci.edu/ml/datasets/Housing)

Antes de aplicar la regresión lineal, prepara los datos y separa las características y la etiqueta del dataset. MEDV (valor mediano de la vivienda) es la etiqueta en este caso. Puedes acceder a las características con el atributo feature_names.

Un poco de pandas te vendrá genial. Esta chuleta es imprescindible si quieres repasar conceptos básicos de pandas.

# Pandas and NumPy import
import numpy as np
import pandas as pd

# Set the features  
df = pd.DataFrame(data.data, columns=data.feature_names)

# Set the target
target = pd.DataFrame(data.target, columns=["MEDV"])

En este punto conviene tener presentes algunas cosas sobre la regresión lineal antes de aplicarla. Podríamos haberlas visto antes, pero hacerlo ahora te ayudará a asimilarlas mejor.

  • Suposición de linealidad: La regresión lineal se usa para capturar la relación entre variables de entrada y salida. Para ello asume que la relación es lineal (y no siempre lo es). Siempre puedes transformar los datos para que la relación sea lineal. Por ejemplo, si tu relación es exponencial, puedes aplicar un log-transform para linealizar.

  • Colinealidad entre características: La colinealidad mide la importancia de una característica de forma matemática. Cuando las características están muy correlacionadas entre sí, la regresión lineal no aproxima bien la relación y tiende a sobreajustar. Es recomendable detectar las variables muy correlacionadas y eliminarlas antes de aplicar la regresión lineal. Si quieres saber más, echa un vistazo a este excelente kernel de Kaggle.

Manos a la obra. Para simplificar, usaremos solo la característica RM — número medio de habitaciones. Ten en cuenta que Statsmodels no añade el término constante (recuerda θ0) por defecto. Veámoslo primero sin el término constante en tu modelo:

X = df["RM"]
y = target["MEDV"]

# Fit and make the predictions by the model
model = sm.OLS(y, X).fit()
predictions = model.predict(X)

# Print out the statistics
model.summary()
regression results

¿Qué es todo este output? Es mucho para una primera vez. Vamos por partes con lo más importante:

  • Lo primero que ves es que estás usando el método OLS para entrenar tu regresión lineal.

  • Hay un valor de R-squared. R-cuadrado es el “porcentaje de varianza explicada” por el modelo. Es decir, la fracción por la cual la varianza de los errores es menor que la varianza de la variable dependiente. Toma valores entre 0 y 1 (0% a 100%). R-cuadrado te da una estimación de la relación entre los movimientos de la variable dependiente según los movimientos de la independiente. No te dice si tu modelo es bueno o malo, ni si hay sesgos. Un R-cuadrado alto o bajo no es necesariamente bueno o malo: no refleja la fiabilidad del modelo ni si has elegido la regresión adecuada. Puedes obtener un R-cuadrado bajo con un buen modelo, o alto con un mal ajuste, y viceversa.

  • El coeficiente (coef) de 3.634 significa que si RM aumenta en 1, el valor predicho de MEDV aumenta en 3.634.

  • Hay un intervalo de confianza del 95% para RM, es decir, el modelo estima con un 95% de confianza que el valor del coeficiente de RM está entre 3.548 y 3.759.

Estos son los puntos clave por ahora (y puedes ignorar el aviso).

Puedes añadir fácilmente el término constante al modelo: con X = sm.add_constant(X) (X es el dataframe con las variables independientes).

X = sm.add_constant(X)

model = sm.OLS(y, X).fit()
predictions = model.predict(X)

model.summary()
regression results

Se ve claramente que añadir el término constante afecta directamente al coeficiente. Sin constante, tu modelo pasaba por el origen; ahora tienes una intersección con el eje y en -34.67. La pendiente del predictor RM también cambia de 3.634 a 9.1021 (coef de RM).

Ahora ajustaremos un modelo con más de una variable: añadiremos LSTAT (porcentaje de población con menor estatus) junto con RM. El procedimiento de entrenamiento es exactamente el mismo:

X = df[["RM", "LSTAT"]]
y = target["MEDV"]

model = sm.OLS(y, X).fit()
predictions = model.predict(X)

model.summary()
regression results

Interpretemos:

Este modelo tiene un R-cuadrado mucho más alto —0.948—, lo que significa que captura el 94.8% de la varianza de la variable dependiente. Veamos la relación entre RM, LSTAT y el valor mediano de la vivienda. Si RM aumenta en 1, MEDV aumenta en 4.9069; si LSTAT aumenta en 1, MEDV disminuye en 0.6557. Indica que RM y LSTAT son estadísticamente significativas para predecir (o estimar) el valor mediano de la vivienda.

En castellano llano:

  • Las casas con pocas habitaciones tienden a tener precios más bajos.
  • En zonas con menor estatus socioeconómico, los precios de la vivienda tienden a ser más bajos.

¡Ahora sí que tiene sentido! ¿Verdad?

Este fue el ejemplo de regresión lineal simple y múltiple con Statsmodels. Tu tarea es investigar e interpretar los resultados con más características.

Ahora veamos cómo implementar la regresión lineal con tu querido scikit-learn. Ya tienes el dataset importado, pero necesitas importar la clase linear_model.

from sklearn import linear_model
X = df
y = target["MEDV"]

lm = linear_model.LinearRegression()
model = lm.fit(X,y)

El entrenamiento ha finalizado. Esta implementación de sklearn también usa OLS. Hagamos predicciones de MEDV para las cinco primeras muestras.

predictions = lm.predict(X)
print(predictions[0:5])
[30.00821269 25.0298606  30.5702317  28.60814055 27.94288232]

Si quieres más detalles (R-cuadrado, coeficientes, etc.) del modelo, puedes obtenerlos fácilmente.

lm.score(X,y)
0.7406077428649427
lm.coef_
array([-1.07170557e-01,  4.63952195e-02,  2.08602395e-02,  2.68856140e+00,
       -1.77957587e+01,  3.80475246e+00,  7.51061703e-04, -1.47575880e+00,
        3.05655038e-01, -1.23293463e-02, -9.53463555e-01,  9.39251272e-03,
       -5.25466633e-01])

Para terminar

¡Genial! Has llegado al final. No era trivial cubrir uno de los algoritmos más simples y fundamentales, y lo has hecho muy bien. No solo te has familiarizado con la regresión lineal simple, sino que también has repasado muchos conceptos, términos y factores clave del machine learning. Y además hiciste un caso práctico a fondo en Python.

Este tutorial también puede servirte como motivación para implementar la regresión lineal desde cero. Estos son los pasos, a modo de guía rápida:

  • Calcular la media y la varianza de los datos
  • Calcular la covarianza
  • Estimar los coeficientes
  • Realizar predicciones

Estas son algunas referencias usadas para preparar el tutorial:

Si quieres aprender más sobre clasificadores lineales, echa un vistazo al curso Linear Classifiers in Python de DataCamp.

Consulta también nuestro tutorial sobre la ecuación normal para regresión lineal.

Temas
Python
Ciencia de datos

Cursos de Python

Curso

Introducción a Python

4 h
7M
Domina los fundamentos del análisis de datos con Python en cuatro horas y descubre sus paquetes más usados.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow
Relacionado

Tutorial

Tutorial de ecuación normal para regresión lineal

Aprende qué es la ecuación normal y cómo puedes utilizarla para construir modelos de machine learning.
Kurtis Pykes 's photo

Kurtis Pykes

8 min

Python

Tutorial

Comprender la regresión logística en el tutorial de Python

Aprende sobre la regresión logística, sus propiedades básicas, y construye un modelo de machine learning sobre una aplicación del mundo real en Python.
Avinash Navlani's photo

Avinash Navlani

10 min

Tutorial

Tutorial de regresión lineal en R

En este tutorial aprenderás los fundamentos de un modelo estadístico muy popular: la regresión lineal.

Eladio Montero Porras

15 min

Tutorial

Tutorial de Lasso y regresión Ridge en Python

Conozca las técnicas de regresión del lazo y la cresta. Compare y analice los métodos en detalle.
DataCamp Team's photo

DataCamp Team

10 min

Tutorial

Funciones en Python: cómo llamar y escribir funciones

Descubre cómo escribir funciones en Python reutilizables y eficientes. Domina los parámetros, las sentencias return y temas avanzados como las funciones lambda. Organiza mejor tu código con main() y otras buenas prácticas.
Karlijn Willems's photo

Karlijn Willems

14 min

multiple linear regression

Tutorial

Regresión lineal múltiple en R: tutorial con ejemplos

Una visión completa para entender las regresiones lineales múltiples en R a través de ejemplos.
Zoumana Keita 's photo

Zoumana Keita

12 min

Ver MásVer Más