¿Comparar características usando F-regressionlo mismo que correlacionar características con la etiqueta individualmente y observando el valor ?
A menudo he visto a mis colegas usar una F regressionselección de funciones para su canal de aprendizaje automático de sklearn:
sklearn.feature_selection.SelectKBest(score_func=sklearn.feature_selection.f_regression...)`  Algunos, por favor, díganme: ¿por qué da los mismos resultados que solo correlacionarlo con la etiqueta / variable dependiente?
No me queda claro la ventaja de usar F_regressionen la selección de funciones.  
Aquí está mi código: estoy usando el mtcarsconjunto 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 sospecha, 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 más alta, la primera es la segunda, la cuarta es la tercera y la tercera es la última, en ambos casos.
¿Hay algún caso en el F_regressionque darían resultados diferentes o clasificarían las características de manera diferente?
EDITAR: Para resumir, me gustaría saber si estas dos clasificaciones de características alguna vez dan resultados diferentes:
1) clasificar las características por su estadística F cuando las regresa con el resultado individualmente (esto es lo que hace sklearn) Y,
2) clasifica las características por su valor R cuadrado cuando las regresa con el resultado, nuevamente individualmente.

sklearnse refiere a él como regresión F, lo cual es quizás un poco engañoso ya que en realidad es una prueba. scikit-learn.org/stable/modules/generated/…Respuestas:
TL: DR
No habrá diferencia si
F-regressionsolo calcula la estadística F y elige las mejores características. Puede haber una diferencia en la clasificación, suponiendo queF-regressionhaga lo siguiente:Como la correlación no será la misma en cada iteración. Pero aún puede obtener esta clasificación simplemente calculando la correlación en cada paso, entonces, ¿por qué
F-regressionda un paso adicional? Hace dos cosas:F-regression¿Qué es una prueba F?
Una 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. Puede usarlo cuando tenga un modelo básico y un modelo más complicado , que contiene todas las variables de y algunas más. La prueba F le indica si es significativamente mejor que , con respecto a un valor .M 1 M 0 M 1 M 0 pMETRO0 0 METRO1 METRO0 0 METRO1 METRO0 0 pag 
Para hacerlo, utiliza la suma de cuadrados residuales como una medida de error y compara la reducción de error con el número de variables agregadas y el número de observación (más detalles en Wikipedia ). Se espera que agregar variables, incluso si son completamente aleatorias, siempre ayude al modelo a lograr un menor error al agregar otra dimensión. El objetivo es determinar si las nuevas características son realmente útiles o si son números aleatorios pero aún ayudan al modelo porque agregan una dimensión.
¿Qué
f_regressionhacerTenga en cuenta que no estoy familiarizado con la implementación de aprendizaje de Scikit, pero intentemos averiguar qué
f_regressionestá haciendo. La documentación indica que el procedimiento es secuencial. Si la palabra secuencial significa lo mismo que en otros paquetes estadísticos, como Matlab Sequential Feature Selection , así es como esperaría que continúe:Por ahora, creo que es una aproximación lo suficientemente cercana como para responder a su pregunta; ¿Hay alguna diferencia entre la clasificación
f_regressiony la clasificación por correlación?Si que comenzar con el modelo constante y tratar de encontrar el mejor modelo con una sola característica, , seleccionará la misma característica, ya sea que utilice o su enfoque basado en correlación, ya que ambos son una medida de dependencia lineal. Pero si tuviera que pasar de a y luego a , habría una diferencia en su puntuación.M 1 M 0 M 1 M 2METRO0 0 METRO1 METRO0 0 METRO1 METRO2 
f_regressionSuponga que tiene tres características, , donde y están altamente correlacionadas con la salida , pero también están altamente correlacionadas entre sí, mientras que solo está correlacionada a medias con . Su método de puntuación asignaría los mejores puntajes a y , pero el método secuencial podría no serlo. En la primera ronda, elegiría la mejor característica, digamos , para crear . Luego, evaluaría tanto como para . Comox 1 x 2 y x 3 y x 1 x 2 x 1 M 1 x 2 x 3 M 2 x 2 x 3 y x 1 x 2X1, x2, x3 X1 X2 y X3 y X1 X2 X1 METRO1 x2 x3 M2 x2 está altamente correlacionado con una característica ya seleccionada, la mayor parte de la información que contiene ya está incorporada en el modelo y, por lo tanto, el procedimiento podría seleccionar . Si bien está menos correlacionado con , está más correlacionado con los residuos , la parte que aún no explica, que . Así es como los dos procedimientos que propone son diferentes.x3 y x1 x2 
Todavía puede emular el mismo efecto con su idea construyendo su modelo secuencialmente y midiendo la diferencia de ganancia para cada característica adicional en lugar de compararlas con el modelo constante como lo está haciendo ahora. El resultado no sería diferente de los resultados. La razón para que esta función exista es proporcionar esta selección de características secuenciales, y además convierte el resultado en una medida F que puede usar para juzgar la importancia.M0 
f_regressionMaterial adicional: Aquí hay una introducción a la prueba F que puede resultarle útil.
fuente
Pasé un tiempo mirando el código fuente de Scikit para comprender lo que
f_regressionhace, y me gustaría publicar mis observaciones aquí.La pregunta original era:
P : ¿
SelectKBest(f_regression, k = 4)Produce el mismo resultado que usarLinearRegression(fit_intercept=True)y elegir las primeras 4 características con las puntuaciones más altas?La respuesta es si . Además, el orden relativo dado por los puntajes es el mismo.
f_regressioncenterFalseSelectKBestLinearRegressionf_regressionLinearRegressionSelectKBestfuente