☰
scikit-learn(sklearn)等渗回归(Isotonic Regression)详解:非降函数拟合的原理与实战
2026/10/13 12:22:54 网站建设 项目流程
  • 文档
  • 机器学习
  • 教程

【免费下载链接】sklearn-doc-zh

:book: [译] scikit-learn(sklearn) 中文文档

项目地址:https://gitcode.com/gh_mirrors/sk/sklearn-doc-zh
点击查看免费下载

本文围绕 scikit-learn 用户指南「1.15 等渗回归(Isotonic Regression)」章节展开,讲解该算法在 scikit-learn 中文文档中的定位、数学定义、底层求解思路、核心 API 参数以及可运行的实战示例。读完本文,你将掌握sklearn.isotonic.IsotonicRegression的使用方法、单调约束回归的适用场景,以及它与概率校准(docs/master/17.md)之间的内在联系。

一、等渗回归是什么:用户指南中的定位

在本仓库(sklearn-doc-zh,scikit-learn 官方文档中文翻译版,对应 0.21.3 版本)的用户指南目录中,「等渗回归」是监督学习章节的第 15 个子主题,编号为 1.15(见 docs/master/SUMMARY.md 与 README.md 的目录结构)。中文译名在不同章节存在细微差别:本章标题译为「等式回归」,而概率校准章节(docs/master/17.md)中使用「保序回归」,示例索引(docs/examples/README.md)中使用「序回归」。它们对应的英文术语均为 Isotonic Regression(等渗回归、保序回归),本文章统一采用「等渗回归」。

等渗回归解决的问题本质上是:在"输出必须单调(非降或非增)"的约束下,找到与观测数据最接近的拟合值。它的核心思想是:不假设数据服从某种参数化形式(如直线、多项式),而是直接输出一组满足单调性约束的最优估计值,这些值在插值意义上构成一条分段线性函数。

二、数学定义:优化目标与约束条件

IsotonicRegression类对数据进行非降函数拟合。它求解如下带约束的优化问题:

优化目标(最小化加权平方误差):

$$\min \sum_i w_i \left( y_i - \hat{y}_i \right)^2$$

约束条件(单调非降):

$$\hat{y}_{min} = \hat{y}_1 \le \hat{y}_2 \le \cdots \le \hat{y}n = \hat{y}{max}$$

其中:

  • 每一个权重 $w_i$ 都是严格正数(strictly positive);
  • 每一个观测值 $y_i$ 都是任意实数(可以是负值、零或正值,不要求非负)。

从几何上看,这个问题就是:给定一组带权重的数据点 $(y_i, w_i)$,在要求输出序列 $\hat{y}$ 单调不减的前提下,使加权平方误差尽可能小。其最优解是一个由"平方误差接近的不减元素"组成的向量——也就是说,$\hat{y}$ 既要尽量贴近原始数据 $y$(最小化误差),又要严格满足 $\hat{y}_1 \le \hat{y}_2 \le \cdots \le \hat{y}_n$ 的次序约束(尊重单调性)。

三、为什么输出是分段线性函数:算法直觉

等渗回归的输出"实际上形成一条分段线性函数"。这源于求解该优化问题的经典算法——PAVA(Pool Adjacent Violators Algorithm,池相邻违例算法):

  1. 从原始序列出发,相邻数据点之间如果出现"违例"(即 $\hat{y}i > \hat{y}{i+1}$,违反非降约束),则将该相邻两个点合并为一个块(pool);
  2. 合并后的块用该块内数据的加权平均值作为共同估计值(保序均值);
  3. 反复检查合并后新序列是否仍存在违例,若有则继续合并相邻块;
  4. 直到整个序列满足单调约束为止。

最终得到的估计值在每一个"块"内部取常数(加权均值),而块与块之间的估计值逐步上升,因此在插值视角下,相邻块之间的估计用线性连接,整体呈现为一条单调不减的分段线性函数。这也是示例图中"阶梯 + 折线"形态的由来。

四、核心 API 与参数详解

以本仓库对应的 scikit-learn 0.21.3 官方文档为准,sklearn.isotonic.IsotonicRegression的构造参数与主要方法如下:

参数 / 方法取值与默认值作用
increasingbool或'auto',默认True决定拟合函数的单调方向:True为单调递增(非降),False为单调递减(非增);'auto'时根据数据自动选择方向
y_minfloat或None,默认None预测值下限:对分段线性函数施加下界截断
y_maxfloat或None,默认None预测值上限:对分段线性函数施加上界截断
out_of_bounds{'nan', 'clip', 'raise'},默认'nan'指定对超出训练数据范围的新样本如何进行外推:'nan'返回缺失值、'clip'截断到边界值、'raise'抛出异常
fit(X, y, sample_weight=None)——拟合模型;sample_weight可传入每样本权重,对应目标函数中的 $w_i$,要求严格正数;返回self
predict(T)——对新数据T进行预测,输出满足单调约束的分段线性取值
transform(T)——与predict输出一致,作为 Transformer 接口以配合Pipeline使用

关键点:目标函数中的权重 $w_i$ 在代码层面由fit的sample_weight参数传入,且文档明确规定权重必须为严格正数——这与数学定义中"每一个 $w_i$ 是 strictly 正数"的假设完全对应,是保证优化问题良定义(避免除零与退化)的前提。

五、实战:一个完整可运行的示例

下面是一个最小化的完整示例:对带噪声的单调递增数据拟合等渗回归,并与原始数据对比。

import numpy as np from sklearn.isotonic import IsotonicRegression # 1. 构造单调递增的含噪数据 rng = np.random.RandomState(0) X = np.arange(20) * 0.1 y = X + rng.normal(scale=0.2, size=len(X)) # 2. 创建等渗回归模型:强制单调递增,输出裁剪到观测范围 iso = IsotonicRegression( increasing=True, # 非降拟合 y_min=None, # 不设下界 y_max=None, # 不设上界 out_of_bounds='clip' # 新样本越界时截断到边界 ) # 3. 拟合(也可通过 sample_weight 传入严格正数的样本权重) iso.fit(X, y) # 4. 预测:结果严格满足 y_hat[0] <= y_hat[1] <= ... <= y_hat[n-1] y_pred = iso.predict(X) # 5. 对比:拟合值与原始值的加权平方误差之和最小,且序列单调不减 print(np.all(np.diff(y_pred) >= 0)) # True

运行后可以验证:y_pred序列严格单调不减,同时与原始含噪数据保持最小加权平方误差——这正是等渗回归"在单调性约束下最优逼近"的核心特性。

如果需要拟合单调递减关系,只需设置increasing=False;若不确定数据方向,可设置increasing='auto'让模型自动判断。在实际业务中若已知预测值必须落在某个物理区间(例如概率、分数必须在 0~1 之间),可配合y_min、y_max进行截断。

六、典型应用场景

1. 概率校准(与 1.16 章节联动)

等渗回归在 scikit-learn 中最经典的应用之一是概率校准。在 docs/master/17.md(1.16 概率校准)中明确说明:scikit-learn 提供两种概率校准方法——基于 Platt 的 Sigmoid 模型的参数化方法,以及基于等渗回归(保序回归)的非参数方法(sklearn.isotonic模块)。使用时通过CalibratedClassifierCV(method='isotonic')指定:

from sklearn.calibration import CalibratedClassifierCV from sklearn.svm import SVC clf = CalibratedClassifierCV(SVC(), method='isotonic', cv=5) clf.fit(X_train, y_train)

等渗回归在这里的作用是:将分类器输出的原始分数,通过一条单调(非降)的分段线性映射重新校准为更接近真实概率的输出,且不引入参数化假设,因此对分布形态更宽容。注意 17.md 同时提醒:校准所用数据应与模型拟合数据不相交,避免过拟合导致的校准偏差。

2. 需要单调性约束的回归问题

当领域知识明确要求"输入越大,输出不应越小"(或反之)时——例如剂量-效应曲线、评分卡建模、价格与需求关系等——可以直接使用IsotonicRegression作为带单调约束的非参数回归器,无需手工设计满足单调性的参数化函数。

3. 与其他回归方法的差异

  • 线性回归 / 岭回归:假设全局线性关系,参数化、外推能力强,但无法表达任意形状的单调关系;
  • 等渗回归:无参数化形式假设,只施加单调约束,拟合形状完全由数据驱动,输出为分段线性函数;代价是不适合强外推,out_of_bounds参数决定了越界样本的处理方式。

七、仓库中的示例与可视化资源

本仓库在示例索引(docs/examples/README.md)中收录了对应的官方示例「序回归」(plot_isotonic_regression),其缩略图如下:

该示例与本文第二节、第三节描述的数学定义和分段线性输出形态直接对应:生成含噪数据后,用IsotonicRegression拟合出单调非降的分段线性曲线,直观展示"阶梯合并 + 折线连接"的效果。文章开头的大图(docs/master/img/87ae31ef4f2e7b4385b9a25aa8fed533.jpg)正是用户指南 1.15 章节内嵌的同一示例输出图。

八、小结

  • 等渗回归(Isotonic Regression)在满足单调非降(或非增)约束的前提下,最小化加权平方误差,输出由"平方误差接近的不减元素"组成的向量,并形成分段线性函数;
  • 权重 $w_i$ 严格为正,观测值 $y_i$ 可为任意实数,对应fit的sample_weight参数;
  • 核心 API 包括increasing、y_min、y_max、out_of_bounds四个构造参数与fit/predict/transform方法;
  • 最典型的应用是与CalibratedClassifierCV(method='isotonic')配合完成非参数概率校准,详见 docs/master/17.md;
  • 完整示例与可视化见示例索引 docs/examples/README.md 中的「序回归」条目。
  • 文档
  • 机器学习
  • 教程

【免费下载链接】sklearn-doc-zh

:book: [译] scikit-learn(sklearn) 中文文档

项目地址:https://gitcode.com/gh_mirrors/sk/sklearn-doc-zh
点击查看免费下载

相关推荐

上一篇:ICE.js插件系统终极指南:如何快速扩展框架功能
下一篇:神经风格迁移终极指南:内容与风格权重的黄金平衡法则

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询