【发布时间】:2019-12-02 18:53:14
【问题描述】:
我有一个包含 9 个特征和 9 个预期目标的 CSV 文件,我想在这个数据上测试 2 个回归模型(应该作为流生成)。
当我使用相同的数据(使用 CSV 文件中的 scikit-multiflow 作为流生成)测试 2 个模型时,我得到了一个错误的 R2_score。
但是当我使用 scikit-learn 对我的数据进行标准化版本测试时,我得到了非常好的 R2 分数。问题是我不应该使用 scikit-learn,因为我应该实时规范化数据。
所以我在 scikit-multiflow 中搜索了类似的东西,发现了 2 种方法:normalize_sample(X)、and normalize_targets(y)。
但问题是 normalize_sample 依赖于一个名为 examples_seen 的变量,这个变量是模型已经使用的示例数量(用于训练和测试)。 据我所知,当我们在模型上调用“评估”方法时,这个变量会发生变化。 但这没有任何意义,因为我们应该规范化数据然后训练它,而不是相反。我确定我在这里遗漏了一些东西。 谁能帮帮我,因为没有这种用法的例子。
import csv
from skmultiflow.data.file_stream import FileStream
from skmultiflow.trees import MultiTargetRegressionHoeffdingTree
from skmultiflow.evaluation import EvaluatePrequential
from skmultiflow.meta import RegressorChain
stream = FileStream('supervised_file_v4.csv', target_idx=9, n_targets=9)
stream.prepare_for_use()
ht = MultiTargetRegressionHoeffdingTree()
rh = RegressorChain()
ht.normalize_sample(stream.X)
# here it gives me an array of 10 zeros beacause examples_seen = 0
evaluator = EvaluatePrequential(show_plot=False,
pretrain_size=30000,
max_samples=200000,
metrics = ['average_mean_absolute_error','average_root_mean_square_error'])
# print(ht.examples_seen) gives 0
evaluator.evaluate(stream=stream, model=[ht,rh], model_names=['HT', 'RH'])
# print(ht.examples_seen) gives 200000
ht.normalize_sample(stream.X)
# even here it gives a error saying "operands could not be broadcast together with shapes (5733524,9) (9,) (5733524,) (9,)"
我希望我们可以在调用“evaluate”方法之前使用“normalize_sample”。请帮忙
【问题讨论】:
标签: python machine-learning scikit-learn