我有一个 ML 分类器模型已经训练并保存在 pkl 中。原始数据集(32 列和 2000 行)有一个相对复杂的预处理:有几个合成列,聚合......甚至还有用 CountVectorizer 编码的新列(最终预处理数据集中有 110 列)。
当我想将新数据推入模型时,我需要将其作为一个整体进行处理,因此我将新行推入用于训练的数据集中,进行所有数据预处理,然后提取新的预处理列进行预测:
原始数据集:
第 1 列... | 第 32 栏 |
---|---|
原始数据 | 原始数据 |
原始数据 | 原始数据 |
原始数据 | 原始数据 |
原始数据 | 原始数据 |
要预测的新数据 | 要预测的新数据 |
处理数据后:
第 1 列... | 第 110 列 |
---|---|
用于训练的处理数据 | 用于训练的处理数据 |
用于训练的处理数据 | 用于训练的处理数据 |
用于训练的处理数据 | 用于训练的处理数据 |
用于训练的处理数据 | 用于训练的处理数据 |
处理新数据以进行预测 | 处理新数据以进行预测 |
最后:
prediction = model.predict(processed new data to predict)
问题是:在我的例子中,数据集很小(2000 行),但即使如此,预处理(本地)也需要大约 5-6 秒才能执行。那么预测时间不到 1 秒。
预处理花费的时间在许多应用程序中都太长了。有什么办法可以改善这些时间吗?机器学习中新数据的处理是如何实时进行的?
在本地,我没有从数据库读取用于训练的数据,而是从 csv 加载它。据我所知,读取速度甚至可能比直接从数据库读取还要好。