小编pan*_*nda的帖子

Xgboost 在 R 中使用 mlr 实现生存

我想使用 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 中实现这一点吗?

  1. 使用 xgboost 的内置回归学习器:
    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)

r mlr xgboost survival

5
推荐指数
1
解决办法
2728
查看次数

替换数据框的多个特定列中的值

我有以下数据框:

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 替换特定列上的值,但发现它很混乱,所以觉得一个更简单的例子会有所帮助。

python dataframe pandas

4
推荐指数
2
解决办法
2167
查看次数

Pandas read_sql_query 对某些列中的所有值返回 None

我正在使用 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)

python sqlalchemy nan pandas nonetype

3
推荐指数
2
解决办法
6138
查看次数

标签 统计

pandas ×2

python ×2

dataframe ×1

mlr ×1

nan ×1

nonetype ×1

r ×1

sqlalchemy ×1

survival ×1

xgboost ×1