python模型保存并调用——joblib模块

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


背景

用已知的数据集经过反复调优后,训练出一个较为精准的模型,想要用来对格式相同的新数据进行预测或分类。难道又要重复运行用于训练模型的源数据和代码?

常见的做法是将其训练好模型封装成一个模型文件,直接调用此模型文件用于后续的训练 。


一、保存最佳模型

dump

  • joblib.dump(value,filename,compress=0,protocol=None)
    • value:任何Python对象,要存储到磁盘的对象。
    • filename:文件名,str.pathlib.Path 或文件对象。要在其中存储文件的文件对象或文件路径。与支持的文件扩展名之一(“.z”,“.gz”,“bz2”,“.xz”,“.lzma”)
    • compress:int从0到9或bool或2元组。数据的可选压缩级别。0或False不压缩,较高的值表示更多的压缩,但同时也降低了读写时间。使用3值通常是一个很好的折衷方案。如果compress为True,则使用的压缩级别为3。如果compress为2元组,则第一个元素必须对应于受支持的压缩器之间的字符串(例如’zlib’,‘gzip’,‘bz2’,‘lzma’,'xz '),第二个元素必须是0到9的整数,对应于压缩级别。
    • protocol:不用管了,与pickle里的protocol参数一样

举例

  1. 导入数据
import pandas as pd

# 训练集
file_pos="F:\\python_machine_learing_work\\501_model\\data\\训练集\\train_data_only_one.csv"
data_pos=pd.read_csv(file_pos,encoding='utf-8')

# 测试集
val_pos="F:\\python_machine_learing_work\\501_model\\data\\测试集\\test_data_table_only_one.csv"
data_val=pd.read_csv(val_pos,encoding='utf-8')
  1. 划分数据
# 重要变量
ipt_col=['called_rate', 'calling_called_act_hour', 'calling_called_distinct_rp', 'calling_called_distinct_cnt', 'star_level_int', 'online_days', 'calling_called_raom_cnt', 'cert_cnt', 'white_flag_0', 'age', 'calling_called_cdr_less_15_cnt', 'white_flag_1', 'calling_called_same_area_rate', 'volte_cnt', 'cdr_duration_sum', 'calling_hour_cnt', 'cdr_duration_avg', 'calling_pre7_rate', 'cdr_duration_std', 'calling_disperate', 'calling_out_area_rate', 'calling_distinct_out_op_area_cnt','payment_type_2.0', 'package_price_group_2.0', 'is_vice_card_1.0']

#拆分数据集(一个训练集一个测试集)
def train_test_spl(train_data,val_data):
    global ipt_col
    X_train=train_data[ipt_col]
    X_test=val_data[ipt_col]
    y_train=train_data[target_col]
    y_test=val_data[target_col]
    return X_train, X_test, y_train, y_test

	X_train, X_test, y_train, y_test =train_test_spl(data_pos_4,data_val_4)
  1. 训练模型
from sklearn.model_selection import GridSearchCV
def model_train(X_train,y_train,model):
    ## 导入XGBoost模型
    from xgboost.sklearn import XGBClassifier


    if  model=='XGB':
        parameters = {'max_depth': [3,5, 10, 15, 20, 25],
          			  'learning_rate':[0.1, 0.3, 0.6],
          			  'subsample': [0.6, 0.7, 0.8, 0.85, 0.95],
              		  'colsample_bytree': [0.5, 0.6, 0.7, 0.8, 0.9]}
      
        xlf= XGBClassifier(n_estimators=50)
        grid = GridSearchCV(xlf, param_grid=parameters, scoring='accuracy', cv=3)
        grid.fit(X_train, y_train)
        best_params=grid.best_params_
        res_model=XGBClassifier(max_depth=best_params['max_depth'],learning_rate=best_params['learning_rate'],subsample=best_params['subsample'],colsample_bytree=best_params['colsample_bytree'])
        res_model.fit(X_train, y_train)

    else:
        pass
    return res_model

xgb_model= model_train(X_train, y_train, model='XGB') 
  1. 保存模型
# 导入包
import joblib 

# 保存模型
joblib.dump(xgb_model, 'train_rf_importance_model.dat', compress=3) 

二、加载模型并用于预测

load

  • joblib.load(filename, mmap_mode=None)
    • filename:str.pathlib.Path或文件对象。要从中加载对象的文件或文件路径。
    • mmap_mode:{无,‘r +’,‘r’,‘w +’,‘c’},可选如果不是“None”,则从磁盘对阵列进行内存映射。此模式对压缩文件无效。请注意,在这种情况下,重建对象可能不再与原始对象完全匹配。
  1. 加载模型
# 加载模型
load_model_xgb_importance = joblib.load("F:\\python_machine_learing_work\\501_model\\data\\测试集\\train_xgb_importance_model.dat")

# 使用模型预测
y_pred_rf = model_predict(load_model_xgb_importance, X_test, alpha = alpha)
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Python是目前非常热门的编程语言,常用于机器学习和数据分析应用。在使用Python进行机器学习时,训练好的模型可以被保存为Py文件,以便以后使用。 Python训练出的模型可以被保存成.py文件。在保存模型前,需要通过Python的pickle库将模型序列化。pickle库提供了存储Python对象的标准方法,可以将训练好的模型保存成二进制文件,并在需要的时候加载并使用。 在调用保存模型时,我们需要将保存模型加载到Python环境中。这可以通过Python的pickle库实现。调用方法非常简单,只需使用pickle库的load方法即可将模型加载到Python环境中。 在使用保存模型进行预测时,我们需要使用Python机器学习库,如sklearn或者tensorflow,来加载和使用模型。具体操作方法要根据不同的机器学习库而定。 总的来说,通过将Python训练好的模型保存成.py文件,可以方便地在后续使用中加载和调用。这样可以提高机器学习的效率,避免重复训练模型,同时也可以使代码更加简洁和易于维护。 ### 回答2: Python是一门广泛应用于人工智能领域的编程语言python有着众多的开源机器学习库,如TensorFlow, PyTorch等,这让python成为开发人工智能应用程序最方便的语言,通过这些库我们可以很容易地构建好一个机器学习模型并将它保存到本地,方便后续的使用。 在Python中,使用pickle可以将一个训练好的机器学习模型保存到文件中,也可以再次从文件中加载模型。其使用方法如下: 1.导入pickle库。 import pickle 2.定义模型。 # Some code to create a model. 3.将模型保存到文件中。 with open('model.pkl', 'wb') as f: pickle.dump(model, f) 其中,model是你训练好的机器学习模型,'model.pkl'是要保存到的文件名,wb是指用二进制的方式打开文件,使得pickle可以将模型保存到文件中。 4.从文件中加载模型。 with open('model.pkl', 'rb') as f: model = pickle.load(f) 这段代码会将之前保存模型文件(model.pkl)读取到内存中,并赋值给model变量。rb是指以二进制的方式打开文件,保证pickle可以正确地读取文件。 使用pickle将模型保存到本地可以使得模型重复使用,因此无需重复训练耗费时间,但需要注意模型运行的环境和模型训练时的环境应该保持一致,否则模型可能无法正常工作。同时,不建议将模型文件暴露在公共网络中,因为模型中包含了训练数据的一些敏感信息,不当的使用可能严重影响数据安全。 总之,使用pickle保存和加载模型Python中非常强大的机器学习应用之一,可以很好地提高开发人员的工作效率,同时也使得对模型的再次使用变得更加简单、方便和高效。 ### 回答3: Python是一种面向对象的高级编程语言,其有着简单、易学、易读、易写的特点,因此备受广大程序员的喜爱。在机器学习领域中,Python也占有非常重要的地位,因为Python具有大量适用于机器学习的优秀框架,如TensorFlow、Keras、Pytorch等。 在机器学习中训练好的模型通常会保存为py文件,这样就可以在需要的时候直接调用模型,而不用每次都重新训练。那么,具体如何保存py文件,并如何调用呢?下面我们详细解答。 1. 保存py文件 在Python中,通过pickle库可以把对象持久化到硬盘,也可以将持久化的对象重新加载到内存,以达到对象长久保存、共享等目的。在保存模型时,我们可以使用pickle库,示例如下: ``` import pickle #训练好的模型 model = xxx #保存模型到文件 with open('model.pkl', 'wb') as f: pickle.dump(model, f) ``` 关于模型保存名称,可以自行命名,放置于合适的位置即可。需要注意的是,在保存时使用了“wb”,表示用二进制写入文件,这很重要,因为模型本身是二进制的。 2. 调用模型 调用模型时,可以使用pickle库来加载并重建模型,代码如下: ``` import pickle #加载模型 with open('model.pkl', 'rb') as f: model = pickle.load(f) #使用模型 result = model.predict(x) ``` 上述代码中,使用“rb”参数来打开保存模型文件,然后使用“pickle.load()”方法来加载模型。注意,重建模型的过程只需要从文件中加载即可,不需要重新训练,这可以节省大量的时间和资源。 总体而言,Python训练好的模型可以通过pickle库保存成py文件,并在需要时直接加载调用。对于机器学习工程师而言,掌握这项技能是必不可少的一步,它可以加速模型开发、优化和部署。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值