在多个程序中正确使用Scikit的StandardScaler

use*_*495 1 python scikit-learn

我有一个与此主题非常相似的问题,但我想重复使用StandardScaler而不是LabelEncoder.这就是我所做的:

# in one program
dict = {"mean": scaler.mean_, "var": scaler.var_}
# and save the dict 


# in another program
# load the dict first
new_scaler = StandardScaler()
new_scaler.mean_ = dict['mean'] # Hoever it doesn't work
new_scaler.var_ = dict['var'] # Doesn't work either...
Run Code Online (Sandbox Code Playgroud)

我也试过set_params,但它只能改变这些参数:copy,with_mean,和with_std.

那么,我怎样才能重新使用我在程序1中得到的缩放器?谢谢!

sas*_*cha 5

只是腌制 整个事情.

按照官方文档.

您可以使用第一个链接中的python标准pickle或第二个链接中提到的专用joblib-pickle(我建议使用;通常更有效,但对于这种简单的object = scaler并不重要):

from sklearn.externals import joblib

new_scaler = StandardScaler()
# ...fit it... do something ...

joblib.dump(new_scaler , 'my_scaler.pkl')     # save to disk

loaded_scaler = joblib.load('my_scaler.pkl')  # load from disk
Run Code Online (Sandbox Code Playgroud)

如果您有任何机会想要将您的sklearn对象存储在MySQL,MongoDB,Redis和co.等数据库中,那么使用基于文件的存储的上述示例当然不会起作用.

那么简单的方法是:使用python-pickle的转储,它将转储到一个bytes-object(为大多数DB-wrappers准备好).

对于更有效的joblib,你必须使用python的BytesIO以类似的方式使用它(因为方法本身是基于文件的,但可以用在类文件对象上).