在我的模型中,我发现我没有从预测数据集中删除一列而犯了一个错误。
此列; yclass;在训练数据集中不可用。但是在我的预测数据集中,它是可用的。
我不知道那个错误,但是现在我很困惑?为什么它仍然可以通过这么丰富的专栏为我做出预测?因此难道不给我带来某种错误吗?我已经看到了与培训测试数据不一致的onehotencoding示例,以及该问题的解决方案。但这是一个新案件,我不知道吗?这是我代码的最后一部分;可能是我在管道等方面犯了错误。
lgbr = LGBMRegressor(learning_rate= 0.1, max_depth= 18, n_estimators= 50, num_leaves= 11)
lgbc = LGBMClassifier(learning_rate = 0.1, max_depth = 18, n_estimators = 100, num_leaves = 51)
numeric_pipe = make_pipeline(MinMaxScaler(feature_range = (-1,1)))
categoric_pipe = make_pipeline(OneHotEncoder(sparse = False, handle_unknown='ignore'))
preprocessor = ColumnTransformer(transformers = [('num',numeric_pipe, num_cols), ('cat',categoric_pipe,cat_cols)])
regr_pipe_final = make_pipeline(preprocessor, lgbr)
regr_pipe_final.fit(df_x_regr, df_y_regr.values.ravel())
class_pipe_final = make_pipeline(preprocessor, lgbc)
class_pipe_final.fit(df_x, df_y_class.values.ravel())
pred_final = pd.DataFrame()
for key in list(mi.unique_everseen(pred_set['from'] + pred_set['to'])):
pred_val_list = []
pred_subset = pred_set[(pred_set['from'] + pred_set['to']) == key]
lag = 0
for i in range(0,predmonths):
pred = pred_subset.iloc[[i],:]
class_val = class_pipe_final.predict(pred)
regr_val = regr_pipe_final.predict(pred)
我正在按行进行预测以生成移动的预测效果,这就是为什么我将循环用于预测的原因。
在这里,作为最后的总结,问题是“ pred”内部有1个丰富的列,名为“ yclass”。我的管道如何接受该列作为输入?还是只是忽略它?
答案 0 :(得分:0)
如果我正确理解了您的问题和代码,并假设yclass是One-Hot列之一,则您在其中有一个参数:
handle_unknown='ignore'
告诉编码器忽略数据中未看到的列。
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
handle_unknown:“错误”或“忽略”,默认为“错误”。 在转换过程中是否引发错误或忽略是否存在未知分类特征(默认为引发)。如果将此参数设置为“忽略”,并且在转换过程中遇到未知类别,则此功能生成的一键编码列将全为零。在逆变换中,未知类别将表示为“无”。