Использует ли сравнение элементов F-regression
то же самое, что и сопоставление элементов с меткой по отдельности и соблюдение значения ?
Я часто видел, как мои коллеги использовали 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-квадрату при регрессии их с результатом, опять же индивидуально.
sklearn
называет это F-регрессией, которая, возможно, немного вводит в заблуждение, поскольку на самом деле это тест. scikit-learn.org/stable/modules/generated/…Ответы:
TL: DR
Не будет никакой разницы, если
F-regression
просто вычислить статистику F и выбрать лучшие функции. Может быть разница в рейтинге, если предположитьF-regression
, что:Поскольку корреляция не будет одинаковой на каждой итерации. Но вы все равно можете получить этот рейтинг, просто вычислив корреляцию на каждом шаге, так почему же
F-regression
требуется дополнительный шаг? Это делает две вещи:F-regression
Что такое F-тест
Для этого он использует остаточную сумму квадратов в качестве меры погрешности и сравнивает уменьшение погрешности с числом добавленных переменных и количеством наблюдений (более подробную информацию о Википедии ). Ожидается, что добавление переменных, даже если они являются абсолютно случайными, всегда поможет модели снизить погрешность путем добавления другого измерения. Цель состоит в том, чтобы выяснить, действительно ли новые функции полезны или они являются случайными числами, но все же помогают модели, поскольку они добавляют измерение.
Что
f_regression
делатьОбратите внимание, что я не знаком с реализацией Scikit Learn, но давайте попробуем выяснить, что
f_regression
делает. В документации говорится, что процедура является последовательной. Если слово sequential означает то же самое, что и в других статистических пакетах, таких как Matlab Sequential Feature Selection , я ожидаю, что оно будет продолжаться:Сейчас я думаю, что это достаточно близкое приближение, чтобы ответить на ваш вопрос; есть ли разница между ранжированием
f_regression
и ранжированием по корреляции.f_regression
f_regression
Дополнительные материалы: вот введение в F-тест , которое может оказаться полезным
источник
Я потратил некоторое время на просмотр исходного кода Scikit , чтобы понять, что
f_regression
происходит, и я хотел бы опубликовать свои наблюдения здесь.Первоначальный вопрос был:
Q : Дает ли
SelectKBest(f_regression, k = 4)
тот же результат, что и использованиеLinearRegression(fit_intercept=True)
и выбор первых 4 функций с наивысшими оценками?Ответ - да . Более того, относительный порядок, заданный баллами, одинаков.
f_regression
center
False
SelectKBest
LinearRegression
f_regression
LinearRegression
SelectKBest
источник