Python-训练数据和预测数据之间的列不匹配

时间:2019-10-24 06:58:50

标签: python scikit-learn

在我的模型中,我发现我没有从预测数据集中删除一列而犯了一个错误。

此列; 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”。我的管道如何接受该列作为输入?还是只是忽略它?

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题和代码,并假设yclass是One-Hot列之一,则您在其中有一个参数:

handle_unknown='ignore'

告诉编码器忽略数据中未看到的列。

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

handle_unknown:“错误”或“忽略”,默认为“错误”。 在转换过程中是否引发错误或忽略是否存在未知分类特征(默认为引发)。如果将此参数设置为“忽略”,并且在转换过程中遇到未知类别,则此功能生成的一键编码列将全为零。在逆变换中,未知类别将表示为“无”。