You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用RandomSurvivalForest训练时提示y需为结构化数组错误求解

问题原因
  • 你的y参数不符合sksurv的输入要求:sksurv所有模型的y都要求是包含两个字段的结构化numpy数组,第一个字段为布尔型的事件发生标识(对应你的below列),第二个字段为数值型的事件/截尾时间(对应你的day_of_quarter列),你当前的代码仅将事件标识列作为y输入,自然会触发格式校验错误。
  • 你的特征矩阵X设置错误:当前你把生存时间列day_of_quarter作为唯一特征输入,生存分析的特征矩阵应该是除了事件标识、生存时间之外,你用于预测生存结局的自变量集合,同时X需要为二维数组格式。
修复方案

步骤1:构造符合要求的y结构化数组

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sksurv.ensemble import RandomSurvivalForest

# 读取数据,除了事件、时间列外,还要把你要用到的建模特征列一起读进来
df = data.select(col('below'),col('day_of_quarter'), *[你的其他建模特征列]).toPandas()

# 构造sksurv要求的结构化y数组
y = np.zeros(len(df), dtype=[('event', bool), ('time', float)])
y['event'] = df['below'].astype(bool).values
y['time'] = df['day_of_quarter'].values

步骤2:构造特征矩阵X

X不能包含below和day_of_quarter两列,需要替换为你实际用于建模的特征,如果只有单个特征,需要用双括号取列保证是二维格式:

# 示例:如果用col1、col2作为建模特征
X = df[['col1', 'col2']]

如果当前是测试场景没有其他特征,可以临时造一个测试特征验证代码逻辑:

df['test_feature'] = np.random.randn(len(df))
X = df[['test_feature']]

步骤3:切分数据集并训练

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=0)

rsf = RandomSurvivalForest(n_estimators=1000,
                           min_samples_split=10,
                           min_samples_leaf=15,
                           max_features="sqrt",
                           n_jobs=-1,
                           random_state=0)
rsf.fit(X_train, y_train)

内容的提问来源于stack exchange,提问作者kmox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:15:03