Contenido de este artículo
- 0
- 0
- 0
- 0
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')
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/
¿Te hemos ayudado?
Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:La ayuda no cuesta nada
Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo: