当使用 sklearn 训练 ML 模型时,我通常使用 sklearn 内置的 StandardScaler...首先将缩放器拟合到训练数据,然后转换训练数据...最后使用相同的 StandardScaler 对象来转换测试数据通过训练数据集中之前的拟合参数。
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
然而,我最近意识到,我认为任何在不同环境中腌制和重新部署 ML 模型的尝试也需要腌制 StandardScaler...否则新的条目数据在输入之前将无法进行转换进入模型。这是我的错误,还是我只是错过了一些东西。每次尝试将 ML 模型和 StandardScaler 部署到其他地方时,是否都必须对其进行 pickle?
奇怪的是,Sci-kit 学习中从未提到过这一点模型持久化 https://scikit-learn.org/stable/modules/model_persistence.html文档。
joblib.dump(model, 'pickledModel.joblib')
joblib.dump(sc, 'pickledScaler.joblib')
实际上,为了部署,您可能还需要序列化模型以将其作为字节放入数据库中。和joblib
这有点棘手,因为你只能转储到文件。基本上,您创建一些虚拟容器并将其转储到那里。
from io import BytesIO
import joblib
def serialize(obj) -> bytes:
container = BytesIO()
joblib.dump(obj, container)
container.seek(0)
serialized = container.read()
return serialized
def deserialize(obj: bytes):
container = BytesIO()
container.write(obj)
container.seek(0)
deserialized = joblib.load(container)
return deserialized
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)