我试图理解计算一个二元分类问题的特征选择的方差F值到底意味着什么。
据我所知,从基本统计的方差分析,我们应该有至少两个样本,我们可以计算变异数。那么,这是否意味着在Sklearn实现中,这些示例是从每个特性中提取的?对于这个问题,在特征选择的情况下,这些样本究竟代表了什么?
我试图建立一个非常简单的例子,我已经列出了以下,但我仍然难以理解的方差值真正的含义这里?我也很难理解如何用手计算这个,这通常能帮助我了解里面发生了什么。
在本例中,还款状态0意味着贷款得到偿还,1表示贷款违约。为了保持简单,我只提供了5行数据。
守则和结果如下:
发布于 2020-05-19 18:55:17
我们有两个类,我们希望为每个特性找到一个评分,上面写着“这个特性在两个类之间的区别有多好”。现在看看下面的数字。在x和y轴上有两个类红色和蓝色以及两个特性。
x特性是一个比y更好的分隔符,因为如果我们在x轴上投影数据,我们可以得到两个完全分离的类,但是如果我们将数据投影到y上,两个类在轴的中间有重叠(如果我们需要更多的说明)。
是什么使x比y更好?如图所示:
现在我们可以很容易地说\frac{distance\_between\_classes}{compactness\_of\_classes}是一个好分数!这个分数越高,特征就越能区分不同的类。
现在我们知道了,根据这个定义,good和bad特性意味着什么。让我们找一个数学公式来量化它。
让我们制定两个标准:
要计算上面的内容,您可以根据不同的类计算类间距离和类内变化的总和。我只做了一个特写。我们选择贷款吧。
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
对于分母,我们使用类内的平方和(它只是样本方差公式中的分子):
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评分是:
F-Score: 1,558,052,507 / 30,702,222 = 50.74
正如您在Python中所看到的那样。
希望能帮上忙。祝好运!
发布于 2021-05-06 17:42:24
f_classif计算的F-分数可以用图像中所示的公式手工计算:参考视频
直观地说,它是由输入特征(X)解释的输出特征(Y)的方差与输入特征(X)未解释的输出特征(Y)的方差的比率。
的学习代码
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
使用上述公式的
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
https://datascience.stackexchange.com/questions/74465
复制相似问题