「F回帰」と


14

フィーチャをF-regressionラベルと個別に関連付け、値を観察するのと同じ方法を使用してフィーチャを比較していますか?R2

私は同僚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

ご覧のとおり、どちらの場合も、2番目の機能が最高ランク、1番目の機能が2番目、4番目の機能が3番目、3番目の機能が最後です。

F_regression異なる結果をもたらしたり、何らかの方法で機能を異なるランク付けしたりするケースはありますか?

編集: 要約すると、機能のこれら2つのランキングが異なる結果を与えるかどうかを知りたいです:

1)結果を個別に回帰する際に、F統計によって機能をランク付けする(これがsklearnの機能です)および、

2)結果で回帰する場合、R乗値で特徴をランク付けします。


これを投稿した後すぐにダウンしたので、注目される可能性があります。
ハンレ

1
質問に「F回帰」という用語が含まれています。それは何であり、回帰とどう違うのですか?...(編集:)今、私に何かが起こります:あなたは、null-null(つまり、インターセプトのみ)に対する全体的な回帰のF検定(または単にF統計)に言及していますか?
Glen_b -Reinstateモニカ

私はF検定に言及しています。回帰では、F検定、したがってF統計を使用して、リグレッサーと結果/ラベルの間に関係がないという帰無仮説を検定します。 sklearnこれは実際にはテストであるため、F回帰と呼ばれます。scikit-learn.org/stable/modules/generated/...
Hunle

そこのコメントは、リグレッサー変数が1つしかないことを示唆しています(その場合、なぜ機能選択について話しているのですか?)
Glen_b -Reinstate Monica

2
あなたの質問にその説明を編集してください。
Glen_b -Reinstateモニカ

回答:


12

TL:DR

F-regressionF統計量を計算し、最適な機能を選択するだけであれば、違いはありません。F-regression次のことを前提として、ランキングに違いがある場合があります。

  • 定数モデル、M 0から始めますM0
  • 1つの特徴のみで構成されるすべてのモデル試して、F統計に基づいて最適なものを選択してくださいM1
  • M 1に加えて1つの他の機能で構成されるすべてのモデル試して、最高のものを選んでください...M2M1

相関は各反復で同じではないためです。しかし、各ステップで相関関係を計算するだけでこのランキングを取得できますが、なぜF-regression追加のステップが必要なのでしょうか?次の2つのことを行います。

  • 機能の選択:機械学習パイプラインで最適な機能を選択する場合、精度のみを重視し、アンダーフィット/オーバーフィットを調整する手段がある場合、ランキングのみを重視し、追加の計算は役に立ちません。k
  • 有意性のテスト:スタディの出力に対するいくつかの変数の影響を理解しようとしている場合、線形モデルを構築し、一部のp値に関してモデルを大幅に改善している変数のみを含めることができます。。ここで、重宝します。pF-regression

F検定とは

F検定(ウィキペディア)は、新しい変数の添加に関して、モデルの改善の重要性を比較する方法です。基本的なモデルがある場合、あなたはそれを使用することができますと、より複雑なモデルM 1、すべての変数が含まれ、M 0とより多くのいくつかを。F検定では、p値に関して、M 1M 0よりも大幅に優れているかどうかがわかります。M0M1M0M1M0p

これを行うために、誤差の尺度として残差平方和を使用し、誤差の減少と追加された変数の数、および観測の数を比較します(詳細についてはWikipediaを参照)。変数が完全にランダムである場合でも、変数を追加すると、別の次元を追加することでモデルがより低いエラーを達成するのに常に役立つことが期待されます。目標は、新しい機能が本当に役立つのか、それとも乱数であるが次元を追加するためにモデルを助けるのかを把握することです。


何をf_regressionする

私はScikitの学習の実装に精通していませんが、何f_regressionをしているかを理解してみてください。ドキュメントには、手順がシーケンシャルであると述べています。「順次」という言葉が、Matlab Sequential Feature Selectionなどの他の統計パッケージと同じ意味である場合、次のように進めます。

  • 定数モデル、M 0から始めますM0
  • 1つの特徴のみで構成されるすべてのモデル試して、F統計に基づいて最適なものを選択してくださいM1
  • M 1に加えて1つの他の機能で構成されるすべてのモデル試して、最高のものを選んでください...M2M1

今のところ、あなたの質問に答えるのに十分な近似値だと思います。のランキングf_regressionと相関によるランキングに違いがありますか。

定数モデルから始めて、1つの特徴M 1のみを持つ最適なモデルを見つけようとする場合、線形依存性の尺度であるため、使用するか相関ベースのアプローチかにかかわらず、同じ特徴を選択します。あなたがから行くことにした場合でも、M 0M 1、その後にM 2、あなたの得点に差があるでしょう。M0M1f_regressionM0M1M2

次の3つの機能を持っていると仮定し、の両方、X 1及びX 2は、高い出力と相関され、Yが、だけでなく、高度に対応付けをX 3のみmidlyと相関している、Y。スコアリングの方法では、最高のスコアがx 1およびx 2に割り当てられますが、シーケンシャルな方法では割り当てられない場合があります。最初のラウンドでは、M 1を作成するために最適な機能、たとえばx 1を選択します。次に、両方を評価しますx1,x2,x3x1x2yx3yx1x2x1M1M 2の場合は x 2および x 3X 2は高度に既に選択した特徴と相関され、それに含まれる情報のほとんどは既にモデルに組み込まれるので、手順が選択可能性があり、X 3。それは以下に相関している間に、Y、これはそれ以上に相関している残差、部分 xは1よりも、既に説明していない X 2。これが、提案する2つの手順の違いです。x2x3M2x2x3yx1x2

M0f_regression


pk


追加資料:これは、役立つと思われるF検定の概要です。


さて、この特徴選択方法が多重共線性をどのように防ぐことができるかがわかりました。ランダムフォレストのように、多重共線性の影響を受けにくいものを実行している場合、この機能選択方法は適用できない可能性があります。ありがとう@Winks
ハンレ

機能の重要性の尺度としてのみ相関を使用することに注意してください。変数間の線形依存性を測定し、線形モデルに適した機能(可能性がある)を示します。木は線形関係よりもはるかに多くを学ぶことができるため、これはランダムフォレストに対して行うことができる仮定ではありません。相関関係はすべて(そこに表示されていないAnscombeデータセット(ウィキペディア)
ウィンク

参照する「p値のわずかな問題」とは何ですか?そして、毎回同じデータでテストしているので、複数の比較の問題がありますか?
ハンレ

M2R2

1
p

16

何が起こるかを理解するためにScikitのソースコードに目を通すのに少し時間を費やしましf_regressionた。ここに私の意見を投稿したいと思います。

元の質問は:

Q:最も高いスコアを持つ最初の4つの機能をSelectKBest(f_regression, k = 4)使用LinearRegression(fit_intercept=True)および選択した場合と同じ結果が得られますか?

答えはイエスです。さらに、スコアによって与えられる相対的な順序は同じです。

f_regressionXyX[:,i]y

ρi=(X[:,i]mean(X[:,i]))(ymean(y))std(X[:,i])std(y).
Fi=ρi21ρi2(n2),
n=len(y)centerFalsen1SelectKBestkX最高のスコアで。シーケンシャルアプリケーションなどはなく、p値も使用されません。

Ri2LinearRegressionX[:,i]yRi2=ρi2

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

2
わあ、 `SelectKBest`はモデルを順番に構築しません。
ハンレ

価値があることについては、user43451の解釈に同意します。そして、sklearnが単に単一の機能の相関ランキングと呼ぶことを望みます。Fテストは、私にとって、ウィンクスが受け入れられた答えで示唆したように、連続モデルの概念をもたらします。
-MrDrFenner
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.