我想使用 mlr 对 R 中的右删失生存数据运行 xgboost。xgboost 代码列出了一个目标函数survival:cox,其中表示:
生存:cox:右删失生存时间数据的 Cox 回归(负值被视为右删失)。
我正在使用的 Mlr 2 仅支持回归和分类学习器的 xgboost。如果我尝试使用 xgboost 的内置回归学习器,它会使用 mse 作为评估指标。所以我尝试将指标更改为 cindex 并收到错误
措施:cindex cindex
FUN(X[[i]], ...) 中的错误:措施 cindex 不支持任务类型 regr!
所以然后我尝试为 xgboost 编写一个新的生存学习器,它只是回归学习器的副本,但将“Regr”更改为“Surv”,但当然它期望目标有 2 列 - 时间和状态 - 并且不接受负时间,而 xgboost 只期望一列 - 时间 - 并假设任何具有负时间值的行都会被审查。
以下是我尝试过的。有什么办法可以在 mlr2 或 mlr3 中实现这一点吗?
data(veteran)
veteran_xgb <- veteran
veteran_xgb <- veteran_xgb[c("trt", "karno", "diagtime", "age", "prior", "time")]
veteran_xgb$time <- ifelse(veteran$status==1, veteran$time, -veteran$time)
xgb.task <- makeRegrTask(id="XGBOOST_VET", data = veteran_xgb, target="time")
xgb_learner <- makeLearner(id="xgboost",
cl="regr.xgboost", …Run Code Online (Sandbox Code Playgroud) 我有以下数据框:
import pandas as pd
import numpy as np
raw_data = {
'Score1': [42, 52, -999, 24, 73],
'Score2': [-999, -999, -999, 2, 1],
'Score3': [2, 2, -999, 2, -999]}
df = pd.DataFrame(raw_data, columns = ['Score1', 'Score2', 'Score3'])
Run Code Online (Sandbox Code Playgroud)
我只想在 Score2 和 Score3 列中用 NaN 替换 -999,而 Score1 列保持不变。我想引用要按名称修改的列,它们可能不是连续的。
我试过这样的事情:
df.loc[:,('Score2', 'Score3')].replace(-999, np.nan, inplace=True)
df
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我假设是因为它在副本上运行。有没有办法在一个声明中做到这一点?
我查看了Pandas 替换特定列上的值,但发现它很混乱,所以觉得一个更简单的例子会有所帮助。
我正在使用 pandas read_sql_query 将数据从 MySQL 数据库表读取到 pandas 数据帧中。此表中的某些列全为 NULL 值。对于这些列,pandas 数据框的每一行都包含 None。对于所有其他列,数据框包含 NaN,其中存在 NULL 值。谁能解释为什么所有 NULL 列都返回 None ?我如何确保我拥有所有 NaN,希望无需进行手动转换?我应该补充一点,导致这个问题的两列是浮动的,第三列是双精度的,
编辑
这是一个例子。pef 和 fer 列包含数据库中的所有 NULL。
from sqlalchemy import create_engine
import pandas as pd
import math
querystr = "SELECT * FROM dbname.mytable"
engine = create_engine('mysql+pymysql://username:password@localhost/' + "dbname")
df = pd.read_sql_query(querystr, engine)
df.head()
sys dias pef fer
0 NaN NaN None None
1 159.0 92.666 None None
2 NaN NaN None None
3 NaN NaN None None
4 102.0 63.333 None …Run Code Online (Sandbox Code Playgroud)