Feature-Selection

基於“F回歸”和基於“F回歸”選擇特徵的區別𝑅2R2R^2價值觀?

  • March 28, 2016

F-regression使用相同的方法比較特徵,將特徵與標籤單獨關聯並觀察價值?

我經常看到我的同事F regression在他們的機器學習管道中使用 for 特徵選擇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

如您所見,在這兩種情況下,第二個特徵排名最高,第一個特徵第二,第四個特徵第三,第三個特徵最後。

是否存在F_regression會給出不同結果的情況,或者會以某種方式對特徵進行不同的排名?

編輯: 總而言之,我想知道這兩個功能排名是否會給出不同的結果:

1)在將它們與結果單獨回歸時,通過它們的 F 統計量對特徵進行排名(這就是 sklearn 所做的)並且,

  1. 在將特徵與結果回歸時,按其 R 平方值對特徵進行排名,再次單獨進行。

TL:博士

F-regression如果只計算 F 統計量並選擇最佳特徵,則不會有任何區別。假設執行以下操作,排名可能會有所不同F-regression

  • 從一個常數模型開始,
  • 嘗試所有型號僅包含一個特徵並根據 F 統計量選擇最佳特徵
  • 嘗試所有型號包含由…組成加上其他功能並選擇最好的…

因為每次迭代的相關性都不相同。但是你仍然可以通過計算每一步的相關性來得到這個排名,那為什麼要多F-regression走一步呢?它做了兩件事:

  • 特徵選擇:如果要選擇機器學習管道中的最佳功能,您只關心準確性並有調整欠擬合/過擬合的措施,您可能只關心排名並且額外的計算沒有用。
  • 顯著性檢驗:如果您想了解研究中某些變量對輸出的影響,您可能需要建立一個線性模型,並且僅包括顯著改善模型的變量,相對於某些-價值。在這裡,F-regression派上用場。

什麼是 F 檢驗

F檢驗(維基百科)是一種比較模型改進的重要性的方法,關於添加新變量。有基本型號時可以使用和更複雜的模型,其中包含來自的所有變量還有更多。F 檢驗告訴您是否明顯優於,關於一個-價值。

為此,它使用殘差平方和作為誤差度量,並將誤差的減少與添加的變量數量和觀察次數進行比較(更多詳細信息參見Wikipedia)。添加變量,即使它們是完全隨機的,也有望通過添加另一個維度來幫助模型實現更低的誤差。目標是確定新功能是否真的有用,或者它們是否是隨機數但仍然有助於模型,因為它們添加了一個維度。


f_regression做什麼

請注意,我不熟悉 Scikit learn 的實現,但讓我們試著弄清楚它f_regression在做什麼。該文檔指出該過程是連續的。如果順序這個詞的含義與其他統計包中的相同,例如Matlab Sequential Feature Selection,我希望它會這樣進行:

  • 從一個常數模型開始,
  • 嘗試所有型號僅包含一個特徵並根據 F 統計量選擇最佳特徵
  • 嘗試所有型號包含由…組成加上其他功能並選擇最好的…

目前,我認為這是一個足夠接近的近似值來回答你的問題;相關性排名和排名之間是否存在差異f_regression

如果你從常量模型開始並嘗試找到只有一個特徵的最佳模型,,無論是使用f_regression還是基於相關性的方法,您都將選擇相同的特徵,因為它們都是線性相關性的度量。但如果你要從到然後到,你的得分會有所不同。

假設你有三個特徵,, 其中兩者和與輸出高度相關,但也相互高度相關,而僅與. 您的評分方法會將最好的分數分配給和,但順序方法可能不會。在第一輪中,它會選擇最好的特徵,比如, 去創造. 然後,它將評估兩者和為了. 作為與已選擇的特徵高度相關,它包含的大部分信息已經合併到模型中,因此程序可能會選擇. 雖然它與,它與殘差更相關,即還沒有解釋,比. 這就是您提出的兩個程序的不同之處。

您仍然可以通過按順序構建模型並測量每個附​​加特徵的增益差異而不是將它們與常量模型進行比較,從而用您的想法模擬相同的效果正如你現在所做的那樣。結果不會與f_regression結果不同。存在此功能的原因是提供此順序特徵選擇,並將結果轉換為可用於判斷顯著性的 F 度量。


F 檢驗的目標是提供顯著性水平。如果您想確保您所包含的功能對於您的-值,您使用 F 檢驗。如果你只想包括最好的功能,您只能使用相關性。


附加材料:這是對 F 檢驗的介紹,您可能會覺得有幫助

引用自:https://stats.stackexchange.com/questions/204141

comments powered by Disqus