首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何理解Python中特征选择的ANOVA-F。与f_classif一起学习f_classif

如何理解Python中特征选择的ANOVA-F。与f_classif一起学习f_classif
EN

Data Science用户
提问于 2020-05-19 14:50:02
回答 2查看 17.9K关注 0票数 12

我试图理解计算一个二元分类问题的特征选择的方差F值到底意味着什么。

据我所知,从基本统计的方差分析,我们应该有至少两个样本,我们可以计算变异数。那么,这是否意味着在Sklearn实现中,这些示例是从每个特性中提取的?对于这个问题,在特征选择的情况下,这些样本究竟代表了什么?

我试图建立一个非常简单的例子,我已经列出了以下,但我仍然难以理解的方差值真正的含义这里?我也很难理解如何用手计算这个,这通常能帮助我了解里面发生了什么。

在本例中,还款状态0意味着贷款得到偿还,1表示贷款违约。为了保持简单,我只提供了5行数据。

守则和结果如下:

EN

回答 2

Data Science用户

回答已采纳

发布于 2020-05-19 18:55:17

直觉

我们有两个类,我们希望为每个特性找到一个评分,上面写着“这个特性在两个类之间的区别有多好”。现在看看下面的数字。在xy轴上有两个类红色和蓝色以及两个特性。

x特性是一个比y更好的分隔符,因为如果我们在x轴上投影数据,我们可以得到两个完全分离的类,但是如果我们将数据投影到y上,两个类在轴的中间有重叠(如果我们需要更多的说明)。

是什么使xy更好?如图所示:

  • 根据x的说法,两类之间相距甚远。
    • 数学翻译:x上的类分发方式之间的距离大于y

  • 根据x的说法,类的散落不是互相的,而是根据y的。这意味着根据x,类更紧凑,所以更有可能不与另一个类重叠。
    • 数学翻译:根据x,每个类的方差都小于y

现在我们可以很容易地说\frac{distance\_between\_classes}{compactness\_of\_classes}是一个好分数!这个分数越高,特征就越能区分不同的类。

现在我们知道了,根据这个定义,goodbad特性意味着什么。让我们找一个数学公式来量化它。

数学(在论文上做)

让我们制定两个标准:

  • 类分布平均值之间的距离是分子。考虑到人口因素,我认为统计意义(需要统计学家的参考!)。
  • 一个类似于类的样本方差的概念是分母。在这里,我们没有用(sample\_population -1)除以平方和,而是把所有的(sample\_population -1)s相加,用它们除以最后的值。

现在回到数据

要计算上面的内容,您可以根据不同的类计算类间距离和类内变化的总和。我只做了一个特写。我们选择贷款吧。

代码语言:javascript
运行
复制
Class 1: [5000, 18000]
Class 2: [47500, 45600, 49500]

Mean of all points: (47500 + 45600 + 49500 + 5000 + 18000) / 5 = 33120
Mean 1: (5000 + 18000) / 2 = 11500
Mean 2: (47500 + 45600 + 49500) / 3 = 47533
Numerator: 2 x (11500 - 33120)^2 + 3 x (47533 - 33120)^2 = 1,558,052,507

对于分母,我们使用类内的平方和(它只是样本方差公式中的分子):

代码语言:javascript
运行
复制
SSW 1: (5000 - 11500)^2 + (18000 - 11500)^2 = 84,500,000 
SSW 2: (47500 - 47533)^2 + (45600 - 47533)^2 + (49500 - 47533)^2 = 7,606,667
Na = 2, Nb = 3 --> (Na - 1) + (Nb - 1) = 1 + 2 = 3
Denominator: (84,500,000 + 7,606,667)/3 = 30,702,222 

现在特征贷款的F评分是:

代码语言:javascript
运行
复制
F-Score: 1,558,052,507 / 30,702,222 = 50.74

正如您在Python中所看到的那样。

Note

  • 我试着用简单的方式解释。例如,样本方差的分母称为自由度,但为了简单起见,我跳过了这些术语。
  • 只需要理解主要的想法。方法越多,内部方差越小,特征越好。您也可以自己制定它(但是您将不再有p值了;)
  • 找到P-价值观和理解它的含义,是我跳过的另一个故事。

希望能帮上忙。祝好运!

票数 26
EN

Data Science用户

发布于 2021-05-06 17:42:24

f_classif计算的F-分数可以用图像中所示的公式手工计算:参考视频

直观地说,它是由输入特征(X)解释的输出特征(Y)的方差与输入特征(X)未解释的输出特征(Y)的方差的比率。

示例:

使用f_classif

的学习代码

代码语言:javascript
运行
复制
from sklearn.feature_selection import f_classif
import numpy as np
X = np.array([5000, 18000, 47500, 45600, 49500]).reshape(-1,1)
y = np.array([1,1,0,0,0])
F,pval = f_classif(X,y)
print(F,pval)

50.74816155

使用上述公式的

验证

代码语言:javascript
运行
复制
X = np.array([5000, 18000, 47500, 45600, 49500])
X1 = np.array([5000, 18000])
X2 = np.array([47500, 45600, 49500])
mu = np.mean(X)                                   # overall mean
mu1 = np.mean(X1)                                 # mean of X1
mu2 = np.mean(X2).                                # mean of X2
SSm = np.sum(((X-mu)**2))                         # SS(mean)
SSf = np.sum((X1-mu1)**2) + np.sum((X2-mu2)**2)   # SS(fit)
p_fit = 2
p_mean = 1
F = ((SSm - SSf)*(X.shape[0]-p_fit))/((p_fit - p_mean)*SSf)
print(F)

50.74

票数 3
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/74465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档