【问题标题】:feature mismatch between loaded model and data to predict - scikit learn SVC加载的模型和要预测的数据之间的特征不匹配 - scikit learn SVC
【发布时间】:2019-02-07 04:47:37
【问题描述】:

我已经看到很多关于这个主题的问题,但找不到任何明确的答案来解决我的问题: 我使用以下代码保存模型:

clf = SVC(gamma=1,C=1)
clf.fit(X_train,y_train)
# save the model to disk
filename = 'finalized_model.sav'
pickle.dump(clf, open(filename, 'wb'))

然后我用不同的文件加载它:

# load the model from disk
fname = 'finalized_model.sav'
clf = pickle.load(open(fname, 'rb'))
y_pred = clf.predict(df_live)

我收到此错误:

ValueError: X.shape[1] = 22 应该等于 26,个数 训练时的特征

当我准备数据时,我使用:

df_dummies = pd.get_dummies(df)

我得到更多特征的原因是因为训练数据比预测数据大得多,因此分类的特征也更多。

我的问题是在不损害模型的情况下增加特征数量的最佳做法是什么?

谢谢

【问题讨论】:

  • 您需要保留训练数据时使用的特征。 get_dummies 在这里不好。改用 OneHotEncoder 并保存训练实例。并加载它以转换特征,就像您保存和加载最终模型一样。在 stackoverflow 中搜索类似问题。

标签: pandas scikit-learn classification pickle svc


【解决方案1】:

一般来说,您可以执行data imputation 来处理丢失的数据,但是如果缺少整个功能,除非您可以为四个丢失的功能提供有意义的值,否则您最好从@987654322 中删除它们@在拟合之前。

【讨论】:

  • 谢谢。但是这个模型几乎每天都需要在新数据上运行。这意味着它们每次可能会因不同的功能而有所不同。你的意思是我每次运行预测模型时都应该进行拟合,并在根据预测特征进行拟合之前从 X_train 中删除不相关的特征?
  • 视情况而定。如果您想坚持使用单个模型(如果估计缓慢,或者您已经验证模型并确定它有用,您可能出于实际原因需要该模型),那么您的设置听起来可能是可能的。如果您有足够的数据,您可以随时将您提出的解决方案进行测试,看看它的表现如何。
猜你喜欢
  • 2019-02-14
  • 2021-08-24
  • 2015-03-19
  • 2015-01-12
  • 2018-09-07
  • 2015-03-01
  • 2015-02-15
  • 2017-09-11
  • 2018-01-01
相关资源
最近更新 更多