如何使用 Orange GUI 中保存的 RandomForest 模型进行预测

How to make predictions using a saved RandomForest model from Orange GUI

我使用 Orange GUI 并训练了一个 RandomForest 模型,我后来使用 SaveModel 小部件保存了该模型。

Orange 用 pickle 保存它的模型,所以我去写了下面的 python 脚本:

import Orange, pickle

model = pickle.load(open('model', 'rb'))

问题是,我昨天在网上广泛搜索了。并且找不到任何示例来使用我的数据(与我在 Orange GUI 中使用的数据格式相同)或关于如何使用该模型的足够文档进行预测。

根据后来的研究,我发现我可以评估一个预训练模型,该模型未使用以下代码进行处理

results = Orange.evaluation.testing.TestOnTestData(data, test, [lambda testdata: model])

我应该做的是加载数据:

data = Orange.data.Table('trainingData.csv');
test = Orange.data.Table('testData.csv');

而且我无法找到有关如何区分这些 *.csv 文件中的目标和功能的文档。

除此之外,即使我能够创建此文件。我将不得不做一些噱头,其中 testData.csv 只需要一行长(我想要预测的行),目标值为 1。我会通过检查分数是否为100%0%

所以我知道我的问题很多,但我真的可以在以下几点上得到一些帮助:

  1. 如何在 *.csv 文件中定义 Orange.data.Table() 函数的目标是什么
  2. 如何使用 pickled Orange RandomForest 模型进行预测,而不是使用噱头评估进行预测。 (这样我就可以一次预测多个项目..)

非常感谢您的宝贵时间

因此,在对 Orange GitHub 提出同样的问题后,我设法找到了合适的答案。

对于 csv 文件格式,有一个文档页面,其中解释了如何在数据集中定义什么是特征以及什么是目标:

Documentation on Loading Data

至于模型,它非常简单。该模型是一个 python 对象,用于进行预测,因此只要我的数据按照文档中上述格式进行预测,我就可以通过调用

进行预测
pred_ind = model(data)
[model.domain.class_var.str_val(i) for i in pred_ind]  # convert to value names (strings)

如果我想查看百分比,我需要做的就是

prob = model(data, model.Probs) 

但更好的是:

As you can see in the example above, the model stores the domain it was trained on. This means you actually don't even need to bother with 1. When the model is given data to predict, it will first convert it to the domain it was trained on and use the same variables as the target and independent features (obviously they need to be present in the data).

如果有人想要 github 上的原始答案,请看这里:GitHub