转换要在 sklearn 中使用的分类变量

converting categorical variables to be used in sklean

我使用 pd.get_dummies 函数创建了一个稀疏矩阵。我的矩阵是 700M 行 * 400 列,与其他人正在解决的许多问题相比,我认为它并不大。但是切入训练、验证、测试集可能要花很长时间。 (我将使用支持稀疏矩阵的逻辑回归和随机森林进行预测。)无论如何,是否可以有效地切片 sparseDataFrame 或对于我正在做的整个过程,它应该改进吗?

举个例子,

这是我在将分类变量转换为虚拟变量之前的列列表:

[u'a.exch', u'a.is_mobile', u'a.os_family', u'a.os_major', u'a.ua_family', u'a.ua_major', u'a.creative_id', u'a.creative_format',u'a.banner_position', u'a.day_hour_etc', u'b.country', u'b.connspeed',u'b.home_bus']

这是每列中唯一值的数量:

a.exch 14
a.is_mobile 2
a.os_family 21
a.os_major 35
a.ua_family 49
a.ua_major 56
a.creative_id 30
a.creative_format 3
a.banner_position 6
a.day_hour_etc 4
b.country 94
b.connspeed 9
b.home_bus 3

使用pd.get_dummies后,它有300+列,例如

a.exch_1, a.exch_2, ..., b.home_bus1, b.home_bus2

我设置了 pd.get_dummies(input_df, sparse=True) 因为否则会引发内存错误。但是现在有了这种稀疏表示,一切都很慢。

更新:拆分成train、val和test,只是随机拆分成3个部分6:2:2

拥有 700M 行的数据集是巨大的。而且,通过使用 get dummes,你几乎可以使它大 20 倍。

使用df.column =pd.factorize(df.column)[0]

DictVectorizer

我不确定性能,但不会比 get_dummies 差,因为这不会创建 380 多个列。 我想,子设置是问题的开始,接下来是训练模型将 运行 永远使用这么多数据。