我用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])]
文档说:
文档字符串:返回
ds_type
数据集上的预测和目标。
这是新的未标记数据。我不知道为什么返回的对象应该有标签。他们来自哪里?而且大小没有意义。我期望有100个值的东西。
我通过逐行传递数据框找到了一种紧急的方法:
prediction = [float(learn.predict(df_test.loc[i])[0].data) for i in df_test.index]
也有可用的方法predict_batch
,但它似乎确实接受数据帧。有更好的方法吗?
答案 0 :(得分:0)
我使用:
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
是您的模型。
坦白地说,它在大多数情况下都有效,而其他时候却会产生奇怪的错误,然后我必须迭代每一行以获得预测。