zoukankan      html  css  js  c++  java
  • 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中或其它平台重现这个模型。我们通常会花费大量的时间在选择算法和参数调整上,将这个过程手动记录下来比仅序列化模型更有价值。


  • 相关阅读:
    Extjs常用的控件
    JasperReport导出
    spring配置连接池
    extjs中xtype类型

    凭什么!
    用心去做,多动脑思考
    闲着无事弄一下荒废已久的博客。。。

    视频下载工具 3.0
  • 原文地址:https://www.cnblogs.com/yuzaihuan/p/12941070.html
Copyright © 2011-2022 走看看