¿Comparar características usando F-regression
lo mismo que correlacionar características con la etiqueta individualmente y observando el valor ?
A menudo he visto a mis colegas usar una F regression
selecció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_regression
en la selección de funciones.
Aquí está mi código: estoy usando el mtcars
conjunto 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_regression
que 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.
sklearn
se 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-regression
solo calcula la estadística F y elige las mejores características. Puede haber una diferencia en la clasificación, suponiendo queF-regression
haga 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-regression
da 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_regression
hacerTenga en cuenta que no estoy familiarizado con la implementación de aprendizaje de Scikit, pero intentemos averiguar qué
f_regression
está 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_regression
y 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_regression
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, 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_regression
Material 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_regression
hace, 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_regression
center
False
SelectKBest
LinearRegression
f_regression
LinearRegression
SelectKBest
fuente