作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
看来我的代码与 scikit-survival 文档的格式相同。
data_y = df[['sensored', 'sensored_2']].to_numpy()
data_x = df.drop(['sensored', 'sensored_2'], axis = 1)
data_y
array([[True, 481],
[True, 424],
[True, 519],
...,
[True, 13],
[True, 96],
[True, 6]], dtype=object)
根据 scikit-survial 文档,数组是在加载时从数据集创建的。我正在尝试从数据框创建我的数组,但当我尝试使数组适合模型时,标题中继续出现错误。
sksurv.linear_model import CoxPHSurvivalAnalysis
estimator = CoxPHSurvivalAnalysis()
estimator.fit(df_dummy_3, data_y)
ValueError: y must be a structured array with the first field being a binary
class event indicator and the second field the time of the event/censoring
文档:
from sksurv.datasets import load_veterans_lung_cancer
data_x, data_y = load_veterans_lung_cancer()
data_y
array([( True, 72.), ( True, 411.), ( True, 228.), ( True, 126.),
( True, 118.), ( True, 10.), ( True, 82.), ( True, 110.),
( True, 314.), (False, 100.), ( True, 42.), ( True, 8.),
( True, 144.), (False, 25.), ( True, 11.), ( True, 30.),
( True, 384.), ( True, 4.), ( True, 54.), ( True, 13.),
(False, 123.), (False, 97.), ( True, 153.), ( True, 59.),
( True, 117.), ( True, 16.), ( True, 151.), ( True, 22.),
( True, 56.), ( True, 21.), ( True, 18.), ( True, 139.),
( True, 20.), ( True, 31.), ( True, 52.), ( True, 287.),
( True, 18.), ( True, 51.), ( True, 122.), ( True, 27.),
( True, 54.), ( True, 7.), ( True, 63.), ( True, 392.),
( True, 10.), ( True, 8.), ( True, 92.), ( True, 35.),
( True, 117.), ( True, 132.), ( True, 12.), ( True, 162.),
( True, 3.), ( True, 95.), ( True, 177.), ( True, 162.),
( True, 216.), ( True, 553.), ( True, 278.), ( True, 12.),
( True, 260.), ( True, 200.), ( True, 156.), (False, 182.),
( True, 143.), ( True, 105.), ( True, 103.), ( True, 250.),
( True, 100.), ( True, 999.), ( True, 112.), (False, 87.),
(False, 231.), ( True, 242.), ( True, 991.), ( True, 111.),
( True, 1.), ( True, 587.), ( True, 389.), ( True, 33.),
( True, 25.), ( True, 357.), ( True, 467.), ( True, 201.),
( True, 1.), ( True, 30.), ( True, 44.), ( True, 283.),
( True, 15.), ( True, 25.), (False, 103.), ( True, 21.),
( True, 13.), ( True, 87.), ( True, 2.), ( True, 20.),
( True, 7.), ( True, 24.), ( True, 99.), ( True, 8.),
( True, 99.), ( True, 61.), ( True, 25.), ( True, 95.),
( True, 80.), ( True, 51.), ( True, 29.), ( True, 24.),
( True, 18.), (False, 83.), ( True, 31.), ( True, 51.),
( True, 90.), ( True, 52.), ( True, 73.), ( True, 8.),
( True, 36.), ( True, 48.), ( True, 7.), ( True, 140.),
( True, 186.), ( True, 84.), ( True, 19.), ( True, 45.),
( True, 80.), ( True, 52.), ( True, 164.), ( True, 19.),
( True, 53.), ( True, 15.), ( True, 43.), ( True, 340.),
( True, 133.), ( True, 111.), ( True, 231.), ( True, 378.),
( True, 49.)],
dtype=[('Status', '?'), ('Survival_in_days', '<f8')])
我一直在尝试更改上面数组的数据类型,但没有成功。任何帮助将不胜感激。
最佳答案
fit 方法要求 y 数据是结构化数组。在我们的例子中,这是一个元组数组,其中第一个元素是状态,第二个元素是存活天数。
为了将我们的数据置于 fit 方法所期望的格式中,我们需要首先将数组的元素从列表(例如 [True, 424])转换为元组(例如 (True, 424))。之后,我们可以将我们的元组分组到结构化数组中。下面我将展示一个例子:
假设我们有以下数据框:
df = pd.DataFrame([[True, 123.],[True, 481.], [True, 424.], [True, 519.]], columns=['sensored', 'sensored_2'])
我们像你一样得到 y:
data_y = df[['sensored', 'sensored_2']].to_numpy()
data_y
array([[True, 123.0],
[True, 481.0],
[True, 424.0],
[True, 519.0]], dtype=object)
以我们期望的格式放置 data_y 的一种方法是使用其元素创建一个元组列表,然后创建一个结构化数组:
#List of tuples
aux = [(e1,e2) for e1,e2 in data_y]
#Structured array
new_data_y = np.array(aux, dtype=[('Status', '?'), ('Survival_in_days', '<f8')])
new_data_y
array([( True, 123.), ( True, 481.), ( True, 424.), ( True, 519.)],
dtype=[('Status', '?'), ('Survival_in_days', '<f8')])
然后,您可以使用该数据来拟合您的模型:
from sksurv.linear_model import CoxPHSurvivalAnalysis
estimator = CoxPHSurvivalAnalysis()
estimator.fit(df_dummy, new_data_y)
关于python - 值错误 : y must be a structured array with the first field being a binary class event indicator and the second field the time of the event/censorin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68869020/
我是一名优秀的程序员,十分优秀!