从pandas DataFrame到原始numpy数组的转换能否提高ML性能?



A pandas DataFrame具有固定整数数据类型(int64)的限制。NumPy数组没有这个限制;例如,我们可以使用np.int8(我们也有不同的浮动大小可用)。(限制不再存在)

如果我们首先将DataFrame转换为具有减少大小的数据类型的原始NumPy数组(例如从np.float64np.float16), scikit-learn性能通常会改善大型数据集吗?如果是这样,这种可能的性能提升是否仅在内存有限时发挥作用?

相对于计算量和复杂度而言,似乎真正高的浮点精度对ML来说并不重要。

如果需要更多的上下文,我正在考虑将像RandomForestRegressor这样的集成学习器应用于大型数据集(4-16GB,由~10-50个特征组成的数千万条记录)。但是,我最感兴趣的是一般情况

RandomForestRegressor的文档说明输入样本将在内部转换为dtype=np.float32


下面是原始答案,它解决了在Pandas中使用自定义numpy类型的问题(问题的穿透部分)

您可以在Pandas中使用numpy dtypes。下面是一个示例(来自我的脚本),导入具有指定列dtypes的.csv文件:

df = pd.read_csv(filename, usecols=[0, 4, 5, 10],
                 dtype={0: np.uint8,
                        4: np.uint32,
                        5: np.uint16,
                        10: np.float16})

您可以使用Series.astype():

更改现有系列或现有DataFrame中列的dtype。
s = pd.Series(...)
s = s.astype(np.float16)
df = pd.DataFrame(...)
df['col1'] = df['col1'].astype(np.float16)

如果您想更改DataFrame中几个列的dtype,甚至是所有列的dtype,请使用DataFrame.astype():

df = pd.DataFrame(...)
df[['col1', 'col2']] = df[['col1', 'col2']].astype(np.float16)

相关内容

  • 没有找到相关文章

最新更新