A pandas (限制不再存在)DataFrame
具有固定整数数据类型(int64
)的限制。NumPy数组没有这个限制;例如,我们可以使用np.int8
(我们也有不同的浮动大小可用)。
如果我们首先将DataFrame转换为具有减少大小的数据类型的原始NumPy数组(例如从np.float64
到np.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()
:
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)