我用 训练了一个模型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)
Run Code Online (Sandbox Code Playgroud)
关键错误:“原子距离”
atomic_distance是训练数据和测试数据中存在的列的名称,也包含在cont_names.
prediction = learn.get_preds(kaggle_test_data)
Run Code Online (Sandbox Code Playgroud)
这做了一些事情,但它返回了一些奇怪的东西:
[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])]
Run Code Online (Sandbox Code Playgroud)
文档说:
Docstring:返回
ds_type数据集的预测和目标。
这是新的、未标记的数据。我不知道为什么返回的对象应该有标签。他们来自哪里?而且尺寸也没有意义。我期待有 100 个值的东西。
我找到了一种通过逐行传递数据框的方法:
prediction = [float(learn.predict(df_test.loc[i])[0].data) for i in df_test.index]
Run Code Online (Sandbox Code Playgroud)
还有predict_batch可用的方法,但它似乎确实接受数据名。有更好的方法来做到这一点吗?
我用:
\n\ndata_test = (TabularList.from_df(DF_TEST, path=path, cat_names=cat_names,cont_names=cont_vars, procs=procs)\n\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0.split_none()\n\xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0 \xc2\xa0.label_from_df(cols=dep_var))\ndata_test.valid = data_test.train\ndata_test=data_test.databunch()\n\nlearn.data.valid_dl = data_test.valid_dl\npred = learn.get_preds(ds_type=DatasetType.Valid)[0]\nRun Code Online (Sandbox Code Playgroud)\n\nDF_TEST测试数据帧在哪里,dep_var因变量在哪里,learn你的模型在哪里。\n说实话,它在大多数情况下都有效,其他时候它会给出奇怪的错误,然后我必须迭代每一行才能获得预测。
| 归档时间: |
|
| 查看次数: |
1774 次 |
| 最近记录: |