Regresión de componentes principales en Python (paso a paso)

Dado un conjunto de p variables predictoras y una variable de respuesta, la regresión lineal múltiple utiliza un método conocido como mínimos cuadrados para minimizar la suma de los residuos al cuadrado (RSS):

RSS = Σ (y i – ŷ i ) 2

dónde:

  • Σ : símbolo griego que significa suma
  • y i : El valor de respuesta real para la i- ésima observación
  • ŷ i : el valor de respuesta predicho basado en el modelo de regresión lineal múltiple

Sin embargo, cuando las variables predictoras están altamente correlacionadas, la multicolinealidad puede convertirse en un problema. Esto puede hacer que las estimaciones de los coeficientes del modelo no sean confiables y tengan una alta varianza.

Una forma de evitar este problema es utilizar la regresión de componentes principales , que encuentra M combinaciones lineales (conocidas como «componentes principales») de los predictores p originales y luego usa mínimos cuadrados para ajustar un modelo de regresión lineal utilizando los componentes principales como predictores.

Este tutorial proporciona un ejemplo paso a paso de cómo realizar la regresión de componentes principales en Python.

Paso 1: importar los paquetes necesarios

Primero, importaremos los paquetes necesarios para realizar la regresión de componentes principales (PCR) en Python:

import numpy as np
 import pandas as pd
 import matplotlib. pyplot  como plt
 de sklearn. preprocesamiento de la  escala de 
 importación de sklearn import model_selection
 de sklearn. model_selection  importar RepeatedKFold
 de sklearn.model_selection importar train_test_split
 de sklearn. descomposición  importar PCA
 desde sklearn. importación de linear_model LinearRegresión
 de sklearn. importación de métricas  mean_squared_error

Paso 2: cargue los datos

Para este ejemplo, usaremos un conjunto de datos llamado mtcars , que contiene información sobre 33 autos diferentes. Usaremos hp como variable de respuesta y las siguientes variables como predictores:

  • mpg
  • disp
  • maldita sea
  • peso
  • qsec

El siguiente código muestra cómo cargar y ver este conjunto de datos:

#define la URL donde se encuentran los datos
 url = "https://raw.githubusercontent.com/Statology/Python-Guides/main/mtcars.csv"

#leer en los datos
 data_full = pd. read_csv (url)

#select subconjunto de datos
 data = data_full [["mpg", "disp", "drat", "wt", "qsec", "hp"]]

#ver las primeras seis filas de datos de
 datos [0: 6]


        mpg disp drat wt qsec hp
0 21,0 160,0 3,90 2,620 16,46 110
1 21,0 160,0 3,90 2,875 17,02 110
2 22,8 108,0 3,85 2,320 18,61 93
3 21,4 258,0 3,08 3,215 19,44 110
4 18,7 360,0 3,15 3,440 17,02 175
5 18,1 225,0 2,76 3,460 20,22 105

Paso 3: ajuste el modelo de PCR

El siguiente código muestra cómo ajustar el modelo de PCR a estos datos. Tenga en cuenta lo siguiente:

  • pca.fit_transform (scale (X)) : Esto le dice a Python que cada una de las variables predictoras debe ser escalada para tener una media de 0 y una desviación estándar de 1. Esto asegura que ninguna variable predictora sea demasiado influyente en el modelo si sucede. medirse en diferentes unidades.
  • cv = RepeatedKFold () : Esto le dice a Python que use la validación cruzada de k-fold para evaluar el rendimiento del modelo. Para este ejemplo, elegimos k = 10 pliegues, repetido 3 veces.
#definir variables de predicción y respuesta
 X = datos [["mpg", "disp", "drat", "wt", "qsec"]]
y = datos [["hp"]]

# variables predictoras de escala
 pca = PCA ()
X_reduced = pca. fit_transform ( escala (X))

#define el método de validación cruzada
 cv = RepeatedKFold (n_splits = 10 , n_repeats = 3 , random_state = 1 )

regr = LinearRegression ()
mse = []

# Calcule el MSE con solo la puntuación de intersección
 = -1 * model_selection. cross_val_score (regr,
           notario público. unos ((len (X_reduced), 1)), y, cv = cv,
           puntuación = ' neg_mean_squared_error '). significa ()    
mse. añadir (puntuación)

# Calcule MSE usando validación cruzada, agregando un componente a la vez
 para i en np. arange (1, 6):
    puntuación = -1 * selección_modelo. cross_val_score (regr,
               X_reduced [:,: i], y, cv = cv, scoring = ' neg_mean_squared_error '). significa ()
    mse. añadir (puntuación)
    
# Trazar resultados de validación cruzada    
 plt. trama (mse)
plt. xlabel ('Número de componentes principales')
plt. ylabel ('MSE')
plt. título ('hp')

Regresión de componentes principales en Python

La gráfica muestra el número de componentes principales a lo largo del eje xy el MSE de prueba (error cuadrático medio) a lo largo del eje y.

En la gráfica, podemos ver que la prueba MSE disminuye al agregar dos componentes principales, pero comienza a aumentar a medida que agregamos más de dos componentes principales.

Por lo tanto, el modelo óptimo incluye solo los dos primeros componentes principales.

También podemos usar el siguiente código para calcular el porcentaje de varianza en la variable de respuesta explicada agregando cada componente principal al modelo:

notario público. cumsum (np. round (pca. explicación_varianza_ratio_ , decimales = 4 ) * 100 )

matriz ([69,83, 89,35, 95,88, 98,95, 99,99])

Podemos ver lo siguiente:

  • Utilizando solo el primer componente principal, podemos explicar el 69,83% de la variación en la variable de respuesta.
  • Al agregar el segundo componente principal, podemos explicar el 89,35% de la variación en la variable de respuesta.

Tenga en cuenta que siempre podremos explicar más varianza utilizando más componentes principales, pero podemos ver que agregar más de dos componentes principales en realidad no aumenta mucho el porcentaje de varianza explicada.

Paso 4: use el modelo final para hacer predicciones

Podemos utilizar el modelo de PCR final con dos componentes principales para hacer predicciones sobre nuevas observaciones.

El siguiente código muestra cómo dividir el conjunto de datos original en un conjunto de entrenamiento y prueba y usar el modelo de PCR con dos componentes principales para hacer predicciones en el conjunto de prueba.

#dividir el conjunto de datos en entrenamiento (70%) y pruebas (30%) conjuntos
 X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = 0.3 , random_state = 0 )

#escala los datos de entrenamiento y prueba
 X_reduced_train = pca. fit_transform ( escala (X_train))
X_reduced_test = pca. transform ( scale (X_test)) [:,: 1]

#train modelo de PCR en datos de entrenamiento 
 regr = LinearRegression ()
regr. ajuste (X_reduced_train [:,: 1], y_train)

#calcular RMSE
 pred = regr. predecir (X_reduced_test)
notario público. sqrt ( error_medio_cuadrado (prueba_y, pred))

40.2096

Podemos ver que la prueba RMSE resulta ser 40.2096 . Ésta es la desviación promedio entre el valor predicho de hp y el valor observado de hp para las observaciones en el conjunto de prueba.

El uso completo del código Python en este ejemplo se puede encontrar aquí .

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Deja un comentario

La correlación y la regresión son dos términos en las estadísticas que están relacionados, pero no son exactamente iguales. En…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!