使用卡方对连续特征进行特征选择

机器算法验证 卡方检验 特征选择 scikit-学习 连续数据
2022-03-09 08:12:59

我正在研究单变量特征选择。一种经常被描述的方法是查看一个χ2-测试。但是,我很困惑这如何适用于连续变量。

1. 怎么可能χ2- 连续变量特征选择的测试工作? 我一直认为这个测试适用于计数。在我看来,您必须以某种方式对数据进行分类,但结果取决于您选择的分类。我也对连续变量和分类变量的组合如何工作感兴趣。

2. 这个测试是规模相关的问题吗? 我的第二个担心是测试依赖于规模。这对于没有测量单位的计数来说不是问题,但它会对以某些测量单位测量的连续变量的特征选择产生很大影响(参见示例)。

例子

对于具有测量单位的变量,显示检验与尺度相关:

让我们看一下原始示例:http ://scikit-learn.org/stable/modules/feature_selection.html

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
iris = load_iris()
X, y = iris.data, iris.target
selector = SelectKBest(chi2, k=2)
selector.fit(X, y)
print(selector.pvalues_)
print(selector.get_support())

输出:

[False False True True]
[4.47e-03 1.657e-01 5.94e-26 2.50e-15]

现在让我们假设我们记录的第一列和第三列不是以厘米为单位,而是以毫米为单位。显然,这不会改变类类型对萼片和花瓣长度的依赖性。但是,p 值变化很大,因此,选定的列也会发生变化:

X[:, 0] = 10*X[:, 0]
X[:, 2] = 10*X[:, 2]
selector.fit(X, y)
print(selector.pvalues_)
print(selector.get_support())

输出

[True False True False] 
[3.23e-024 1.66e-001 5.50e-253 2.50e-015]

如果我还以 mm 而不是 cm 记录第二列,那也会给我一个显着的 p 值。

我相信这与该方法没有实现任何分箱但将所有值相加并将其与预期总和进行比较这一事实有关。此外,我相信分子中的事实χ2是平方的,而分母不增加问题。

1个回答

我认为您将数据本身(可能是连续的)与当您谈论数据时实际上谈论的是离散的样本这一事实混淆了。

χ2测试(在维基百科模型选择中χ2标准) 是检查采样数据独立性的测试。即当您有两个(或更多)数据源(即不同的特征),并且您只想选择相互独立的特征时,您可以通过拒绝空假设(即数据样本是相关的)来测试它,如果遇到这样一个样本的概率(在零假设下),即 p 值,小于某个阈值(例如,p < 0.05)。

所以现在为你的问题,

  1. χ2test 仅适用于分类数据,因为您必须计算每个类别中样本的出现次数才能使用它,但正如我上面提到的,当您使用它时,您实际上手头有样本,所以您可以做一件事是根据阈值将您的样本分为几类(例如,cat1:x[th1<x<th2],cat2:x[th2<x<th3]等)并计算属于每个类别的所有样本。
  2. 至于尺度 - 当你离散化你的样本时,你显然必须使用相同的尺度,否则它没有任何意义,但是当你进行χ2测试本身,正如您正确指出的那样,您正在处理计数,因此它们无论如何都不会有任何刻度。

干杯。