Machine Learning 19 ----结果部署

结果部署是机器学习的最后一步。

选定算法之后,对算法训练生成模型,并部署到生产环境上,以便利用机器学习解决实际问题。

模型生成之后,也需要定期对模型进行更行,是模型处于最新,最有效的状态,通常建议3-6月更新一次模型。

 

生成的模型序列化之后,当有新的数据出现时,需要反序列化已保存的模型,然后用其预测新的数据。

接下来介绍在Python中如何序列化和反序列化scikit-learn的模型。包括:

  • 通过pickle来序列化和反序列化机器学习模型
  • 通过joblib来序列化和反序列化机器学习模型

pickle序列化和反序列化机器学习模型

 

pickle是标准的Python序列化方法,可以通过它来序列化机器学习算法生成的模型,并将其保存到文件中。

当需要对新数据进行预测时,将保存在文件中的模型反序列化,并用其来预测新的数据。

 1 #pickle的使用
 2 from pandas import read_csv
 3 from sklearn.model_selection import train_test_split
 4 from sklearn.linear_model import LogisticRegression
 5 from pickle import dump
 6 from pickle import load
 7 
 8 filename='/home/aistudio/work/pima_data1.csv'
 9 names=['preg','plas','pres','skin','test','mass','pedi','age','class']
10 data=read_csv(filename,names=names)
11 #将数据分为输入数据和输出数据
12 array=data.values
13 x=array[:,0:8]
14 y=array[:,8]
15 test_size=0.33
16 seed=4
17 x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=test_size,random_state=seed)
18 #训练模型
19 model=LogisticRegression()
20 model.fit(x_train,y_train)
21 
22 #保存模型
23 model_file='finalzied_model.sav'
24 with open(model_file,'wb') as model_f:
25     #模型序列化
26     dump(model,model_f)
27 
28 #加载模型
29 with open(model_file,'rb') as model_f:
30     #模型反序列化
31     loaded_model=load(model_f)
32     result=loaded_model.score(x_test,y_test)
33     print('算法评估结果:%.3f%%' % (result * 100))
 
算法评估结果:80.315%

通过Joblib序列化与反序列化

joblib是Scipy生态环境的一部分,提供了通用的工具来序列化python的对象和反序列化python的对象。
通过joblib序列化对象时会采用Numpy的格式保存数据,这对某些保存数据到模型的算法非常有效,如K近邻算法。
 1 #joblib的使用
 2 from pandas import read_csv
 3 from sklearn.model_selection import train_test_split
 4 from sklearn.linear_model import LogisticRegression
 5 from sklearn.externals.joblib import dump
 6 from sklearn.externals.joblib import load
 7 
 8 filename='/home/aistudio/work/pima_data1.csv'
 9 names=['preg','plas','pres','skin','test','mass','pedi','age','class']
10 data=read_csv(filename,names=names)
11 #将数据分为输入数据和输出数据
12 array=data.values
13 x=array[:,0:8]
14 y=array[:,8]
15 test_size=0.33
16 seed=4
17 x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=test_size,random_state=seed)
18 #训练模型
19 model=LogisticRegression()
20 model.fit(x_train,y_train)
21 
22 #保存模型
23 model_file='finalzied_model_joblib.sav'
24 with open(model_file,'wb') as model_f:
25     #模型序列化
26     dump(model,model_f)
27 
28 #加载模型
29 with open(model_file,'rb') as model_f:
30     #模型反序列化
31     loaded_model=load(model_f)
32     result=loaded_model.score(x_test,y_test)
33     print('算法评估结果:%.3f%%' % (result * 100))
算法评估结果:80.315%

生成模型的技巧

在生成机器学习模型时,需要考虑以下几个问题:
  • python版本:要记录python的版本,大部分情况下,在序列化和反序列化模型时,需要使用相同的python版本。
  • 类库版本:同样需要记录所有主要类库的版本,因为在序列化模型和反序列化模型时需要使用相同版本的类库,不仅需要scipy和scikit-learn版本一致,其他类库版本也需要一致。
  • 手动序列化:有时需要手动序列化算法,这样可以直接在scikit-learn中或其它平台重现这个模型。我们通常会花费大量的时间在选择算法和参数调整上,将这个过程手动记录下来比仅序列化模型更有价值。


 

posted @ 2020-05-25 08:27  yuzaihuan  阅读(221)  评论(0编辑  收藏  举报