重新安装anaconda后,保存的Joblib模型/管道无法运行

时间:2019-08-24 16:12:29

标签: python python-3.x machine-learning scikit-learn joblib

几周前,我使用scikit-learn,nltk和spacy构建了一些NLP预测模型。我利用sci-kit的管道功能构建了模型。最终的功能集由文本和数字功能组成,因此在将所有内容输入分类器之前,我将使用ColumnTransformer将不同的功能应用于不同的列。分类器运行没有问题,我使用集成在scikit-learn中的GridSearchCV/RandomSearchCV函数保存了经过训练的joblib.dump模型。

前天,我需要根据这些模型进行一些预测,因此我使用joblib.load()重新加载了一些模型-它们可以正常工作。

但是昨天,由于更新时出现了一个错误,我不得不重新安装Anaconda,该错误删除了大多数软件包和命令promt(有关参考,请参见https://github.com/ContinuumIO/anaconda-issues/issues/8794https://github.com/ContinuumIO/anaconda-issues/issues/8794)-我认为快速重新安装比解决方法要快-现在我知道

现在的问题是:当我尝试使用模型基于已保存的joblib模型进行预测时,出现错误:

  

'ColumnTransformer'对象没有属性'verbose'并且无法运行预测

我尝试了不同版本的scikit,因为它向我显示了警告:

  

“ C:\ Users \ Lenovo \ Anaconda3 \ lib \ site-packages \ sklearn \ externals \ joblib__init __。py:15:弃用警告:sklearn.externals.joblib在0.21中已弃用,在0.23中将被删除。请导入可以直接从joblib中安装以下功能:pip install joblib。如果在加载腌制模型时出现此警告,则可能需要使用scikit-learn 0.21+重新序列化这些模型。warnings.warn(msg,category = DeprecationWarning )”

但是,这没有帮助。

由于在128GB的计算机上训练这些模型花了7个小时以上,因此我尝试使用减少的数据集运行原始代码进行模型训练-一切正常,我可以在原始配置中使用列变换器,而不会出现问题。

这里有一些示例代码

import pandas as pd
import numpy as np  

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer

from sklearn.pipeline import Pipeline, make_pipeline, FeatureUnion
from sklearn.linear_model import LogisticRegression
from sklearn import linear_model

from sklearn.model_selection import cross_val_score, GridSearchCV, RandomizedSearchCV, KFold
from sklearn.metrics import roc_auc_score

from sklearn.base import TransformerMixin, BaseEstimator
from sklearn.feature_extraction import text
import nltk 
from sklearn.externals import joblib

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import cross_validate
from pprint import pprint 

X = joblib.load("dir/X.joblib")
y = joblib.load ("dir/y.joblib") 

#load model 
model = joblib.load("dir/model.joblib") 

model.predict()

然后返回上述错误:

  

ColumnTransformer'对象没有'verbose'属性。

原始代码中带有ColumnTransformer的部分看起来像这样:

preprocessor = ColumnTransformer(
    transformers = [
        ("LDA", LDA_transformer, Text_features ),
        ("Count_words", Count_transformer, Text_features),
        ("LIWC_emb", "passthrough", rest_columns)
    ])

由于这是第一次在这里提出问题,我希望我包括了所有必要的信息。

谢谢!

0 个答案:

没有答案