我有一组数据,描述了一个项目通过发布流程的情况。这个项目有不同的变量,例如“产品类别”、“设计国家”、“产品线”等。总共有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)
回答:
作为一个重要的补充说明,为了避免虚拟变量陷阱,你需要为每个分类变量删除一个值:你可以通过在pd.get_dummies
中添加drop_first=True
来实现这一点
对于你的回归模型,你可以将所有这些新特征组合起来,并用它来训练你的模型。但你不需要创建18个不同的数据框,你可以一次性完成所有操作:
>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],'C': [1, 2, 3]}) A B C0 a b 11 b a 22 a c 3>>> pd.get_dummies(df, drop_first=True) C A_b B_b B_c0 1 0 1 01 2 1 0 02 3 0 0 1
这将仅为分类变量(即字符列)创建虚拟变量,并保持整数列不变(如上面的列C)。如果你的一个变量只包含整数,但你希望它被视为分类变量,只需在之前将其转换为字符变量即可。