Relief法**是一种非常经典、有效的**特征选择算法
Relief法是一种非常经典、有效的特征选择算法,尤其适用于分类问题中发现重要特征。它能在不依赖模型的前提下,根据样本间的距离和类别差异,判断每个特征对分类任务的“区分能力”。
✅ 一、Relief法的核心思想
Relief 的目标是评估每个特征对区分“相似样本中是否属于同一类”的能力。
👇直观理解:
- 如果两个样本在特征 A 上很接近,但一个是“正类”,一个是“负类”,那说明 A 不能很好区分类别 → 权重要减小;
- 如果两个样本在特征 B 上很接近,且它们类别也相同,说明 B 是有用的 → 权重要增加。
✅ 二、算法流程(以二分类为例)
-
初始化:给每个特征一个初始权重 W [ A i ] = 0 W[A_i] = 0 W[Ai]=0
-
多次重复以下步骤(随机采样 m 个样本):
- 从数据集中随机选一个样本 x x x
- 找到:
- 距离 x x x 最近的同类样本(Hit)
- 距离 x x x 最近的异类样本(Miss)
- 对每个特征
A
A
A,更新其权重:
W [ A ] = W [ A ] − diff ( A , x , Hit ) 2 + diff ( A , x , Miss ) 2 W[A] = W[A] - \text{diff}(A, x, \text{Hit})^2 + \text{diff}(A, x, \text{Miss})^2 W[A]=W[A]−diff(A,x,Hit)2+diff(A,x,Miss)2
其中diff(A, x1, x2)
表示特征 A 在样本 x1 和 x2 之间的差异。
-
最后排序特征得分,选择前 k 个特征作为重要特征。
✅ 三、适用场景
场景 | 是否适用 |
---|---|
二分类任务 | ✅ 非常适合 |
多分类任务 | ✅ 使用 ReliefF 扩展版本 |
连续型特征 | ✅ 默认支持欧氏距离或归一化差值 |
高维数据特征筛选 | ✅ 高效,且不依赖分类模型 |
✅ 四、优点与缺点
优点 | 缺点 |
---|---|
不依赖具体模型 | 对噪声敏感 |
可处理连续/离散变量 | 对冗余特征无抑制作用 |
适合非线性特征关系 | 多分类或回归需用扩展版本 |
✅ 五、常见扩展版本
版本 | 说明 |
---|---|
ReliefF | 适用于多分类任务,同时选取多个 Hit 和 Miss |
RReliefF | 适用于回归任务 |
Iterative Relief | 多轮迭代提升稳定性 |
MultiSURF | 改进邻居搜索策略,提高鲁棒性 |
✅ 举个例子(伪代码):
for i in range(m): # 重复m次
xi = 随机选一个样本
Hit = 离xi最近的同类样本
Miss = 离xi最近的异类样本
for A in 所有特征:
W[A] -= (xi[A] - Hit[A])**2
W[A] += (xi[A] - Miss[A])**2