如何使用预先训练好的随机森林模型进行迁移学习?

1,420 阅读6分钟

机器学习中的预训练模型是将模型保存为pickle或joblib格式,并使用它们对它所训练的数据进行预测的过程。在管道中保存模型有利于解释模型系数,并在模型部署生产时从保存的模型权重和参数中提取预测结果。因此,本文简要介绍了如何实现随机森林分类器模型并将其保存为pickle格式,并在生产过程中使用预训练的模型进行预测。

目录

  1. 预训练模型的介绍
  2. 从头开始建立一个 分类 模型
  3. 以pickle格式保存模型
  4. 加载保存的模型
  5. 从加载的模型中获取预测结果
  6. 总结

预训练模型的介绍

预训练模型是通过典型的机器学习模型生命周期的各种过程成熟后得到的模型。预训练模型是为获得类似问题的预测而开发的模型,帮助我们节省大量的训练时间。因此,对于类似类型的数据,可以在一开始就加载预训练的模型,然后根据需要进行修改,或者使用为类似类型的特征进行预训练的同一模型来获得预测结果。

注意:--预训练的模型可能总是不准确。

预训练的模型可能总是不准确,而且可能对数据中类似的特征有偏见。因此,一般来说,在使用预训练的模型之前,最好先了解预训练的模型是否偏向于任何特定的特征。

从头开始建立一个随机森林分类模型

在这里,我们使用了一个卫生保健数据集,从头开始建立一个随机森林分类模型,同时,需要坚持的预处理步骤如下所示。所以现在让我们来看看建立随机森林分类模型的步骤。

你是否在寻找一个完整的数据科学中使用的Python库。在此查看.

因此,首先让我们把数据集的前5个条目可视化。

数据预处理

因此,上述数据集被检查为空值,空值的相应特征被适当地归纳为正确的值。因此,从数据集中删除了ID和性别特征,因为它们似乎意义不大,不具备任何重要的信息。

df=df.drop(['id','gender'],axis=1)

因此,现在使用scikit模块的**LabelEncoder** 将数据集的分类特征编码为数字特征,如下图所示。

from sklearn.preprocessing import LabelEncoder
le=LabelEncoder() ## creating a label encoder instance for fitting
df['ever_married']=le.fit_transform(df['ever_married'])
df['work_type']=le.fit_transform(df['work_type'])
df['Residence_type']=le.fit_transform(df['Residence_type'])
df['smoking_status']=le.fit_transform(df['smoking_status'])

编码完成后,数据集再次被可视化,以了解LabelEncoder是如何对数据中的分类特征进行编码的。

现在我们有了适当的预处理数据,让我们继续进行数据的分割。

分割数据

现在使用scikit learn模块对预处理过的数据进行分割,如下图所示,同时验证用于训练和测试模型的记录数量。

from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test=train_test_split(X,y,test_size=0.2,random_state=42)
print('Number of records for train',X_train.shape)
print('Number of records for test',X_test.shape)
print('Number of records for train',Y_train.shape)
print('Number of records for test',Y_test.shape)

实现随机森林模型

使用分割后的数据,实施随机森林分类器模型,如下图所示,同时评估各种参数,如准确率得分和曲线下面积(AUC),以确定模型性能,并验证任何过拟合的迹象。

实施随机森林模型和评估参数所涉及的步骤如下所示。

from sklearn.ensemble import RandomForestClassifier
rfc_class=RandomForestClassifier(random_state=42)
rfc_base=rfc_class.fit(X_train,Y_train)
rfc_pred=rfc_base.predict(X_test)

现在,基础随机森林模型的预测被用来获得分类报告,也用来评估AUC分数。

from sklearn.metrics import classification_report,accuracy_score,roc_auc_score
print('Classification report \n',classification_report(Y_test,rfc_pred))

y_train_pred=rfc_base.predict(X_train)
y_train_prob=rfc_base.predict_proba(X_train)[:,1]
y_test_prob=rfc_base.predict_proba(X_test)[:,1]
 
print('Train Accuracy',accuracy_score(Y_train,y_train_pred))
print('Train AUC',roc_auc_score(Y_train,y_train_prob))
print()
print('Test Accuracy',accuracy_score(Y_test,rfc_pred))
print('Test AUC',roc_auc_score(Y_test,y_test_prob))

因此,从开发的模型中,我们可以看到该模型的测试参数小于训练参数,但根据分类报告,该模型拥有94%的准确度得分。

现在让我们来看看如何以pickle格式保存这个基础模型。

以pickle格式保存模型

一般来说,机器学习模型更倾向于以pickle格式保存,以方便保存和加载保存的模型参数。所以让我们看看以pickle格式保存机器学习模型的步骤。

import pickle
with open('rfc_model_pkl', 'wb') as files:
   pickle.dump(rfc_base, files)

所以在这里,pickle模块已经被导入到工作环境中,并且用可写的权限操作创建了一个pickle对象,开发的基础模型以pickle文件格式转储在创建的pickle对象中。所以创建的pickle对象可以在工作环境中检查,它将被保存为pkl 格式。

加载保存的模型

现在让我们按照下面提到的步骤在工作环境中读取保存的pickle文件。

# load saved model
with open('rfc_model_pkl' , 'rb') as f:
   rfc_pretrained = pickle.load(f)

所以在这里,创建的pickle文件以可读格式(rb)打开,pickle的load() 函数被用来在工作环境中获得预训练的模型。

从保存的模型中获取预测结果

所以现在预训练的模型可以用来获得对一组随机参数的预测,这些参数以与原始数据集相同的顺序传递给预训练的模型。下面列出了相同的步骤。

rfc_pretrained.predict([[55,0,1,0,2,0,107.93,42,3]])

rfc_pretrained.predict([[81,1,1,1,3,0,100,35.7,3]])

因此,通过这种方式,我们必须按照数据帧的各自顺序传递随机特征,并获得对预训练模型的预测。所以在后面的阶段,这个预训练的模型被用来评估各种参数,如下所示。

y_pred_pretrained=rfc_pretrained.predict(X_test)
print('Classification_report of the pretrained model \n',classification_report(Y_test,y_pred_pretrained))

由于获得了预训练模型的分类报告,预训练模型的其他参数也得到了评估,如下所示。

y_train_pred=rfc_pretrained.predict(X_train)
y_train_prob=rfc_pretrained.predict_proba(X_train)[:,1]
y_test_prob=rfc_pretrained.predict_proba(X_test)[:,1]
 
print('Training  Accuracy of pretrained model',accuracy_score(Y_train,y_train_pred))
print('Training  AUC of pretrained model',roc_auc_score(Y_train,y_train_prob))
print()
print('Test Accuracy of pretrained model',accuracy_score(Y_test,y_pred_pretrained))
print('Test AUCo f pretrained model',roc_auc_score(Y_test,y_test_prob))

总结

这就是一个实时的机器学习模型是如何从头开始建立的,并保存为标准的模型格式,如pickle,然后加载到工作环境中,对类似类型的特征进行预测。Pickle文件格式是内存友好型的,它提供了对所创建的实例的简单的写入和读取操作,并便于使用预训练的模型获得预测和评估各种参数。

The postHow to use a pre-trained Random Forest model for transfer learning?appeared first onAnalytics India Magazine.