基於“F回歸”和基於“F回歸”選擇特徵的區別𝑅2R2R^2價值觀?
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 所做的)並且,
- 在將特徵與結果回歸時,按其 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 檢驗的介紹,您可能會覺得有幫助