Perbedaan antara memilih fitur berdasarkan “regresi F” dan berdasarkan nilai

15

Apakah membandingkan fitur menggunakan fitur F-regressionyang sama dengan yang berhubungan dengan label secara individual dan mengamati nilai ?R2

Saya sering melihat rekan-rekan saya menggunakan pilihan F regressionuntuk fitur dalam pipa pembelajaran mesin mereka dari sklearn:

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

Beberapa tolong beri tahu saya - mengapa itu memberikan hasil yang sama seperti hanya menghubungkannya dengan label / variabel dependen?

Tidak jelas bagi saya keuntungan menggunakan F_regressionpemilihan fitur.

Ini kode saya: Saya menggunakan mtcarsdataset dari 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'])

Seperti yang diduga, peringkat fitur-fiturnya persis sama:

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

Seperti yang Anda lihat, fitur kedua berada di peringkat tertinggi, fitur pertama adalah kedua, fitur keempat adalah ketiga, dan fitur ketiga terakhir, dalam kedua kasus.

Apakah pernah ada kasus di mana F_regressionakan memberikan hasil yang berbeda, atau akan memberi peringkat fitur yang berbeda dalam beberapa cara?

EDIT: Untuk meringkas, saya ingin tahu apakah kedua peringkat fitur ini pernah memberikan hasil yang berbeda:

1) peringkat fitur oleh F-statistik mereka ketika regresi mereka dengan hasilnya secara individual (inilah yang sklearn lakukan) DAN

2) memeringkat fitur berdasarkan nilai R-kuadratnya ketika melakukan regresi dengan hasilnya, sekali lagi secara individual.

Hunle
sumber
SO turun segera setelah saya memposting ini, yang saya yakin ada kemungkinan mendapat perhatian.
Hunle
1
Pertanyaan Anda mengandung istilah "F-regresi". Apa itu dan apa bedanya dengan regresi? ... (Sunting :) Sesuatu terjadi pada saya sekarang: apakah Anda mengacu pada uji-F (atau mungkin hanya statistik-F) untuk keseluruhan regresi terhadap nol-nol (yaitu intersep saja)?
Glen_b -Reinstate Monica
Saya mengacu pada uji-F. Dalam regresi, uji-F dan karenanya F-statistik, digunakan untuk menguji hipotesis nol bahwa tidak ada hubungan antara regressor dan hasil / label. sklearnmenyebutnya sebagai F-regresi, yang mungkin agak menyesatkan karena sebenarnya ini adalah tes. scikit-learn.org/stable/modules/generated/…
Hunle
Komentar Anda di sana menyarankan Anda hanya memiliki satu variabel regressor (dalam hal ini mengapa Anda berbicara tentang pemilihan fitur?)
Glen_b -Reinstate Monica
2
Bisakah Anda mengedit penjelasan itu ke dalam pertanyaan Anda?
Glen_b -Reinstate Monica

Jawaban:

15

TL: DR

Tidak akan ada perbedaan jika F-regressionhanya menghitung statistik F dan memilih fitur terbaik. Mungkin ada perbedaan dalam peringkat, dengan asumsi F-regressionmelakukan hal berikut:

  • M0
  • M1
  • M2M1

Karena korelasinya tidak akan sama pada setiap iterasi. Tetapi Anda masih bisa mendapatkan peringkat ini hanya dengan menghitung korelasi pada setiap langkah, jadi mengapa F-regressionperlu langkah tambahan? Ia melakukan dua hal:

  • k
  • pF-regression

Apa itu uji-F

M0M1M0M1M0p

Untuk melakukannya, ia menggunakan jumlah sisa kuadrat sebagai ukuran kesalahan, dan membandingkan pengurangan kesalahan dengan jumlah variabel yang ditambahkan, dan jumlah pengamatan (lebih detail di Wikipedia ). Menambahkan variabel, bahkan jika mereka benar-benar acak, diharapkan selalu membantu model mencapai kesalahan yang lebih rendah dengan menambahkan dimensi lain. Tujuannya adalah untuk mengetahui apakah fitur-fitur baru benar - benar bermanfaat atau jika mereka adalah angka acak tetapi masih membantu model karena mereka menambahkan dimensi.


Apa yang f_regressiondilakukan

Perhatikan bahwa saya tidak terbiasa dengan implementasi Scikit belajar, tetapi mari kita coba mencari tahu apa yang f_regressionsedang dilakukan. The dokumentasi menyatakan bahwa prosedur yang berurutan. Jika kata sekuensial berarti sama dengan dalam paket statistik lainnya, seperti Seleksi Fitur Sekuensial Matlab , berikut adalah cara saya mengharapkannya untuk melanjutkan:

  • M0
  • M1
  • M2M1

Untuk saat ini, saya pikir ini perkiraan yang cukup dekat untuk menjawab pertanyaan Anda; apakah ada perbedaan antara peringkat f_regressiondan peringkat berdasarkan korelasi.

M0M1f_regressionM0M1M2

x1,x2,x3x1x2yx3yx1x2x1M1x2x3M2x2x3yx1x2

M0f_regression


pk


Materi tambahan: Berikut ini adalah pengantar untuk uji-F yang mungkin bermanfaat bagi Anda

Mengedipkan mata
sumber
OK, sekarang saya melihat bagaimana metode pemilihan fitur ini dapat melindungi dari multikolinieritas. Saya kira jika saya menjalankan sesuatu seperti Hutan Acak, yang tidak rentan terhadap multikolinieritas, maka metode pemilihan fitur ini mungkin tidak berlaku. terima kasih @Winks
Hunle
Waspadalah menggunakan korelasi hanya sebagai ukuran kepentingan fitur. Ini mengukur ketergantungan linear antara variabel, dan memberi tahu Anda fitur (mungkin) baik untuk model linier . Ini bukan asumsi yang bisa Anda buat untuk hutan acak, karena pohon bisa belajar lebih banyak dari hubungan linear. Korelasi tidak semua ada (lihat Anscombe Dataset (Wikipedia) .
Winks
Apa " sedikit masalah dengan nilai-p " yang Anda maksud? Dan, apakah ada masalah beberapa perbandingan karena kami menguji data yang sama setiap kali?
Hunle
M2R2
1
p
16

Saya menghabiskan waktu mencari kode sumber Scikit untuk memahami apa yang f_regressionterjadi, dan saya ingin memposting pengamatan saya di sini.

Pertanyaan aslinya adalah:

T : Apakah SelectKBest(f_regression, k = 4)menghasilkan hasil yang sama dengan menggunakan LinearRegression(fit_intercept=True)dan memilih 4 fitur pertama dengan skor tertinggi?

Jawabannya adalah ya . Selain itu, pemesanan relatif yang diberikan oleh skor adalah sama.

f_regressionXyX[:,i]y

ρi=(X[:,i]mean(X[:,i]))(ymean(y))std(X[:,i])std(y).
Fi=ρi21ρi2(n2),
n=len(y)centerFalsen1SelectKBestkXdengan skor tertinggi. Tidak ada aplikasi berurutan atau apa pun, dan nilai-p juga tidak digunakan.

Ri2LinearRegressionX[:,i]yRi2=ρi2

Ri2<Rj2ρi21ρi2<ρj21ρj2Fi<Fj.
f_regressionLinearRegressionSelectKBest
pengguna43451
sumber
2
Wow, jadi `SelectKBest` tidak membangun model secara berurutan.
Hunle
Untuk apa nilainya, saya setuju dengan interpretasi user43451. Dan, saya berharap sklearn hanya akan menyebutnya peringkat korelasi fitur tunggal. F-test, bagi saya, membawa gagasan tentang model berurutan seperti yang disinggung Winks dalam jawaban yang diterima.
MrDrFenner