- 文档
- 机器学习
- 教程
【免费下载链接】sklearn-doc-zh
:book: [译] scikit-learn(sklearn) 中文文档
本文围绕 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,池相邻违例算法):
- 从原始序列出发,相邻数据点之间如果出现"违例"(即 $\hat{y}i > \hat{y}{i+1}$,违反非降约束),则将该相邻两个点合并为一个块(pool);
- 合并后的块用该块内数据的加权平均值作为共同估计值(保序均值);
- 反复检查合并后新序列是否仍存在违例,若有则继续合并相邻块;
- 直到整个序列满足单调约束为止。
最终得到的估计值在每一个"块"内部取常数(加权均值),而块与块之间的估计值逐步上升,因此在插值视角下,相邻块之间的估计用线性连接,整体呈现为一条单调不减的分段线性函数。这也是示例图中"阶梯 + 折线"形态的由来。
四、核心 API 与参数详解
以本仓库对应的 scikit-learn 0.21.3 官方文档为准,sklearn.isotonic.IsotonicRegression的构造参数与主要方法如下:
| 参数 / 方法 | 取值与默认值 | 作用 |
|---|---|---|
increasing | bool或'auto',默认True | 决定拟合函数的单调方向:True为单调递增(非降),False为单调递减(非增);'auto'时根据数据自动选择方向 |
y_min | float或None,默认None | 预测值下限:对分段线性函数施加下界截断 |
y_max | float或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) 中文文档
相关推荐
Umi-OCR离线OCR实战指南:截图识别到批量转文字的4个步骤
Umi OCR离线OCR实战指南:截图识别到批量转文字的4个步骤 Umi OCR 是一款免费、开源的离线 OCR 软件:不联网、解压即用,适合需要整理文字资料的
OCR桌面应用ML-For-Beginners 回归模块(2-Regression):以北美南瓜价格为案例的 Scikit-learn 回归建模实战
ML For Beginners 回归模块(2 Regression):以北美南瓜价格为案例的 Scikit learn 回归建模实战 本篇基于 ML For
教程机器学习人工智能逻辑斯蒂回归(Logistic Regression)核心原理与医疗数据实战案例详解
逻辑斯蒂回归(Logistic Regression)核心原理与医疗数据实战案例详解 一、痛点直击:二分类问题的有效工具? 你是否在面对二分类问题时陷入选择困境
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考