如何在随机森林回归模型中使用多个不同维度的分类输入变量?

时间:2019-02-07 08:10:41

标签: python numpy machine-learning statistics regression

我有描述发布过程中项目的数据。该项目具有不同的变量,例如“产品类别”,“设计国家/地区”,“产品系列”等。总共我有18种不同类型的二进制或分类数据。这些不同的变量具有不同的维度。例如,有3个不同的设计国家/地区,而有8个不同的产品类别。输出变量是项目经过释放过程所花费的时间,它是一个连续变量。我想预测一个项目要花费多长时间。

 Design_cntry      Prod_category    prod_line    ...   time_minutes
     A                  A1             A11       ...     43.2
     B                  B1             A11       ...     20.1    
     C                  E1             B11       ...     15.0
    ...                ...             ...       ...     ....

为了让我将这些用作随机森林回归器的输入,如何处理不同的输入变量?

我知道,使用分类变量可以应用一种热编码。但是我要对每个单独的变量执行此操作吗?

 X_des_country = pd.get_dummies([data['design_cntry'], prefix = "design_country")
 X_prod_cat = pd.get_dummies([data['prod_cat'], prefix = "prod_cat")

然后我将有18个不同的输入数据帧,这些数据帧的列数不同。然后在训练模型时如何将这些变量用作输入?是否通过合并索引将它们全部放入一个数据框“ X”中?

还是直接在原始数据帧上应用一种热编码更好?

   X = df.drop("time_minutes", axis = 1)
   X = pd.get_dummies(X)

1 个答案:

答案 0 :(得分:1)

作为(重要)说明,为避免虚拟变量陷阱,您需要为每个分类变量删除一个值:您可以通过在drop_first=True中添加pd.get_dummies

来实现。

对于您的回归模型,您可以将所有这些新功能组合在一起并使用它来训练模型。但是您不必创建18个不同的DataFrame,您可以一次完成所有操作:

>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],'C': [1, 2, 3]})
   A  B  C
0  a  b  1
1  b  a  2
2  a  c  3

>>> pd.get_dummies(df, drop_first=True)
   C  A_b  B_b  B_c
0  1    0    1    0
1  2    1    0    0
2  3    0    0    1

这将仅为分类变量(即char列)创建伪变量,并保留int列不变(参见上面的C列)。 如果您的一个变量仅包含整数,但您希望将其视为分类变量,则只需事先将其转换为字符变量即可。