【问题标题】:sklearn model use for new datasklearn 模型用于新数据
【发布时间】:2019-11-17 11:06:38
【问题描述】:

使用scikit的DictVectorizer制作特征向量

X = dataset.drop('Tag', axis=1)
v = DictVectorizer(sparse=False)
X = v.fit_transform(X.to_dict('records')) 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.33, random_state=0)
classes = np.unique(y)
classes = classes.tolist()
per = Perceptron(verbose=10, n_jobs=-1, max_iter=5)
per.partial_fit(X_train, y_train, classes)
joblib.dump(per, 'saved_model.pkl') 

并将经过优化的模型保存到文件中。 在另一个文件中加载模型以获取新日期

new_X=df
v = DictVectorizer(sparse=False)
new_X = v.fit_transform(new_X.to_dict('records'))
#Load model
per_load = joblib.load('saved_model2.pkl')
per_load.predict(new_X)

我尝试预测新数据当我执行这段代码时,输​​出是 Value error

ValueError: X 每个样本有 43 个特征;期待 983

如何保存模型?

【问题讨论】:

  • a) 究竟在哪里弹出错误?请包括完整的跟踪 b) 尝试省略 v=DictVectorizer 的第二个定义,并改用 new_X = v.transform(new_X.to_dict('records'));您仍然收到错误消息吗?
  • b) 尝试省略 v=DictVectorizer 的第二个定义,并改用 new_X = v.transform(new_X.to_dict('records')) ;你仍然得到错误吗? AttributeError: 'DictVectorizer' 对象没有属性 'vocabulary_'

标签: scikit-learn dictvectorizer


【解决方案1】:

您还需要为 vectorizer 保存 pickle 对象,并应用 transform 而不是 fit_transform 因为您的 vectorizer 已经学习了词汇表并且需要用于预测看不见的数据

 #use 
 import joblib

joblib.dump(v, 'vectorizer.pkl')

#loading pickle 
v =  joblib.load('vectorizer.pkl') 


per_load.predict(v.transform(["new comment"]) #don't use fit_transform , use transfom only

【讨论】:

    猜你喜欢
    • 2020-04-08
    • 1970-01-01
    • 2019-01-20
    • 2022-12-04
    • 2020-09-19
    • 2020-05-31
    • 2020-06-10
    • 2020-08-11
    • 1970-01-01
    相关资源
    最近更新 更多