【问题标题】:How to apply fastai tabular model to new data?如何将 fastai 表格模型应用于新数据?
【发布时间】:2019-06-05 23:28:44
【问题描述】:

我用fastai.tabular 训练了一个模型。现在,我有一个合适的学习者。最终,模型将应用于新数据,而不仅仅是在训练集上进行拟合和在测试集上进行评估等。我尝试了不同的方法,所有这些都会导致错误或一些怪异。有没有办法将用 fastai 训练的模型应用于以前不可用的数据?还是我必须一次又一次地训练模型并输入新的测试数据?这似乎不太可能。

df_test = pd.read_parquet('generated_test.parquet').head(100)
test_data = TabularList.from_df(df_test, cat_names=cat_names, cont_names=cont_names)
prediction = learn.predict(test_data)

KeyError: 'atomic_distance'

atomic_distance 是存在于训练和测试数据中的列的名称,也包含在cont_names 中。

prediction = learn.get_preds(kaggle_test_data)

这做了一些事情,但它返回了一些奇怪的东西:

[tensor([[136.0840],
         [ -2.0286],
         [ -2.0944],
         ...,
         [135.6165],
         [  2.7626],
         [  8.0316]]),
 tensor([ 84.8076, -11.2570, -11.2548,  ...,  81.0491,   0.8874,   4.1235])]

文档说:

Docstring:返回ds_type 数据集上的预测和目标。

这是新的、未标记的数据。我不知道为什么返回的对象应该有标签。他们来自哪里?大小也没有意义。我期待有 100 个值的东西。

我通过逐行传入数据框找到了一种方法:

prediction = [float(learn.predict(df_test.loc[i])[0].data) for i in df_test.index]

还有predict_batch 方法可用,但它似乎接受datafames。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: fast-ai


    【解决方案1】:

    我用:

    data_test = (TabularList.from_df(DF_TEST, path=path, cat_names=cat_names,cont_names=cont_vars, procs=procs)
                               .split_none()
                               .label_from_df(cols=dep_var))
    data_test.valid = data_test.train
    data_test=data_test.databunch()
    
    learn.data.valid_dl = data_test.valid_dl
    pred = learn.get_preds(ds_type=DatasetType.Valid)[0]
    

    DF_TEST 是测试数据框,dep_var 是因变量,learn 是您的模型。 老实说,它在大多数情况下都有效,但有时它会给出奇怪的错误,然后我必须迭代每一行以获得预测。

    【讨论】:

    • 在我指定第一行以适合我现有的学习者对象后为我工作。最后,关于如何预测多个实例而不是使用 predict() 方法循环的一些不错的建议。
    猜你喜欢
    • 2021-05-13
    • 2016-01-02
    • 2021-07-13
    • 2019-04-28
    • 1970-01-01
    • 2020-11-10
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多