【发布时间】:2020-08-24 13:19:06
【问题描述】:
我有一个时间序列索引,其中变量和湿度读数很少。我已经训练了一个 ML 模型来预测基于 X、Y 和 Z 的湿度值。现在,当我使用 pickle 加载保存的模型时,我想使用 X、Y 和 Z 填充湿度缺失值。但是,它应该考虑 X、Y 和 Z 本身不应该丢失的事实。
Time X Y Z Humidity
1/2/2017 13:00 31 22 21 48
1/2/2017 14:00 NaN 12 NaN NaN
1/2/2017 15:00 25 55 33 NaN
在此示例中,将使用模型填充最后一行湿度。而模型不应预测第二行,因为 X 和 Z 也缺失。
到目前为止我已经尝试过了:
with open('model_pickle','rb') as f:
mp = pickle.load(f)
for i, value in enumerate(df['Humidity'].values):
if np.isnan(value):
df['Humidity'][i] = mp.predict(df['X'][i],df['Y'][i],df['Z'][i])
这给了我一个错误“predict() 需要 2 到 5 个位置参数,但给出了 6 个”,而且我没有考虑 X、Y 和 Z 列值。下面是我用来训练模型并将其保存到文件中的代码:
df = df.dropna()
dfTest = df.loc['2017-01-01':'2019-02-28']
dfTrain = df.loc['2019-03-01':'2019-03-18']
features = [ 'X', 'Y', 'Z']
train_X = dfTrain[features]
train_y = dfTrain.Humidity
test_X = dfTest[features]
test_y = dfTest.Humidity
model = xgb.XGBRegressor(max_depth=10,learning_rate=0.07)
model.fit(train_X,train_y)
predXGB = model.predict(test_X)
mae = mean_absolute_error(predXGB,test_y)
import pickle
with open('model_pickle','wb') as f:
pickle.dump(model,f)
我在训练和保存模型的过程中没有出错。
【问题讨论】:
-
您在什么数据集上训练模型?该数据集是否在 X、Y、Z 特征中也有缺失值?如果有,您是如何处理它们的?
-
是的,在同一个数据集上,但使用的是其他年份的数据。该模型是使用完整数据(没有丢失)训练的,所以这不是问题。
-
好的,如果您在训练集中有缺失值,那么您也必须在测试集中使用相同的插补方法。您必须使用现有的插补方法之一,没有其他方法可以解决。当然,与这种插补导致的交叉验证错误相比,您应该期望模型的准确度较低。
-
请澄清:您加载的是什么型号?你确定使用
.predict有效吗?您向我们展示了有关您未提供的方法的错误,因此很难为您提供帮助。另外,请说明您在训练期间是否使用了任何插补方法 -
@Roim 我已经编辑了问题以增加清晰度。
标签: python dataframe machine-learning data-cleaning sklearn-pandas