¿Diferencia entre seleccionar entidades basadas en la "regresión F" y en los valores ?

15

¿Comparar características usando F-regressionlo mismo que correlacionar características con la etiqueta individualmente y observando el valor ?R2

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.

Hunle
fuente
SO cayó inmediatamente después de que publiqué esto, lo que estoy seguro perjudica las posibilidades de que reciba atención.
Hunle
1
Su pregunta contiene el término "regresión F". ¿Qué es eso y cómo es diferente de la regresión? ... (Editar :) Algo se me ocurre en este momento: ¿te refieres a una prueba F (o tal vez solo una estadística F) para la regresión general contra un valor nulo (es decir, solo intercepción)?
Glen_b -Reinstate a Monica el
Me refiero a la prueba F. En la regresión, la prueba F y, por lo tanto, la estadística F, se usa para probar la hipótesis nula de que no hay relación entre el regresor y el resultado / etiqueta. 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/…
Hunle
Su comentario allí sugiere que solo tiene una variable de regresor (en cuyo caso, ¿por qué habla de la selección de funciones?)
Glen_b -Reinstale Monica el
2
¿Podría por favor editar esa explicación en su pregunta?
Glen_b: reinstala a Mónica el

Respuestas:

15

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 que F-regressionhaga lo siguiente:

  • Comience con un modelo constante,M0
  • Pruebe todos los modelos consisten en una sola función y elija el mejor según la estadística FM1
  • Pruebe todos los modelos consisten en más otra característica y elija el mejor ...M 1M2M1

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:

  • Selección de características: si desea seleccionar las mejores características en una tubería de aprendizaje automático, donde solo le importa la precisión y tiene medidas para ajustar el sobre / ajuste, es posible que solo le importe la clasificación y el cálculo adicional no sea útil.k
  • Prueba de significación: si está tratando de comprender el efecto de algunas variables en un resultado de un estudio, es posible que desee construir un modelo lineal y solo incluya las variables que mejoran significativamente su modelo, con respecto a algún valor . Aquí, es útil.pF-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 pM0M1M0M1M0p

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_regressionhacer

Tenga 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:

  • Comience con un modelo constante,M0
  • Pruebe todos los modelos consisten en una sola función y elija el mejor según la estadística FM1
  • Pruebe todos los modelos consisten en más otra característica y elija el mejor ...M 1M2M1

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 2M0M1f_regressionM0M1M2

Suponga 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,x3x1x2yx3yx1x2x1M1x2x3M2x2está 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.x3yx1x2

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.M0f_regression


pk


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

Guiños
fuente
Bien, ahora veo cómo este método de selección de características puede proteger contra la multicolinealidad. Supongo que si estoy ejecutando algo como un bosque aleatorio, que no es tan susceptible a la multicolinealidad, entonces este método de selección de características podría no ser tan aplicable. gracias @Winks
Hunle
Tenga cuidado de usar la correlación solo como una medida de la importancia de la característica. Mide la dependencia lineal entre variables y le dice que una característica (podría ser) es buena para un modelo lineal . Esto no es una suposición que puede hacer para un bosque aleatorio, ya que los árboles pueden aprender mucho más que las relaciones lineales. La correlación no es todo lo que hay (ver Anscombe Dataset (Wikipedia) .
Winks
¿Cuál es el " pequeño problema con los valores p " al que se refiere? Y, ¿hay un problema de comparaciones múltiples ya que estamos probando los mismos datos cada vez?
Hunle
M2R2
1
p
16

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 usar LinearRegression(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_regressionXyX[:,i]y

ρi=(X[:,i]mean(X[:,i]))(ymean(y))std(X[:,i])std(y).
Fi=ρi21ρi2(n2),
n=len(y)centerFalsen1SelectKBestkXcon los puntajes más altos. No hay aplicación secuencial ni nada, y los valores p tampoco se usan.

Ri2LinearRegressionX[:,i]yRi2=ρi2

Ri2<Rj2ρi21ρi2<ρj21ρj2Fi<Fj.
f_regressionLinearRegressionSelectKBest
usuario43451
fuente
2
Wow, entonces `SelectKBest` no construye un modelo secuencialmente.
Hunle
Por lo que vale, estoy de acuerdo con la interpretación del usuario43451. Y, desearía que sklearn lo llamara una clasificación de correlación de características individuales. La prueba F, para mí, trae la noción de modelos secuenciales como Winks aludió en su respuesta aceptada.
MrDrFenner