23 votos

Diferencia entre la selección de características basada en la "regresión F" y la basada en $R^2$ ¿valores?

Es comparar características utilizando F-regression lo mismo que correlacionar características con la etiqueta individualmente y observar la $R^2$ ¿valor?

A menudo he visto a mis colegas utilizar un F regression para la selección de características en su canal de aprendizaje automático a partir de sklearn :

sklearn.feature_selection.SelectKBest(score_func=sklearn.feature_selection.f_regression...)`  

¿Por qué da los mismos resultados que la correlación con la etiqueta/variable dependiente?

No me queda clara la ventaja de utilizar F_regression en la selección de características.

Aquí está mi código: Estoy usando el mtcars de datos de R :

import pandas as pd
import numpy as np
from sklearn import feature_selection
from sklearn.linear_model import LinearRegression

#....load mtcars dataset into a pandas dataframe called "df", not shown here for conciseness

# only using these numerical columns as features ['mpg', 'disp', 'drat', 'wt']
# using this column as the label:  ['qsec']

model = feature_selection.SelectKBest(score_func=feature_selection.f_regression,\
                                      k=4)

results = model.fit(df[columns], df['qsec'])

print results.scores_
print results.pvalues_

# Using just correlation coefficient:

columns = ['mpg', 'disp', 'drat', 'wt']
for col in columns:
    lm = LinearRegression(fit_intercept=True)
    lm.fit(df[[col]], df['qsec'])
    print lm.score(df[[col]], df['qsec'])

Como se sospechaba, la clasificación de las características es exactamente la misma:

scores using f_regression:

[ 6.376702    6.95008354  0.25164249  0.94460378]

 scores using coefficient of determination:

0.175296320261  
0.18809385182
0.00831830818303
0.0305256382746

Como puede ver, la segunda característica es la mejor clasificada, la primera la segunda, la cuarta la tercera y la tercera la última, en ambos casos.

¿Hay algún caso en el que el F_regression ¿darían resultados diferentes, o clasificarían las características de forma distinta de alguna manera?

EDITAR: En resumen, me gustaría saber si estas dos clasificaciones de características dan resultados diferentes:

1) clasificar las características por su estadístico F al aplicarles una regresión con el resultado de forma individual (esto es lo que hace sklearn) Y,

2) clasificar las características en función de su valor R-cuadrado al hacer la regresión con el resultado, de nuevo individualmente.

27voto

wtayyeb Puntos 54

TL:DR

No habrá diferencia si F-regression sólo calcula el estadístico F y elige las mejores características. Podría haber una diferencia en la clasificación, suponiendo que F-regression hace lo siguiente:

  • Empieza con un modelo constante, $M_0$
  • Probar todos los modelos $M_1$ consistente en una sola característica y elegir la mejor según el estadístico F
  • Probar todos los modelos $M_2$ compuesto por $M_1$ más otra característica y elegir el mejor ...

Ya que la correlación no será la misma en cada iteración. Pero aún se puede obtener esta clasificación simplemente calculando la correlación en cada paso, así que ¿por qué F-regression da un paso adicional? Hace dos cosas:

  • Selección de características: Si desea seleccionar la $k$ mejores características en un proceso de aprendizaje automático, en el que sólo te importa la precisión y tienes medidas para ajustar el ajuste por defecto o por exceso, puede que sólo te importe la clasificación y el cálculo adicional no sea útil.
  • Prueba de significación: Si está intentando comprender el efecto de algunas variables sobre un resultado en un estudio, es posible que desee construir un modelo lineal, y sólo incluir las variables que son significativamente mejorar su modelo, con respecto a algunos $p$ -valor. Toma, F-regression es muy útil.

¿Qué es una prueba F?

A Prueba F (Wikipedia) es una forma de comparar la importancia de la mejora de un modelo, con respecto a la adición de nuevas variables. Se puede utilizar cuando se tiene un modelo básico $M_0$ y un modelo más complicado $M_1$ que contiene todas las variables de $M_0$ y algunos más. La prueba F te dice si $M_1$ es significativamente mejor que $M_0$ con respecto a a $p$ -valor.

Para ello, utiliza la suma residual de cuadrados como medida del error, y compara la reducción del error con el número de variables añadidas y el número de observaciones (más detalles en Wikipedia ). Se espera que la adición de variables, aunque sean completamente aleatorias, ayude siempre al modelo a conseguir un error menor al añadir otra dimensión. El objetivo es averiguar si las nuevas características son vraiment útiles o si son números aleatorios pero siguen ayudando al modelo porque añaden una dimensión.


¿Qué significa f_regression do

Tenga en cuenta que no estoy familiarizado con la implementación de Scikit learn, pero vamos a tratar de averiguar lo que f_regression está haciendo. En documentación establece que el procedimiento es secuencial. Si la palabra secuencial significa lo mismo que en otros paquetes estadísticos, como Selección secuencial de características en Matlab Así es como yo esperaría que procediera:

  • Empieza con un modelo constante, $M_0$
  • Probar todos los modelos $M_1$ consistente en una sola característica y elegir la mejor según el estadístico F
  • Probar todos los modelos $M_2$ compuesto por $M_1$ más otra característica y elegir el mejor ...

Por ahora, creo que es una aproximación suficiente para responder a su pregunta; ¿hay alguna diferencia entre la clasificación de f_regression y clasificación por correlación.

Si empezaras con un modelo constante $M_0$ y tratar de encontrar el mejor modelo con una sola característica, $M_1$ seleccionará la misma función tanto si utiliza f_regression o su enfoque basado en la correlación, ya que ambos son una medida de dependencia lineal. Pero si pasáramos de $M_0$ a $M_1$ y luego a $M_2$ habría una diferencia en su puntuación.

Supongamos que tiene tres funciones, $x_1, x_2, x_3$ donde ambos $x_1$ y $x_2$ están muy correlacionadas con la producción $y$ pero también muy correlacionadas entre sí, mientras que $x_3$ sólo está medianamente correlacionada con $y$ . Su método de puntuación asignaría las mejores puntuaciones a $x_1$ y $x_2$ pero el método secuencial puede que no. En la primera ronda, elegiría la mejor característica, por ejemplo $x_1$ para crear $M_1$ . A continuación, evaluaría tanto $x_2$ y $x_3$ para $M_2$ . En $x_2$ está muy correlacionada con una característica ya seleccionada, la mayor parte de la información que contiene ya está incorporada al modelo, por lo que el procedimiento podría seleccionar $x_3$ . Aunque está menos correlacionado con $y$ está más correlacionado con el residuos la parte que $x_1$ no explica ya, que $x_2$ . En esto se diferencian los dos procedimientos que usted propone.

Puedes emular el mismo efecto con tu idea construyendo tu modelo secuencialmente y midiendo la diferencia de ganancia para cada característica adicional en lugar de compararlas con el modelo constante $M_0$ como estás haciendo ahora. El resultado no sería diferente del f_regression resultados. La razón por la que existe esta función es para proporcionar esta selección secuencial de características, y además convierte el resultado en una medida F que se puede utilizar para juzgar la significación.


El objetivo de la prueba F es proporcionar el nivel de significación. Si desea asegurarse de que las características que está incluyendo son significativas con respecto a su $p$ -valor, se utiliza una prueba F. Si sólo desea incluir el $k$ mejores prestaciones, puede utilizar sólo la correlación.


Material adicional: Aquí hay un introducción a la prueba F puede resultarle útil

22voto

Pasé algún tiempo mirando a través de la Scikit código fuente para entender qué f_regression y me gustaría exponer aquí mis observaciones.

La pregunta original era:

Q : En SelectKBest(f_regression, k = 4) produce el mismo resultado que utilizar LinearRegression(fit_intercept=True) y elegir las 4 primeras características con las puntuaciones más altas?

La respuesta es . Además, la ordenación relativa dada por las puntuaciones es la misma.

Esto es lo que f_regression hace, en la matriz de entrada $X$ y matriz $y$ . Para cada función $X[:, i]$ calcula la correlación con $y$ : $$ \rho_i = \frac{(X[:, i] - mean(X[:, i])) * (y - mean(y))}{std(X[:, i]) * std(y)}. $$ A continuación, calcula el estadístico F $$ F_i = \frac{\rho_i^2}{1 - \rho_i^2}*(n-2), $$ donde $n = len(y)$ el número de muestras (hay una ligera diferencia si el parámetro center est False y se multiplica por $n-1$ ). Estos valores F se devuelven junto con los valores p asociados. El resultado es una tupla (valores F, valores p). A continuación, SelectKBest toma el primer componente de esta tupla (que serán las puntuaciones), lo ordena y elige la primera $k$ características de $X$ con las puntuaciones más altas. No hay aplicación secuencial ni nada por el estilo, y tampoco se utilizan los valores p.

Ahora dejemos que $R_i^2$ sea la puntuación calculada mediante LinearRegression para $X[:, i]$ y $y$ . Se trata de una regresión sobre una única variable, por lo que $R_i^2 = \rho_i^2$ . Entonces $$ R_i^2 < R_j^2 \Leftrightarrow \frac{\rho_i^2}{1 - \rho_i^2} < \frac{\rho_j^2}{1 - \rho_j^2} \Leftrightarrow F_i < F_j. $$ Por lo tanto, no hay diferencia entre f_regression y LinearRegression . Aunque se podría construir un modelo secuencialmente, esto no es lo que SelectKBest lo hace.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X