Різниця між вибором функцій на основі "F регресії" та на основі значень


15

Чи порівнюють функції, використовуючи F-regressionте саме, що співвідносити функції з міткою окремо і дотримуватися значення ?R2

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

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

Деякі, будь ласка, скажіть мені - чому це дає ті ж результати, що і лише співвідносивши його зі змінною label / залежно?

Незрозуміло мені перевагу використання 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давав би різні результати, або в чомусь різнив би риси?

EDIT: Підводячи підсумок, я хотів би знати, чи дають ці два рейтингові функції різні результати:

1) класифікація ознак за їх F-статистикою, коли регресує їх з результатом окремо (це те, що робить sklearn) І,

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


Так знизився одразу після того, як я опублікував це, що, я впевнений, зашкодив шансам отримати будь-яку увагу.
Ханл

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
  • Спробуйте всі моделі що складаються лише з однієї функції, і виберіть найкращу відповідно до статистики FM1
  • Спробуйте всі моделі що складаються з M 1 плюс ще одну функцію та виберіть найкращу ...М2М1

Оскільки кореляція буде не однаковою при кожній ітерації. Але ви все одно можете отримати цей рейтинг, просто обчисливши кореляцію на кожному кроці, так чому ж F-regressionробиться додатковий крок? Це робить дві речі:

  • Вибір функцій: Якщо ви хочете вибрати найкращі функції в конвеєрі машинного навчання, де ви дбаєте лише про точність та вживаєте заходи щодо коригування під / переозброєння, вам може бути цікавим лише рейтинг і додаткові обчислення не корисні.к
  • Тест на значимість: Якщо ви намагаєтесь зрозуміти вплив деяких змінних на вихід у процесі дослідження, можливо, ви хочете побудувати лінійну модель і включити лише змінні, які значно покращують вашу модель, стосовно деякої значення . Ось, корисно.pF-regression

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

F-тест (Вікіпедія) є способом порівняння значущості поліпшення моделі, в зв'язку з додаванням нових змінних. Ви можете використовувати його, коли ви маєте базову модель і більш складну модель M 1 , яка містить всі змінні від M 0 і деякі інші. F-тест повідомляє, чи M 1 значно кращий за M 0 , стосовно p -значення.М0М1М0М1М0p

Для цього він використовує залишкову суму квадратів як міру помилки та порівнює помилку з кількістю доданих змінних та кількістю спостереження (детальніше у Вікіпедії ). Додавання змінних, навіть якщо вони є абсолютно випадковими, очікується, що завжди допоможе моделі досягти меншої помилки, додавши інший вимір. Мета полягає в тому, щоб з’ясувати, чи справді нові функції справді корисні чи вони є випадковими числами, але все ж допомагають моделі, оскільки вони додають виміру.


Що f_regressionробити

Зауважте, що я не знайомий із впровадженням Scikit, але спробуємо розібратися, що f_regressionробить. У документації зазначено, що процедура є послідовною. Якщо слово "послідовне" означає те саме, що і в інших статистичних пакетах, таких як вибір послідовних функцій Matlab , ось, як я очікував, воно продовжить:

  • Почніть з постійної моделі, M М0
  • Спробуйте всі моделі M 1,М1
  • Спробуйте всі моделі M 2, що складаються з M 1М2М1

На даний момент я думаю, що це досить близький наближення, щоб відповісти на ваше запитання; чи є різниця між рейтингом f_regressionта рейтингом за кореляцією.

М0М1f_regressionМ0М1М2

х1,х2,х3х1х2ух3ух1х2х1М1х2х3М2х2х3ух1х2

М0f_regression


pк


Додатковий матеріал: Ось вступ до F-тесту, який може бути корисним


Гаразд, тепер я бачу, як цей спосіб вибору функцій може захистити від мультиколінеарності. Я припускаю, що якщо я запускаю щось на кшталт "Випадковий ліс", який не є таким сприйнятливим до мультиколінеарності, то цей метод вибору функцій може бути непридатним. дякую @Winks
Hunle

Остерігайтеся використовувати кореляцію лише як міру важливості функції. Він вимірює лінійну залежність між змінними і повідомляє вам, що особливість (можливо, є) хороша для лінійної моделі. Це не припущення, яке можна зробити для випадкових лісів, оскільки дерева можуть дізнатися набагато більше, ніж лінійні відносини. Кореляція - це не все, що є (див. Набір даних Anscombe (Wikipedia) .
Winks

Яка " незначна проблема з р-значеннями ", на яку ви посилаєтесь? І чи існує проблема з кількома порівняннями, оскільки ми кожен раз тестуємо одні й ті самі дані?
Ханл

М2R2

1
p

16

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

Первісне питання:

Питання : Чи SelectKBest(f_regression, k = 4)дає такий же результат, як використання LinearRegression(fit_intercept=True)та вибір перших 4 функцій з найвищими показниками?

Відповідь - так . Більше того, відносне впорядкування, задане балами, однакове.

f_regressionХуХ[:,i]у

ρi=(Х[:,i]-меан(Х[:,i]))(у-меан(у))стг(Х[:,i])стг(у).
Жi=ρi21-ρi2(н-2),
н=лен(у)centerFalseн-1SelectKBestкХз найвищими показниками. Немає послідовної програми чи нічого, а також значення p не використовується.

Ri2LinearRegressionХ[:,i]уRi2=ρi2

Ri2<Rj2ρi21-ρi2<ρj21-ρj2Жi<Жj.
f_regressionLinearRegressionSelectKBest

2
Нічого собі, тому `SelectKBest` не будує модель послідовно.
Hunle

Оскільки це варте, я погоджуюся з тлумаченням користувача43451. І я хотів би, щоб склеарн просто називав це кореляційним ранжуванням одиничних ознак. Для мене F-тест вводить поняття послідовних моделей, на які Вінкс згадував у своїй прийнятій відповіді.
MrDrFenner
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.