基于“ F回归”和基于


15

比较特征是否与将特征分别F-regression与标签关联并观察值相同?R2

我经常看到我的同事F regression在他们的机器学习管道中使用进行特征选择sklearn

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

有些人请告诉我-为什么它给出与将其与label / depedendent变量相关联时相同的结果?

对我来说,尚不清楚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所做的),并且

2)再次将要素与结果回归时,按要素的R平方值对要素进行排名。


我在发布此消息后立即下跌了,这肯定会伤害它引起任何注意的机会。
Hunle '16

1
您的问题包含术语“ F回归”。那是什么?它与回归有何不同?...(编辑:)刚才我发生了什么:您是针对Full检验(或可能只是F统计量)针对nil-null(即仅拦截)进行整体回归吗?
Glen_b-恢复莫妮卡

我指的是F检验。在回归中,F检验和F统计量用于检验零假设,即回归变量与结果/标签之间没有关系。 sklearn将其称为F回归,由于它实际上是测试,因此可能有点误导。scikit-learn.org/stable/modules/generated/...
Hunle

您在此处的评论建议您只有一个回归变量(在这种情况下,为什么要谈论功能选择?)
Glen_b -Reinstate Monica

2
您能把那个解释修改成您的问题吗?
Glen_b-恢复莫妮卡

Answers:


15

TL:DR

如果F-regression只计算F统计量并选择最佳特征,就不会有任何区别。假设F-regression执行以下操作,则排名可能有所不同:

  • 从恒定模型M0
  • 尝试所有仅由一项功能组成的模型,并根据F统计量选择最佳模型M1
  • 尝试由和其他功能组成的所有模型,并选择最佳模型。M 1M2M1

由于相关性在每次迭代时都不相同。但是您仍然可以通过仅计算每个步骤的相关性来获得此排名,那么为什么F-regression还要执行额外的步骤呢?它有两件事:

  • 特征选择:如果您想在机器学习管道中选择最佳特征,那么您只在乎准确性并采取措施调整欠拟合/过拟合,您可能只在乎排名,而额外的计算则无用。k
  • pF-regression

什么是F检验

M0M1M0M1M0p

为此,它使用残差平方和作为误差度量,并将误差的减少与所添加变量的数量以及观察的数量进行比较(更多详细信息,请参见Wikipedia)。即使变量是完全随机的,添加变量也总是可以通过添加另一个维度来帮助模型实现更低的误差。目的是确定新功能是否真正有用,或者它们是否是随机数,但由于它们增加了维而仍然对模型有帮助。


f_regression什么

请注意,我对Scikit学习实现并不熟悉,但请尝试弄清楚f_regression正在做什么。该文件指出,该过程是连续的。如果“顺序”一词的含义与其他统计软件包(例如Matlab顺序特征选择)中的含义相同,则我希望它继续进行:

  • M0
  • M1
  • M2M1

现在,我认为这已经足够接近您的问题了。的排名f_regression与按相关性排名之间有区别吗?

M0M1f_regressionM0M1M2

x1,x2,x3x1x2yx3yx1x2x1M1x2x3M2x2x3yx1x2

M0f_regression


pk


附加材料:这是F检验简介,您可能会觉得有帮助


好的,现在我知道这种特征选择方法如何防止多重共线性。我想如果我正在运行像“随机森林”这样的东西,该东西不易受到多重共线性的影响,那么这种特征选择方法可能不适用。谢谢@Winks
Hunle '16

当心仅将相关性用作特征重要性的度量。它测量变量之间的线性相关性,并告诉您一个特征(可能是)对于线性模型而言是好的。这不是您可以为随机森林做出的假设,因为树木可以学到的东西远多于线性关系。相关性还不全(请参阅Anscombe Dataset(Wikipedia)。)
Winks

什么是“ 与p值小问题,你是指”?而且,由于我们每次都在同一数据上进行测试,因此存在多个比较的问题吗?
Hunle '16

M2R2

1
p

16

我花了一些时间浏览Scikit源代码,以了解f_regression它的作用,我想在这里发表自己的看法。

最初的问题是:

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不会按顺序构造模型。
Hunle

对于它的价值,我同意user43451的解释。而且,我希望sklearn可以将其称为单个功能的相关性排名。对我而言,F检验引入了顺序模型的概念,就像Winks在他接受的答案中提到的那样。
MrDrFenner
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.