特征选择三剑客:Fisher Score、卡方检验与互信息的深度解析与实战指南
在数据科学和机器学习的日常工作中,我们常常面对成百上千个特征。这些特征中,有些是预测目标的“神兵利器”,有些则是混淆视听的“噪声制造者”。如何从这纷繁复杂的特征海洋中,精准地筛选出最具价值的子集,是提升模型性能、降低计算成本、增强模型可解释性的关键一步。这就是特征选择技术的核心使命。
今天,我们将聚焦于特征选择领域的三位“过滤式”明星选手:Fisher Score、卡方检验和互信息。它们不依赖于特定的机器学习模型,仅通过统计指标对特征进行独立评分和排序,因此计算效率高,常作为数据预处理的“先锋部队”。但这三位“剑客”的“剑法”各有千秋,适用的“战场”(数据类型)也截然不同。盲目使用,可能事倍功半;精准匹配,方能事半功倍。
本文将带你深入剖析这三种方法的数学内核、适用边界,并通过Python代码实战,在经典的鸢尾花数据集上,让你亲眼见证它们如何“拔剑出鞘”,筛选特征。无论你是刚入门的数据分析师,还是希望优化流程的算法工程师,这篇文章都将为你提供一份清晰、实用、可操作的对比指南。
1. 核心思想与数学原理:三位剑客的“剑法”拆解
过滤式特征选择的核心,在于为每个特征计算一个与目标变量相关的“得分”。得分越高,通常意味着该特征与目标变量的关联性越强,区分能力越好。但“关联性”的定义,正是三种方法的分水岭。
1.1 Fisher Score:追求“内聚外分”的方差大师
Fisher Score 的核心思想非常直观:一个好的特征,应该能让不同类别的样本尽可能分开(类间方差大),同时让同一类别的样本尽可能聚集(类内方差小)。这就像优秀的班级管理,既要让不同班级的学生特点鲜明(类间差异大),又要让同一个班级的学生团结一致(类内差异小)。
其数学公式清晰地体现了这一思想。对于第 k 个特征,其Fisher Score J(k) 定义为类间方差 S_B(k) 与类内方差 S_W(k) 的比值:
J(k) = S_B(k) / S_W(k)
其中:
- 类间方差
S_B(k):衡量不同类别中心(均值)的差异。计算时,对每个类别,取其样本均值与总体均值的差值的平方,并按该类样本数加权求和。差异越大,说明该特征在不同类别间的区分度越好。 - 类内方差
S_W(k):衡量同一类别内部样本的离散程度。计算每个样本与其所属类别均值的差值的平方,再对所有样本平均。离散度越小,说明该特征在同一类别内的稳定性越高。
注意:Fisher Score 在计算时隐含了数据服从正态分布的假设,且最初是为二分类问题设计的。对于多分类,通常的处理方式是计算“一对多”或“一对一”的Fisher Score后再进行综合(如取平均)。它对异常值也比较敏感,因为方差计算容易受极端值影响。
下面是一个简单的计算示例,假设我们有一个包含两个类别的微型数据集:
| 样本 | 特征A | 类别 |
|---|---|---|
| 1 | 2 | 0 |
| 2 | 4 | 1 |
| 3 | 7 | 0 |
| 4 | 9 | 0 |
| 5 | 18 | 1 |
- 类别0的均值: (2+7+9)/3 = 6
- 类别1的均值: (4+18)/2 = 11
- 总体均值: (2+4+7+9+18)/5 = 8
- 类间方差
S_B: (3/5)(6-8)² + (2/5)(11-8)² = 2.4 + 3.6 = 6.0 - 类内方差
S_W: [(2-6)² + (7-6)² + (9-6)² + (4-11)² + (18-11)²] / 5 = 124/5 = 24.8 - Fisher Score: 6.0 / 24.8 ≈ 0.242
这个值本身的大小需要与其他特征比较,值越大,特征越重要。
1.2 卡方检验:检验“是否有关”的独立性判官
卡方检验 原本是统计学中用于检验两个分类变量之间是否独立的假设检验方法。在特征选择中,我们将其应用于分类特征和分类目标变量。它的核心思想是:检验特征与目标变量的分布是否独立。如果独立,则特征无用;如果不独立,则特征可能对预测目标有帮助。
其基本步骤是构建一个列联表

1万+

被折叠的 条评论
为什么被折叠?



