XGB-8: 加速故障时间的生存分析

什么是生存分析

生存分析(回归)模型时间到感兴趣事件的持续时间。生存分析是一种特殊的回归,与传统的回归任务不同,具体如下:

  • 标签始终为正值,因为不能等待负时间直到事件发生
  • 标签可能不是完全已知,或被截断,因为“测量时间需要时间”

第二点至关重要,更深入地研究一下。正如从名称中猜到的那样,生存分析的最早应用之一是对给定人群的死亡率进行建模。以NCCTG肺癌数据集为例。前8列表示特征,最后一列“生存时间”表示标签。

InstAgeSexph.ecogph.karnopat.karnomeal.calwt.lossTime to death (days)
37411901001175N/A306
368109090122515455
356109090N/A15[1010,+∞)
557119060115011210
1601010090N/A0883
12741150805130[1022,+∞)
76822706038410310

仔细看一下第三位患者的标签,是一个范围,而不是一个单一的数字。第三位患者的标签被称为被截断,因为由于某种原因实验者无法获得该标签的完整测量。可能的情况之一:患者在第1010天幸存并于第1011天走出诊所,因此他的死亡并没有直接观察到。另一种可能性:由于实验无法永远进行,实验被提前中断,无法观察到他的死亡。在任何情况下,他的标签是,这意味着他的死亡时间可以是任何大于1010的数字,例如2000、3000或10000。

有四种类型的截断:

  1. 未被截断:标签未被截断,以单一数字给出
  2. 右截断:标签的形式为,其中是下限
  3. 左截断:标签的形式为,其中是上限
  4. 区间截断:标签的形式为,其中和分别是下限和上限。

右截断是最常用的。

加速故障时间模型

加速失效时间(AFT) 模型是生存分析中最常用的模型之一。该模型的形式如下:

ln ⁡ Y = ⟨ w , x ⟩ + σ Z \ln{Y} = \langle \mathbf{w}, \mathbf{x} \rangle + \sigma Z lnY=w,x+σZ

其中:

  • x x x 是表示特征 R d R^d Rd的向量

  • w w w是由 d d d个系数组成的向量,每个系数对应一个特征

  • ⟨ ⋅ , ⋅ ⟩ \langle \cdot, \cdot \rangle ,是向量的点积

  • ln ⁡ ( ⋅ ) \ln{(\cdot)} ln()是自然对数

  • Y Y Y Z Z Z是随机变量

    • Y Y Y是输出标签
    • Z Z Z是已知概率分布的随机变量。常见的选择包括正态分布、逻辑分布和极值分布。直观地说, Z Z Z表示将预测值 ⟨ w , x ⟩ \langle \mathbf{w}, \mathbf{x} \rangle w,x从真实对数标签 ln ⁡ Y \ln{Y} lnY远离的“噪声”。
  • σ \sigma σ是缩放 Z Z Z的参数

请注意,该模型是线性回归模型 Y = ⟨ w , x ⟩ Y = \langle \mathbf{w}, \mathbf{x} \rangle Y=w,x的广义形式。为了使AFT与梯度提升一起工作,将模型修改为:

ln ⁡ Y = T ( x ) + σ Z \ln{Y} = \mathcal{T}(\mathbf{x}) + \sigma Z lnY=T(x)+σZ

其中 T ( x ) \mathcal{T}(\mathbf{x}) T(x)表示给定输入 x \mathbf{x} x的决策树集合的输出。由于 Z Z Z是随机变量,可以为表达式 ln ⁡ Y = T ( x ) + σ Z \ln{Y} = \mathcal{T}(\mathbf{x}) + \sigma Z lnY=T(x)+σZ定义一个似然性。因此,XGBoost 的目标是通过拟合良好的决策树集合 T ( x ) \mathcal{T}(\mathbf{x}) T(x)来最大化(对数)似然性。

如何使用

第一步是将标签表示为范围的形式,使得每个数据点都与两个数字关联,即标签的下界和上界。对于未被截断的标签,请使用形式的退化区间。

Censoring typeInterval formLower bound finite?Upper bound finite?
Uncensored[a, a]
Right-censored[a, +∞)
Left-censored[0, b]
Interval-censored[a, b]

将下界数值收集到一个数组中(y_lower_bound),将上界数值收集到另一个数组中(y_upper_bound)。通过调用xgboost.DMatrix.set_float_info(),将范围标签与数据矩阵对象关联起来:

import numpy as np
import xgboost as xgb

# 4-by-2 Data matrix
X = np.array([[1, -1], [-1, 1], [0, 1], [1, 0]])
dtrain = xgb.DMatrix(X)

# Associate ranged labels with the data matrix.
# This example shows each kind of censored labels.
#                         uncensored    right     left  interval
y_lower_bound = np.array([      2.0,     3.0,     0.0,     4.0])
y_upper_bound = np.array([      2.0, +np.inf,     4.0,     5.0])
dtrain.set_float_info('label_lower_bound', y_lower_bound)
dtrain.set_float_info('label_upper_bound', y_upper_bound)

params = {'objective': 'survival:aft',
          'eval_metric': 'aft-nloglik',
          'aft_loss_distribution': 'normal',
          'aft_loss_distribution_scale': 1.20,
          'tree_method': 'hist', 'learning_rate': 0.05, 'max_depth': 2}

bst = xgb.train(params, dtrain, num_boost_round=100,
                evals=[(dtrain, 'train')])

将目标参数objective设置为survival:aft,将评估指标设置eval_metricaft-nloglik,以便最大化AFT模型的对数似然。 (XGBoost实际上将最小化负对数似然,因此称为aft-nloglik

参数aft_loss_distribution对应于AFT模型中项 Z Z Z的分布,而aft_loss_distribution_scale对应于缩放因子 σ \sigma σ

目前,可以从三个概率分布中选择aft_loss_distribution

aft_loss_distributionProbability Density Function (PDF)
normal exp ⁡ ( − z 2 / 2 ) 2 π \dfrac{\exp{(-z^2/2)}}{\sqrt{2\pi}} 2π exp(z2/2)
logistic e z ( 1 + e z ) 2 \dfrac{e^z}{(1+e^z)^2} (1+ez)2ez
extreme e z e − exp ⁡ z e^z e^{-\exp{z}} ezeexpz
  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值