我使用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')
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])]
文档说明:
文档字符串: 返回在
ds_type
数据集中的预测值和目标值。
这是新的、未标记的数据。我不知道返回对象为什么应该有标签。它们从哪里来?另外,大小也不合理。我期望得到100个值的东西。
我发现了一种逐行传递数据帧的方法:
prediction = [float(learn.predict(df_test.loc[i])[0].data) for i in df_test.index]
还有可用的方法predict_batch
,但似乎不接受数据框。有更好的方法吗?