问题描述
我想澄清一下: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 实现的,因此它们也将是核外的。