python – 从pandas DataFrame转换为raw numpy数组可以提高ML性能吗?

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()更改现有系列或现有DataFrame中列的dtype:

s = pd.Series(...)
s = s.astype(np.float16)

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

如果要更改DataFrame中的多个列的dtypes,甚至更改所有列的dtypes,请使用DataFrame.astype()

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

转载注明原文:python – 从pandas DataFrame转换为raw numpy数组可以提高ML性能吗? - 代码日志