如何根据虚拟变量转换新数据集以进行验证

How To convert New Data set according to dummy variables for validation

我正在使用逻辑回归模型来预测二元结果。 最初,该模型有 2 个数字变量,这些变量被转换为分类变量。最后根据类别创建虚拟变量。这是示例(如果含糊不清,我深表歉意,我是这个领域的新手)

原始 df:

        Air_Humidity  Air_Temperature    
0            61.0            14.10       
1            61.0            14.21       
2            60.0            14.08       
3            60.0            14.08       
4            62.0            14.06       
5            65.0            18.36       
6            67.0            18.58       
7            65.0            18.52       
8            66.0            18.54       
9            64.0            18.60       

使用 qcut 进行分类转换(3 个湿度箱,2 个温度箱)

        Air_Humidity  Air_Temperature    
0            2            1       
1            2            1       
2            2            1       
3            2            1       
4            2            1       
5            3            2       
6            3            2       
7            3            2       
8            3            2       
9            2            2       

虚拟变量 df:

Air_Humidity_1  Air_Humidity_2  Air_Humidity_3  Air_Temperature_1   Air_Temperature_2    
      0               1               0               1               0   
      0               1               0               1               0   
      0               1               0               1               0   
      0               1               0               1               0   
      0               1               0               1               0   
      0               0               1               0               1   
      0               0               1               0               1   
      0               0               1               0               1   
      0               0               1               0               1   
      0               1               0               0               1

我的问题是:如果我有新的数据样本。如何将其直接转换为虚拟变量数据框。?我可以使用它来使用新数据样本测试模型。

一列示例 (Air_Humidity):

air_humidity_binned, air_humidity_bins = pd.qcut(df_train['Air_Humidity'], 3, retbins = True)

通过设置 retbins = True,您不仅返回分箱变量,还返回分箱的边界,稍后您可以使用它对测试集进行分箱。

调整以防测试集上的值超出训练集的范围:

air_humidity_bins = np.concatenate(([-np.inf], air_humidity_bins[1:-1], [np.inf]))

然后在测试集上获取分箱变量:

air_humidity_binned_test = pd.qcut(df_test['Air_Humidity'], air_humidity_bins)

要获得更精简的方法,您可以尝试 sklearn 的 KBinsDiscretizer(使用 strategy='quantile'),它遵循通常的拟合变换模式。