我想应用sklearn.preprocessing.scale
提供的缩放scikit-learn
模块,用于集中我将用于训练svm分类器的数据集。
如何存储标准化参数,以便我也可以将它们应用于我想要分类的数据?
我知道我可以使用standarScaler
但是我可以以某种方式将其序列化为一个文件,以便每次我想运行分类器时都不必将它放到我的数据中吗?
答案 0 :(得分:7)
我认为最好的方法是在帖子fit
之后挑选它,因为这是最通用的选项。也许您稍后会创建一个由特征提取器和缩放器组成的管道。通过腌制(可能是复合的)阶段,你会使事情变得更加通用。 sklearn documentation on model persistence讨论了如何执行此操作。
话虽如此,您可以在sklearn.preprocessing.StandardScaler
查询适合参数:
比例_ :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]))
答案 1 :(得分:0)
使用标准洁牙机缩放
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)
答案 2 :(得分:0)
您可以使用joblib模块存储定标器的参数。
<input type="text" [(ngModel)]="picker" ngbDatepicker (click)="date_begin.toggle()" placeholder="date" #date_begin="ngbDatepicker" />
{{picker | json}} --> output: { "year": 2020, "month": 9, "day": 8 }
稍后您可以加载缩放器。
from joblib import dump
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(data)
dump(scaler, 'scaler_filename.joblib')
答案 3 :(得分:-1)
酸洗通常是个坏主意,至少在生产中是如此,所以我使用了另一种方法:
# scaler is fitted instance of MinMaxScaler
scaler_data_ = np.array([scaler.data_min_, scaler.data_max_])
np.save("my_scaler.npy", 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])