La ciencia de datos: cómo crear interacciones entre las variables con python

científicos de datos pueden utilizar Python para crear interacciones entre las variables. En una combinación lineal, el modelo reacciona a cómo una variable cambia de forma independiente con respecto a los cambios en las otras variables. En las estadísticas, este tipo de modelo es una principal eFmodelo de efec-.

El clasificador Naïve Bayes hace una suposición similar para las probabilidades, y también funciona bien con problemas complejos de texto.

A pesar de que la máquina funciona mediante el uso de aproximaciones y un conjunto de variables independientes pueden hacer sus predicciones funcionan bien en la mayoría de situaciones de aprendizaje, a veces es posible que se pierda una parte importante de la imagen. Usted puede coger fácilmente este problema que representa la variación en el destino asociado con la variación conjunta de dos o más variables de dos maneras simples y directas:

  • Existente conocimiento del dominio del problema: Por ejemplo, en el mercado del automóvil, que tiene un motor ruidoso es una molestia en un coche de la ciudad, pero considera una ventaja para los coches deportivos (todo el mundo quiere saber que tienes un coche ultra-fresco y caro). Al conocer la preferencia del consumidor, puede modelar una variable de nivel de ruido y una variable de tipo de coche juntos para obtener predicciones exactas utilizando un modelo de análisis predictivo que adivina el valor del coche en función de sus características.

  • Prueba de combinaciones de diferentes variables: Mediante la realización de pruebas de grupo, se puede ver el efecto que tienen determinadas variables en su variable de destino. Por lo tanto, incluso sin saber acerca de los motores ruidosos y coches deportivos, que podría haber cogido un medio diferente del nivel de preferencia cuando se analiza el conjunto de datos dividida por tipo de coches y nivel de ruido.

El siguiente ejemplo muestra cómo probar y detectar interacciones en el conjunto de datos de Boston. La primera tarea consiste en cargar unas cuantas clases de ayuda:

de sklearn.linear_model LinearRegressionfrom importación importación sklearn.cross_validation cross_val_scorefrom importación sklearn.cross_validation KFoldregression = LinearRegression (normalizar = True) validación cruzada = KFold (n = X.shape [0], n_folds = 10, barajadura = True, random_state = 1)

El código reinicializa la pandas Marco de datos utilizando únicamente las variables predictoras. UN para bucle coincide con los diferentes predictores y crea una nueva variable que contiene cada interacción. La formulación matemática de una interacción es simplemente una multiplicación.

Video: Tutorial Python 6: Listas

df = pd.DataFrame (X, columnas = boston.feature_names) de referencia = np.mean (cross_val_score (regresión, df, y, de puntuación = `r2`, cv = validación cruzada, n_jobs = 1)) interacciones = list () para feature_A en boston.feature_names: para feature_B en boston.feature_names: si feature_A gt; feature_B: df [ ‘interacción’] = df [feature_A] * df [feature_B] puntuación = np.mean (cross_val_score (regresión, df, y, de puntuación = ‘r2’, cv = validación cruzada, n_jobs = 1)) si la puntuación gt; la línea de base: interactions.append ((feature_A, feature_B, redondo (puntuación, 3))) de impresión `de línea de base R2:% .3f` % baselineprint 10 mejores interacciones:% s `% según (interacciones, clave = lambda (x): x [2], revertir = True) [: 10] de línea de base R2: 0.699Top 10 interacciones: [( `RM`, `LSTAT`, 0,782), ( `TAX`, `RM`, 0.766),
( ‘RM’, ‘RAD’, 0,759), ( ‘RM’, ‘PTRATIO’, 0,75),
( ‘RM’, ‘INDUS’, 0,748), ( ‘RM’, ‘NOX’, 0,733),
( ‘RM’, ‘B’, 0.731), ( ‘RM’, ‘edad’, 0.727),
( ‘RM’, ‘DIS’, 0,722), ( ‘ZN’, ‘RM’, 0.716)]

El código de prueba la adición específica de cada interacción con el modelo usando un 10 pliegues de validación cruzada. Se registra el cambio en la medida R2 en una pila (una lista simple) que una aplicación puede ordenar y explorar más tarde.

La línea de base R2 es 0,699, por lo que una mejora informado de la pila de las interacciones a 0,782 se ve bastante impresionante! Es importante saber cómo se hace posible esta mejora. Las dos variables que intervienen son RM (el número medio de habitaciones) y LSTAT (el porcentaje de población menor de estado).

colores = [ ‘k’ si v gt; np.mean (y) más ‘w’ para v en y] de dispersión = df.plot (tipo = ‘dispersión’, x = ‘RM’, Y = ‘LSTAT’, c = colores)

Este diagrama de dispersión aclara la mejora. En una porción de las casas en el centro de la trama, es necesario conocer tanto LSTAT y RM a fin de separar correctamente las casas de alto valor de la de bajo valor casas- por lo tanto, una interacción es indispensable en este caso.

las variables combinado LSTAT y ayuda RM para separar alta de los precios bajos.
las variables combinado LSTAT y ayuda RM para separar alta de los precios bajos.

Adición de interacciones y variables transformadas conduce a un modelo de regresión lineal extendido, una regresión polinómica. científicos de datos se basan en pruebas y experimentos para validar un método para resolver un problema, por lo que el siguiente código modifica ligeramente el código anterior para redefinir el conjunto de predictores utilizando interacciones y términos cuadráticos elevando al cuadrado las variables:

POLYX = pd.DataFrame (X, columnas = boston.feature_names) de referencia = np.mean (cross_val_score (regresión, POLYX, y, 
de puntuación = `mean_squared_error`, cv = validación cruzada, n_jobs = 1)) mejoras = [línea de base] para feature_A en boston.feature_names: POLYX [feature_A + `^ 2`] = POLYX [feature_A] ** 2improvements.append (np.mean ( cross_val_score (regresión, POLYX, y, de puntuación = `mean_squared_error`, cv = validación cruzada, n_jobs = 1))) para feature_B en boston.feature_names: si feature_A gt; feature_B: POLYX [feature_A + `*` + feature_B] = POLYX [feature_A] * POLYX [feature_B] improvements.append (np.mean (cross_val_score (regresión, POLYX, y, de puntuación = `mean_squared_error`, cv = validación cruzada, n_jobs = 1 )))

Para realizar un seguimiento de las mejoras como el código añade nuevos términos y complejos, el ejemplo coloca los valores en el mejoras lista. Aquí es un gráfico de los resultados que demuestran algunas adiciones son grandes porque el error cuadrado disminuye, y otras adiciones son terribles porque aumentan el error en su lugar.

Adición de funciones polinómicas aumenta el poder predictivo.
Adición de funciones polinómicas aumenta el poder predictivo.

Por supuesto, se podría realizar una prueba en curso para agregar un término cuadrático o interacción opcionalmente, lo que se denomina un enfoque univariado y codicioso. Este ejemplo es una buena base para el control de otras formas de controlar la complejidad de sus conjuntos de datos existentes o la complejidad que tiene para inducir la transformación y la creación de la operación en el curso de los esfuerzos de exploración de datos. Antes de continuar, se comprueba tanto la forma del conjunto de datos reales y su error cuadrático medio validación cruzada.

forma de impresión (POLYX) validación cruzada = KFold (n = X.shape [0], n_folds = 10, barajadura = True, random_state = 1) de impresión ‘cuadrado medio del error% .3f’% abs (np.mean (cross_val_score (regresión, 
POLYX, y, de puntuación = ‘mean_squared_error’, cv = validación cruzada, n_jobs = 1))) (506, 104) cuadrado medio del error 13.466

A pesar de que el error cuadrático medio es bueno, la razón entre 506 y 104 observaciones características no es bueno en absoluto.

Video: 17.- Curso Python - Variables Globales

Como regla general, no debería haber 10-20 observaciones para cada coeficiente que desea estimar en modelos lineales. Sin embargo, la experiencia demuestra que tiene por lo menos 30 de ellos es mejor.

Artículos Relacionados