带 vaex 的 Xgboost

问题描述

我想澄清一下:vaex.ml.sklearn 是否允许执行核外机器学习? 我尝试使用文档中的示例,并看到如果我在 xgboosting procees 中使用来自 hdf5 文件的数据集(评估的数据集消耗 ~3 Gb 的 RAM),RAM 使用量约为 ~7-8 Gb。天真地,我假设核外不会消耗这么多内存。我做错了什么?

我的代码

import vaex.ml.sklearn
xgb_model = xgboost.sklearn.XGBRegressor(max_depth=4,learning_rate=0.1,n_estimators=100,subsample=0.75,random_state=42,)
vaex_xgb_model = vaex.ml.sklearn.Predictor(features=features,target='target',model=xgb_model,prediction_name='prediction_xgb')
vaex_xgb_model.fit(df_train)
df_train = vaex_xgb_model.transform(df_train)

其中 features 是大约 40 个项目的列表。

解决方法

您使用的外部模型不是由 vaex(或 vaex-ml)提供的。在 vaex-ml 中使用它们时,您只需简单地将它们添加到 vaex 计算图中、序列化、延迟评估等中即可。模型本身未修改(我相信这在文档字符串中已说明)。所以它们并没有超出核心。

我认为 vaex-ml 有一个在 vaex 中实现的 K-means 模型,这样一个模型就会超出核心(即不会使用太多内存)。

vaex-ml 中可用的 StandardScaler、FrequencyEncoder 等预处理转换是使用 vaex 实现的,因此它们也将是核外的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...