Разница между выбором признаков на основе «F-регрессии» и на основе значений


15

Использует ли сравнение элементов F-regressionто же самое, что и сопоставление элементов с меткой по отдельности и соблюдение значения ?R2

Я часто видел, как мои коллеги использовали F regressionдля выбора функций в своем конвейере машинного обучения из sklearn:

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

Некоторые, пожалуйста, скажите мне - почему это дает те же результаты, что и просто корреляция с меткой / зависимой переменной?

Мне не понятно преимущество использования F_regressionпри выборе функции.

Вот мой код: я использую mtcarsнабор данных из 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'])

Как и предполагалось, рейтинг функций точно такой же:

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

Как видите, вторая функция имеет самый высокий рейтинг, первая функция - вторая, четвертая функция - третья, а третья функция - последняя, ​​в обоих случаях.

Был ли когда-нибудь случай, когда F_regressionон давал бы разные результаты или каким-то образом оценивал бы функции по-другому?

РЕДАКТИРОВАТЬ: Подводя итог, я хотел бы знать, дают ли эти два рейтинга функций когда-либо разные результаты:

1) ранжирование функций по их F-статистике при регрессии их с результатами по отдельности (это то, что делает sklearn) И,

2) ранжирование элементов по их R-квадрату при регрессии их с результатом, опять же индивидуально.


ТАК пошел вниз сразу после того, как я отправил это, которое, я уверен, повредило шансы того, что это получит какое-либо внимание.
Hunle

1
Ваш вопрос содержит термин «F-регрессия». Что это такое и чем оно отличается от регрессии? ... (Правка :) Что-то происходит со мной только сейчас: вы имеете в виду F-тест (или, возможно, просто F-статистику) для общей регрессии против ноль-ноль (т. Е. Только перехват)?
Glen_b

Я имею в виду F-тест. В регрессии F-тест и, следовательно, F-статистика используются для проверки нулевой гипотезы об отсутствии связи между регрессором и результатом / меткой. sklearnназывает это F-регрессией, которая, возможно, немного вводит в заблуждение, поскольку на самом деле это тест. scikit-learn.org/stable/modules/generated/…
Hunle

Ваш комментарий предполагает, что у вас есть только одна переменная регрессора (в таком случае, почему вы говорите о выборе объектов?)
Glen_b

2
Не могли бы вы отредактировать это объяснение в своем вопросе?
Glen_b

Ответы:


15

TL: DR

Не будет никакой разницы, если F-regressionпросто вычислить статистику F и выбрать лучшие функции. Может быть разница в рейтинге, если предположить F-regression, что:

  • M0
  • M1
  • M2M1

Поскольку корреляция не будет одинаковой на каждой итерации. Но вы все равно можете получить этот рейтинг, просто вычислив корреляцию на каждом шаге, так почему же F-regressionтребуется дополнительный шаг? Это делает две вещи:

  • k
  • pF-regression

Что такое F-тест

M0M1M0M1M0p

Для этого он использует остаточную сумму квадратов в качестве меры погрешности и сравнивает уменьшение погрешности с числом добавленных переменных и количеством наблюдений (более подробную информацию о Википедии ). Ожидается, что добавление переменных, даже если они являются абсолютно случайными, всегда поможет модели снизить погрешность путем добавления другого измерения. Цель состоит в том, чтобы выяснить, действительно ли новые функции полезны или они являются случайными числами, но все же помогают модели, поскольку они добавляют измерение.


Что f_regressionделать

Обратите внимание, что я не знаком с реализацией Scikit Learn, но давайте попробуем выяснить, что f_regressionделает. В документации говорится, что процедура является последовательной. Если слово sequential означает то же самое, что и в других статистических пакетах, таких как Matlab Sequential Feature Selection , я ожидаю, что оно будет продолжаться:

  • M0
  • M1
  • M2M1

Сейчас я думаю, что это достаточно близкое приближение, чтобы ответить на ваш вопрос; есть ли разница между ранжированием f_regressionи ранжированием по корреляции.

M0M1f_regressionM0M1M2

x1,x2,x3x1x2yx3yx1x2x1M1x2x3M2x2x3yx1x2

M0f_regression


pk


Дополнительные материалы: вот введение в F-тест , которое может оказаться полезным


Хорошо, теперь я вижу, как этот метод выбора функций может защитить от мультиколлинеарности. Я полагаю, что если я запускаю что-то вроде случайного леса, который не так подвержен мультиколлинеарности, то этот метод выбора функции может быть не применим. спасибо @Winks
Hunle

Остерегайтесь использования корреляции только в качестве меры важности признаков. Он измеряет линейную зависимость между переменными и говорит вам, что функция (может быть) хороша для линейной модели. Это не предположение, которое вы можете сделать для случайного леса, поскольку деревья могут изучать гораздо больше, чем линейные отношения. Корреляция - это еще не все (см. Anscombe Dataset (Википедия) .
Winks

Что за « небольшая проблема с p-значениями », на которую вы ссылаетесь? И есть ли проблема множественных сравнений, так как мы каждый раз тестируем одни и те же данные?
Hunle

M2R2

1
p

16

Я потратил некоторое время на просмотр исходного кода Scikit , чтобы понять, что f_regressionпроисходит, и я хотел бы опубликовать свои наблюдения здесь.

Первоначальный вопрос был:

Q : Дает ли SelectKBest(f_regression, k = 4)тот же результат, что и использование LinearRegression(fit_intercept=True)и выбор первых 4 функций с наивысшими оценками?

Ответ - да . Более того, относительный порядок, заданный баллами, одинаков.

f_regressionXyX[:,i]y

ρi=(X[:,i]mean(X[:,i]))(ymean(y))std(X[:,i])std(y).
Fi=ρi21ρi2(n2),
n=len(y)centerFalsen1SelectKBestkXс самыми высокими баллами. Здесь нет последовательного приложения или чего-либо еще, и значения p также не используются.

Ri2LinearRegressionX[:,i]yRi2=ρi2

Ri2<Rj2ρi21ρi2<ρj21ρj2Fi<Fj.
f_regressionLinearRegressionSelectKBest

2
Вау, так что `SelectKBest` не строит модель последовательно.
Hunle

Для чего это стоит, я согласен с интерпретацией user43451. И я хотел бы, чтобы sklearn просто назвал бы это корреляционным рейтингом отдельных функций. F-test, для меня, вводит понятие последовательных моделей, на которое ссылается Winks в своем принятом ответе.
MrDrFenner
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.