“F regresyonuna” ve değerlerine dayalı özellik seçimi arasındaki fark nedir?


16

Özelliklerin F-regressionetiketle ilişkilendirilmesi ile aynı özellikleri kullanarak karşılaştırmak ve değerini gözlemlemek mi?R2

Sık sık meslektaşlarımın F regressionmakine öğrenme kanalında bir özellik seçimi için kullandığını gördüm sklearn:

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

Bazıları bana söyle - neden sadece etiket / bağımlı değişkenle ilişkilendirmekle aynı sonuçları veriyor?

F_regressionÖzellik seçiminde kullanmanın avantajı bana açık değil .

İşte benim kod: Ben gelen mtcarsveri kümesi kullanıyorum 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'])

Şüphelendiğiniz gibi, özelliklerin sıralaması tamamen aynıdır:

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

Gördüğünüz gibi, her iki durumda da ikinci özellik en yüksek, birinci özellik ikinci, dördüncü özellik üçüncü ve üçüncü özellik son.

F_regressionFarklı sonuçlar verecek veya özellikleri bir şekilde farklı sıralayacak bir durum var mı ?

DÜZENLEME: Özetlemek gerekirse, bu iki özellik sıralamasının farklı sonuçlar verip vermediğini bilmek istiyorum:

1) sonuçları ayrı ayrı gerilediğinde özellikleri F istatistiklerine göre sıralamak (sklearn'in yaptığı budur) VE,

2) sonuçla birlikte tekrar bireysel olarak regresyon yaparken özellikleri R-kare değerine göre sıralamak.


Bunu yayınladıktan hemen sonra SO aşağı indi, eminim herhangi bir dikkat alma şansını incitti.
Hunle

1
Sorunuz "F-regresyon" terimini içeriyor. Bu nedir ve regresyondan farkı nedir? ... (Düzenle :) Şu anda bana bir şey oluyor: nil-null'a karşı genel regresyon için bir F-testinden (veya belki de sadece bir F-istatistikinden) mı bahsediyorsunuz?
Glen_b -Mons Monica

F testinden bahsediyorum. Regresyonda, F-testi ve dolayısıyla F-istatistiği, regresör ile sonuç / etiket arasında hiçbir ilişki bulunmadığına dair sıfır hipotezini test etmek için kullanılır. sklearnaslında bir test olduğu için belki biraz yanıltıcı olan F-regresyonu olarak adlandırır. scikit-learn.org/stable/modules/generated/…
Hunle

Oradaki yorumunuz sadece bir regresör değişkeniniz olduğunu gösteriyor (bu durumda neden özellik seçimi hakkında konuşuyorsunuz?)
Glen_b -Restate Monica

2
Lütfen bu açıklamayı sorunuza göre düzenler misiniz?
Glen_b-Monica

Yanıtlar:


16

TP: DR

F-regressionSadece F istatistiğini hesaplar ve en iyi özellikleri seçerse fark olmaz . F-regressionAşağıdakileri yaptığını varsayarak, sıralamada bir fark olabilir :

  • Sabit bir modelle başlayın,M0
  • Sadece bir özellikten oluşan tüm modellerini deneyin ve F istatistiğine göre en iyisini seçinM1
  • Tüm modelleri deneyin oluşan artı bir diğer özelliği ve en iyi seçim ...M 1M2M1

Çünkü korelasyon her yinelemede aynı olmayacaktır. Ama yine de her adımda korelasyonu hesaplayarak bu sıralamayı elde edebilirsiniz, neden F-regressionek bir adım atıyor? İki şey yapar:

  • Özellik seçimi: Yalnızca doğrulukla ilgilendiğiniz ve eksik / fazla sığmayı ayarlamak için önlemler aldığınız bir Makine öğrenimi boru hattındaki en iyi özellikleri seçmek istiyorsanız, sadece sıralamayı önemseyebilirsiniz ve ek hesaplama yararlı değildir.k
  • Anlamlılık için test: Bir çalışmada bir çıkış üzerinde bazı değişkenlerin etkisini anlamak için çalışıyorsanız, bir doğrusal modeli oluşturmak istiyorum ve sadece değişkenleri içerebilir anlamlı bazı açısından modelinizi iyileştirilmesi, -değeri . İşte kullanışlı.pF-regression

F testi nedir

Bir F testi (Wikipedia) , bir modelin gelişiminin önemini yeni değişkenlerin eklenmesiyle karşılaştırmanın bir yoludur. Bir temel model olduğu zaman bunu kullanabilirsiniz ve daha karmaşık bir model tüm değişkenleri içeren, biraz daha ve. Eğer F-testi söyler önemli ölçüde daha iyi olduğunu bir göre, -değeri.M 1 M 0 M 1 M 0 pM0M1M0M1M0p

Bunu yapmak için, kalan kareler toplamını bir hata ölçüsü olarak kullanır ve hatadaki azalmayı eklenen değişken sayısı ve gözlem sayısı ile karşılaştırır ( Wikipedia hakkında daha fazla bilgi ). Değişken eklemenin, tamamen rastgele olsalar bile, başka bir boyut ekleyerek modelin her zaman daha düşük hata elde etmesine yardımcı olması beklenir. Amaç, yeni özelliklerin gerçekten yararlı olup olmadığını veya rastgele sayılar olup olmadığını anlamak, ancak yine de bir boyut ekledikleri için modele yardımcı olmaktır.


Ne vermez f_regressionyapmak

Scikit öğrenme uygulamasına aşina olmadığımı, ancak ne f_regressionyaptığını anlamaya çalışacağımı unutmayın . Belgeler prosedürü sıralı olduğunu belirtmektedir. Sıralı kelimesi, Matlab Sıralı Özellik Seçimi gibi diğer istatistiksel paketlerde olduğu anlamına gelirse , işte böyle devam etmesini beklerdim:

  • Sabit bir modelle başlayın,M0
  • Sadece bir özellikten oluşan tüm modellerini deneyin ve F istatistiğine göre en iyisini seçinM1
  • Tüm modelleri deneyin oluşan artı bir diğer özelliği ve en iyi seçim ...M 1M2M1

Şimdilik, sorunuzu cevaplamak için yeterince yakın bir yaklaşım olduğunu düşünüyorum; f_regressionkorelasyon sıralaması ile sıralama arasında bir fark var mı ?

Eğer sürekli modeli ile başlasa ve sadece bir özelliği ile en iyi modeli bulmaya , kullandığınız bakılmaksızın aynı özelliğini seçecektir onlar doğrusal bağımlılık ölçüsü her ikisi olarak veya ilişki dayalı bir yaklaşım. Eğer gitmek olsaydı Ama için ve ardından , sizin puanlama bir fark olacaktı.M 1 M 0 M 1 M 2M0M1f_regressionM0M1M2

Üç özelliklere sahip varsayalım hem ve yüksek çıkış ile ilişkilidir ederken, aynı zamanda son derece birbiriyle ilişkili sadece midly ile ilişkilidir . Puanlama yönteminiz en iyi skorları ve atayacaktır , ancak sıralı metot atanmayabilir . İlk turda, oluşturmak için gibi en iyi özelliği . Sonra, her iki değerlendirirsiniz ve için . Asx1,x2,x3x1x2yx3yx1x2x1M1x2x3M2x2zaten seçilmiş bir özellikle yüksek oranda ilişkilidir, içerdiği bilgilerin çoğu modele zaten dahil edilmiştir ve bu nedenle prosedür seçebilir . Daha az bağıntılı iken , daha bağıntılı artıkların , o kısmı daha şimdiden açıklamaz . Önerdiğiniz iki prosedür bu şekilde farklıdır.x3yx1x2

Yine de modelinizi sırayla oluşturarak ve şu anda yaptığınız gibi sabit modeliyle karşılaştırmak yerine her ek özellik için kazanç farkını ölçerek fikrinizle aynı etkiyi taklit edebilirsiniz . Sonuç, sonuçlardan farklı olmaz . Bu işlevin var olmasının nedeni, bu sıralı özellik seçimini sağlamaktır ve ek olarak sonucu, önemi değerlendirmek için kullanabileceğiniz bir F ölçüsüne dönüştürür.M0f_regression


F-testinin amacı anlamlılık düzeyi sağlamaktır. Dahil ettiğiniz özelliklerin değeriniz açısından önemli olduğundan emin olmak istiyorsanız, bir F testi kullanırsınız. Sadece en iyi özelliklerini eklemek istiyorsanız, sadece korelasyonu kullanabilirsiniz.pk


Ek materyal: Faydalı bulabileceğiniz F testine giriş


Tamam, şimdi bu özellik seçme yönteminin çoklu bağlantıya karşı nasıl koruyabildiğini görüyorum. Sanırım, çoklu bağlantıya duyarlı olmayan bir Rastgele Orman gibi bir şey çalıştırıyorsam, o zaman bu özellik seçim yöntemi uygulanabilir olmayabilir. thank you @Winks
Hunle

Korelasyonu yalnızca özellik öneminin bir ölçüsü olarak kullanmaya dikkat edin. Değişkenler arasındaki doğrusal bağımlılığı ölçer ve size bir özelliğin (belki de) doğrusal bir model için iyi olduğunu söyler . Bu, ağaçlar doğrusal ilişkilerden çok daha fazlasını öğrenebileceğinden, rastgele orman için yapabileceğiniz bir varsayım değildir. Korelasyon her şey değil (bkz. Anscombe Dataset (Wikipedia) .
Göz kırpmalar

Bahsettiğiniz " p-değerlerinde ufak bir sorun " nedir ? Ve her seferinde aynı verileri test ettiğimiz için birden fazla karşılaştırma sorunu var mı?
Hunle

Son bir şey (can sıkıcı olduğum için üzgünüm). Dediğiniz gibi "... ve sonra için puanlamanızda bir fark olacaktır". Bu ara adım için, değeri her zaman monoton olarak bir F dağılımındaki p-değeri ile ilişkili olacaktır, çünkü N ve k F-istatistiği hesaplanırken sabitlenmiştir ( stats.stackexchange.com/questions/50425/… ) . Bu yüzden sanırım F testi veya F dağılımına olan ihtiyacı anlamıyorum. Yapıyor musun? M2R2
Hunle

1
@Hunle Cevabımın sonuna F testi kullanma nedenini ekledim. Temel olarak, önemi önemsiyorsanız. -değerleri ilep ilgili ufak bir sorun söz konusu olduğunda , bunun yerinde olduğunuzu düşünüyorum. Aynı şeyi birkaç kez test ettiğimiz için bana geliyor ( zorunlu XKCD ). Bununla birlikte, F-testi pratikte kullanıldığından , her adımda tam olarak aynı şeyi test etmediğimiz için 1) düşündüğüm şeyi yapamaz 2) bir sorun olmayabilir .
Göz kırpmalar

17

Ne olduğunu anlamak için Scikit kaynak kodunu inceleyerek biraz zaman geçirdim f_regressionve gözlemlerimi buraya göndermek istiyorum.

Orijinal soru şuydu:

S : En yüksek skorlara sahip ilk 4 özelliği SelectKBest(f_regression, k = 4)kullanmak LinearRegression(fit_intercept=True)ve seçmekle aynı sonucu veriyor mu?

Cevap evet . Ayrıca, puanların verdiği göreli sıralama aynıdır.

İşte f_regressiongiriş matrisi ve dizi ne yapar . Her özelliği için : ile korelasyonu hesaplar Daha sonra F-istatistiği burada , örnek sayısı (küçük bir fark vardır) parametre ise ; o zaman ile çarpılır ). Bu F-değerleri daha sonra ilişkili p-değerleri ile birlikte döndürülür. Sonuç bir demettir (F-değerleri, p-değerleri). SonraXyX[:,i]y

ρi=(X[:,i]mean(X[:,i]))(ymean(y))std(X[:,i])std(y).
Fi=ρi21ρi2(n2),
n=len(y)centerFalsen1SelectKBestbu grubun ilk bileşenini alır (bunlar puanlar olacaktır), sıralar ve en yüksek puanlara sahip ilk özelliklerini seçer . Sıralı bir uygulama ya da herhangi bir şey yoktur ve p-değerleri de kullanılmaz.kX

Şimdi , ve için hesaplanan puan olsun . Bu, tek bir değişken üzerindeki bir gerilemedir, dolayısıyla . Sonra Dolayısıyla ve arasında bir fark yoktur . Biri sırayla bir model oluşturabilse de, bu böyle değildir . x [ : , i ] y R ' 2 i = ρ 2 I R, 2 ı < R, 2 Jρ 2 ıRi2LinearRegressionX[:,i]yRi2=ρi2

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

2
Vay, bu yüzden 'SelectKBest` ardışık olarak bir model oluşturmuyor.
Hunle

Değeri için, user43451'in yorumuna katılıyorum. Ve keşke sklearn buna tekil özelliklerin korelasyon sıralaması diyecektir. F-testi, benim için, Winks'ın kabul ettiği cevabında belirttiği gibi sıralı modeller kavramını getiriyor.
MrDrFenner
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.