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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。