如何存储缩放参数供以后使用

Let*_*zee 11 python normalization standardized scikit-learn

我想应用缩放sklearn.preprocessing.scale模块,该模块scikit-learn提供中心化数据集,我将用它来训练svm分类器.

然后,我如何存储标准化参数,以便我也可以将它们应用于我要分类的数据?

我知道我可以使用standarScaler但我可以以某种方式将其序列化为一个文件,以便每次我想运行分类器时我都不必适应我的数据吗?

Ami*_*ory 7

我认为最好的方法是发帖fit,因为这是最通用的选择.也许您稍后会创建一个由特征提取器和缩放器组成的管道.通过腌制(可能是复合的)阶段,你会使事情变得更加通用.关于模型持久性sklearn文档讨论了如何执行此操作.

话虽如此,您可以查询sklearn.preprocessing.StandardScalerfit参数:

scale_:ndarray,shape(n_features,)每个要素相对比例缩放.版本0.17中的新增内容:建议使用scale_而不是弃用std_. mean_:具有形状的浮点数组[n_features]训练集中每个要素的平均值.

以下简短的片段说明了这一点:

from sklearn import preprocessing
import numpy as np

s = preprocessing.StandardScaler()
s.fit(np.array([[1., 2, 3, 4]]).T)
>>> s.mean_, s.scale_
(array([ 2.5]), array([ 1.11803399]))
Run Code Online (Sandbox Code Playgroud)

  • 应该有一种方法可以使用之前拟合中保存的参数来构造标准缩放器。 (4认同)

Ioa*_*ios 6

使用标准缩放器缩放

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(data)
scaled_data = scaler.transform(data)
Run Code Online (Sandbox Code Playgroud)

保存 mean_ 和 var_ 以备后用

means = scaler.mean_ 
vars = scaler.var_    
Run Code Online (Sandbox Code Playgroud)

(您可以打印和复制粘贴方式和变量或使用 np.save 保存到磁盘....)

以后使用保存的参数

def scale_data(array,means=means,stds=vars **0.5):
    return (array-means)/stds

scale_new_data = scale_data(new_data)
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用 joblib 模块来存储缩放器的参数。

from joblib import dump
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(data)
dump(scaler, 'scaler_filename.joblib')
Run Code Online (Sandbox Code Playgroud)

稍后您可以加载定标器。

from joblib import load
scaler = load('scaler_filename.joblib')
transformed_data = scaler.transform(new_data)
Run Code Online (Sandbox Code Playgroud)