前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >XGB-8: Xgboost加速故障时间的生存分析

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

作者头像
用户3578099
发布2024-05-30 14:49:35
1340
发布2024-05-30 14:49:35
举报
文章被收录于专栏:AI科技时讯AI科技时讯

什么是生存分析

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

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

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

Inst

Age

Sex

ph.ecog

ph.karno

pat.karno

meal.cal

wt.loss

Time to death (days)

3

74

1

1

90

100

1175

N/A

306

3

68

1

0

90

90

1225

15

455

3

56

1

0

90

90

N/A

15

[1010,+∞)

5

57

1

1

90

60

1150

11

210

1

60

1

0

100

90

N/A

0

883

12

74

1

1

50

80

513

0

[1022,+∞)

7

68

2

2

70

60

384

10

310

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

有四种类型的截断:

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

右截断是最常用的。

加速故障时间模型

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

其中:

  • 是表示特征的向量
  • 是由个系数组成的向量,每个系数对应一个特征
  • 是向量的点积
  • 是自然对数
  • 和是随机变量
    • 是输出标签
    • 是已知概率分布的随机变量。常见的选择包括正态分布、逻辑分布和极值分布。直观地说,表示将预测值从真实对数标签远离的“噪声”。
  • 是缩放的参数

请注意,该模型是线性回归模型的广义形式。为了使AFT与梯度提升一起工作,将模型修改为:

其中表示给定输入的决策树集合的输出。由于是随机变量,可以为表达式定义一个似然性。因此,XGBoost 的目标是通过拟合良好的决策树集合来最大化(对数)似然性。

如何使用

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

Censoring type

Interval form

Lower 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(),将范围标签与数据矩阵对象关联起来:

代码语言:javascript
复制
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模型中项的分布,而aft_loss_distribution_scale对应于缩放因子 。

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI科技时讯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是生存分析
  • 加速故障时间模型
  • 如何使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档