Apakah membandingkan fitur menggunakan fitur F-regression
yang sama dengan yang berhubungan dengan label secara individual dan mengamati nilai ?
Saya sering melihat rekan-rekan saya menggunakan pilihan F regression
untuk 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_regression
pemilihan fitur.
Ini kode saya: Saya menggunakan mtcars
dataset 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_regression
akan 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.
sklearn
menyebutnya sebagai F-regresi, yang mungkin agak menyesatkan karena sebenarnya ini adalah tes. scikit-learn.org/stable/modules/generated/…Jawaban:
TL: DR
Tidak akan ada perbedaan jika
F-regression
hanya menghitung statistik F dan memilih fitur terbaik. Mungkin ada perbedaan dalam peringkat, dengan asumsiF-regression
melakukan hal berikut: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-regression
perlu langkah tambahan? Ia melakukan dua hal:F-regression
Apa itu uji-F
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_regression
dilakukanPerhatikan bahwa saya tidak terbiasa dengan implementasi Scikit belajar, tetapi mari kita coba mencari tahu apa yang
f_regression
sedang 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:Untuk saat ini, saya pikir ini perkiraan yang cukup dekat untuk menjawab pertanyaan Anda; apakah ada perbedaan antara peringkat
f_regression
dan peringkat berdasarkan korelasi.f_regression
f_regression
Materi tambahan: Berikut ini adalah pengantar untuk uji-F yang mungkin bermanfaat bagi Anda
sumber
Saya menghabiskan waktu mencari kode sumber Scikit untuk memahami apa yang
f_regression
terjadi, dan saya ingin memposting pengamatan saya di sini.Pertanyaan aslinya adalah:
T : Apakah
SelectKBest(f_regression, k = 4)
menghasilkan hasil yang sama dengan menggunakanLinearRegression(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_regression
center
False
SelectKBest
LinearRegression
f_regression
LinearRegression
SelectKBest
sumber