【发布时间】:2017-12-14 04:49:50
【问题描述】:
我正在编写一个使用线性回归的应用程序。在我的情况下sklearn.linear_model.Ridge。我无法为Ridge 带来我喜欢预测的正确形状的数据点。我简要描述了我的两个应用程序以及问题是如何出现的:
第一次申请:
我的数据点每个只有 1 个特性,它们都是字符串,所以我使用 One-Hot-Encoding 以便能够将它们与 Ridge 一起使用。之后,每个数据点 (X_hotEncoded) 有 9 个特征:
import pandas as pd
X_hotEncoded = pd.get_dummies(X)
在将Ridge 拟合到X_hotEncoded 并标记y 后,我将训练好的模型保存为:
from sklearn.externals import joblib
joblib.dump(ridge, "ridge.pkl")
第二次申请:
现在我已经在磁盘上保存了一个经过训练的模型,我想在我的第二个应用程序中检索它并预测 y(标签)的一个数据点。这就是我遇到上述问题的地方:
# X = one datapoint I like to predict y for
ridge= joblib.load("ridge.pkl")
X_hotEncoded = pd.get_dummies(X)
ridge.predict(X_hotEncoded) # this should give me the prediction
这在最后一行代码中给了我以下错误:
ValueError: shapes (1,1) and (9,) not aligned: 1 (dim 1) != 9 (dim 0)
Ridge 接受了 9 个特征的训练,因为我在所有数据点上使用了 One-Hot-Encoding。现在,当我只想预测一个数据点(只有 1 个功能)时,我很难将这个数据点调整为正确的形状,以便 Ridge 能够处理它。 One-Hot-Encoding 对仅具有一项功能的一个数据点没有影响。
有人知道这个问题的巧妙解决方案吗?
一个可能的解决方案可能是在第一个应用程序中将列名写入磁盘并在第二个应用程序中检索它,然后在那里重建数据点。 one-hot-encoded 数组的列名可以这样检索:Reversing 'one-hot' encoding in Pandas
【问题讨论】:
标签: python python-3.x machine-learning scikit-learn one-hot-encoding