繁体   English   中英

如何存储缩放参数以备后用

[英]How to store scaling parameters for later use

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

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

我知道我可以使用标准standarScaler但是我可以以某种方式将它序列化到一个文件中,这样每次我想运行分类器时standarScaler它与我的数据相匹配吗?

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

话虽如此,您可以查询sklearn.preprocessing.StandardScaler以获取拟合参数:

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]))

使用标准缩放器缩放

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(data)
scaled_data = scaler.transform(data)

保存 mean_ 和 var_ 以备后用

means = scaler.mean_ 
vars = scaler.var_    

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

以后使用保存的参数

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

scale_new_data = scale_data(new_data)

酸洗通常是一个坏主意,至少在生产中( https://github.com/numpy/numpy/blob/b88b2c0c19851810d4ee07f03a7734b6e19dbdaa/numpy/lib/npyio.py#L472 ),所以我使用另一种方法:

# scaler is fitted instance of MinMaxScaler
scaler_data_ = np.array([scaler.data_min_, scaler.data_max_])
np.save("my_scaler.npy", allow_pickle=False, scaler_data_)

#some not scaled X
Xreal = np.array([1.9261148646249848, 0.7327923702472628, 118, 1083])

scaler_data_ = np.load("my_scaler.npy")
Xmin, Xmax = scaler_data_[0], scaler_data_[1]
Xscaled = (Xreal - Xmin) / (Xmax-Xmin)
Xscaled
# -> array([0.63062502, 0.35320565, 0.15144766, 0.69116555])

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

from joblib import dump
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(data)
dump(scaler, 'scaler_filename.joblib')

稍后您可以加载定标器。

from joblib import load
scaler = load('scaler_filename.joblib')
transformed_data = scaler.transform(new_data)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM