Isotonic Regression(保序回归)的数学原理与拟合过程
Isotonic Regression(保序回归)是一种非参数回归方法,其核心思想是在保持预测值单调性(非递减或非递增)约束的前提下,最小化预测值与观测值之间的误差。它不假设数据服从特定的函数形式(如线性),但要求拟合的函数是单调的。下面我将详细讲解其数学原理、问题描述、求解算法(PAVA)以及计算过程。
1. 问题描述
假设我们有 \(n\) 个观测数据点 \((x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\),其中 \(x_i\) 是自变量(通常有序,如时间、剂量),\(y_i\) 是因变量(如响应值)。我们假设 \(x_i\) 已经按升序排列(即 \(x_1 \leq x_2 \leq \dots \leq x_n\))。如果 \(x_i\) 相等,则需特殊处理。
Isotonic Regression 的目标是找到一组拟合值 \(\hat{y}_1, \hat{y}_2, \dots, \hat{y}_n\),满足以下约束和优化目标:
- 单调性约束:拟合值必须是非递减的,即 \(\hat{y}_1 \leq \hat{y}_2 \leq \dots \leq \hat{y}_n\)。如果需要非递增,只需将 \(y_i\) 取负号或调整顺序。
- 优化目标:最小化拟合值与观测值之间的平方误差和(或绝对误差和,常用平方误差)。即求解:
\[ \min_{\hat{y}_1 \leq \hat{y}_2 \leq \dots \leq \hat{y}_n} \sum_{i=1}^n (y_i - \hat{y}_i)^2 \]
这是一个带线性不等式约束的凸优化问题,可通过Pool Adjacent Violators Algorithm (PAVA) 高效求解。
2. 数学原理与直观理解
Isotonic Regression 的拟合结果可以理解为在单调约束下对数据的“平滑”。其关键性质包括:
- 保序性:拟合值 \(\hat{y}_i\) 的顺序与 \(x_i\) 的顺序一致。
- 分段常数性:最优解 \(\hat{y}_i\) 是分段常数函数,即在某些连续区间上,拟合值相同。这是因为如果相邻点的拟合值不同,则它们之间的约束是严格的(\(\hat{y}_i < \hat{y}_{i+1}\)),但若允许相等,则多个点可合并为一个“块”(block)。
- 块平均性质:每个“块”内的拟合值等于该块内所有观测值 \(y_i\) 的平均值。这是最小化平方误差的自然结果。
为什么是分段常数?
假设在某个区间上,单调约束不是紧的(即可以取不同值),但为了最小化平方误差,我们会尽量让拟合值接近观测值。如果相邻观测值的顺序违反了单调性(即 \(y_i > y_{i+1}\)),则约束会强制它们相等或调整,从而形成常数块。
3. 求解算法:PAVA(Pool Adjacent Violators Algorithm)
PAVA 是一种贪心算法,通过不断合并违反单调性的相邻块,并计算块内平均值,直到整个序列满足单调性。以下是详细步骤。
步骤1:初始化
将每个数据点视为一个独立的块(block)。每个块 \(B_k\) 包含:
- 起始索引 \(s_k\) 和结束索引 \(e_k\)(初始时每个块只包含一个点)。
- 块内观测值的平均值 \(\mu_k = y_{s_k}\)。
- 块的大小 \(w_k = 1\)。
初始时,我们有 \(n\) 个块:\(B_1, B_2, \dots, B_n\),满足 \(s_k = e_k = k\),\(\mu_k = y_k\)。
步骤2:检查并合并违反单调性的相邻块
从左到右扫描块序列,检查相邻块 \(B_k\) 和 \(B_{k+1}\) 是否满足单调性约束:\(\mu_k \leq \mu_{k+1}\)。
如果违反(即 \(\mu_k > \mu_{k+1}\)),则合并这两个块为一个新块,并更新新块的信息:
- 新块的索引范围:\(s_{\text{new}} = s_k\),\(e_{\text{new}} = e_{k+1}\)。
- 新块的大小:\(w_{\text{new}} = w_k + w_{k+1}\)。
- 新块的平均值:\(\mu_{\text{new}} = \frac{w_k \mu_k + w_{k+1} \mu_{k+1}}{w_k + w_{k+1}}\)(加权平均)。
合并后,用新块替换原来的两个块,块总数减1。
步骤3:回溯检查
合并后,新块的平均值可能小于其左侧相邻块的平均值(因为平均值被拉低了)。因此,需要向左回溯,检查新块与左侧块的单调性。如果违反(\(\mu_{\text{left}} > \mu_{\text{new}}\)),则继续合并左侧块与新块,并重复回溯,直到整个序列满足从左到右单调非递减。
回溯的必要性:
例如,假设有三个块,平均值分别为 5、2、4。
- 第一轮检查块1和块2:5 > 2,合并为块A,平均值 = (5+2)/2 = 3.5。
- 现在块A与块3比较:3.5 ≤ 4,似乎满足。但注意,原始序列是 5、2、4,合并后为 3.5、4,单调性成立。然而,如果左侧有更高值,可能需要继续合并。
实际上,更严格的PAVA实现会在每次合并后立即回溯。常见做法是:在扫描过程中,一旦合并发生,就从合并后的块开始向前(左)检查,确保与之前所有块满足单调性。
步骤4:重复扫描直到无违反
继续从前往后扫描整个块序列,重复步骤2-3,直到没有违反单调性的相邻块为止。此时,每个块内的所有点共享相同的拟合值(即块平均值)。
步骤5:输出拟合值
对于每个数据点 \(i\),其拟合值 \(\hat{y}_i\) 等于它所在块的平均值 \(\mu_k\)。
4. 一个具体计算示例
假设观测值序列 \(y = [5, 3, 4, 2, 6]\)(已按 \(x\) 排序)。目标:找到非递减拟合值 \(\hat{y}\)。
初始化:5个块,平均值分别为 5, 3, 4, 2, 6。
-
扫描1:
- 比较块1(5)和块2(3):5 > 3,合并。新块A平均值 = (5+3)/2 = 4。块序列变为:[A(4), 4, 2, 6]。
- 回溯:A左侧无块,继续。
- 比较A(4)和块3(4):4 ≤ 4,满足。
- 比较块3(4)和块4(2):4 > 2,合并。新块B平均值 = (4+2)/2 = 3。序列变为:[A(4), B(3), 6]。
- 回溯:比较A(4)和B(3):4 > 3,合并A和B。新块C平均值 = (24 + 23)/4 = (8+6)/4 = 3.5。序列变为:[C(3.5), 6]。
- 比较C(3.5)和块5(6):3.5 ≤ 6,满足。
扫描结束,当前块:[C(3.5), 6]。
-
最终拟合值:
- 前4个点(索引1-4)在块C中,拟合值均为 3.5。
- 第5个点在块D(即原块5)中,拟合值为 6。
所以,\(\hat{y} = [3.5, 3.5, 3.5, 3.5, 6]\)。
验证单调性:3.5 ≤ 3.5 ≤ 3.5 ≤ 3.5 ≤ 6,满足。平方误差和 = (5-3.5)² + (3-3.5)² + (4-3.5)² + (2-3.5)² + (6-6)² = 2.25 + 0.25 + 0.25 + 2.25 + 0 = 5.0。
5. 扩展与讨论
- 非递增情况:若需要拟合值非递增,可将 \(y_i\) 取负号,应用PAVA后再取负回来,或直接修改比较方向。
- 权重:PAVA可扩展为加权版本,每个点有权重 \(w_i\),最小化加权平方和 \(\sum w_i (y_i - \hat{y}_i)^2\),合并时计算加权平均。
- 与线性回归关系:若数据本身单调,Isotonic Regression 可能接近线性拟合;若强烈非单调,则拟合为阶梯函数。
- 应用场景:校准分类器概率输出(保证概率随得分单调)、剂量反应分析、任何需要单调拟合的领域。
6. 总结
Isotonic Regression 通过单调约束下的最小二乘拟合,提供了一种灵活的非参数建模工具。PAVA算法通过合并违反单调性的相邻块,并以块内平均值作为拟合值,高效求得最优分段常数解。其核心在于将全局优化问题分解为局部块的不断调整,直至整个序列满足单调性。