问题标签 [dask-ml]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 带有 XGBoost 和使用 eval_set 的 DaskML 需要预先计算的数据
我正在尝试dask_ml.xgboost
使用eval_set
以允许提前停止以避免过度拟合。
目前,我有一个示例数据集,如下例所示
所有X_train
,y_train
和都是X_val
dask 。y_val
DataFrame
我不能指定eval_set
为 daskDataFrame
的嵌套列表,使用eval_set=[(X_train.compute(), y_train.compute()), (X_val.compute(), y_val.compute())]
. 相反,它们需要是 pandas DataFrame
,这就是为什么我需要调用.compute()
它们中的每一个。
但是,当我运行上面的代码(使用 pandas DataFrame
)时,我收到了这个警告
此代码一直运行到完成并生成预测。但是,生产estimator.fit(...)
线生产这个UserWarning
。
补充说明
- 在我的用例中,此处示例中使用的训练和验证拆分中的行数反映了从整体数据中采样后的大小。不幸的是,训练(+超参数调整)所需的整体数据拆分要
dask_ml.xgboost
大几个数量级(在行数中,基于训练和验证学习曲线,根据dask_ml
建议,使用标准XGBoost
(使用from xgboost import XGBClassifier
)生成dask_ml
而没有XGBoost
( 1 , 2 )) 所以我无法计算这些并将它们作为 pandas 带入内存以DataFrame
进行分布式XGBoost
训练。 - 此处示例中使用的功能数量为 50。(在实际用例中)我在删除了尽可能多的功能后得出了这个数字。
- 代码在本地机器上运行。
问题
是否有正确/推荐的方法来运行由 Dask 组成dask_ml
的xgboost
run ?eval_set
DataFrame
编辑
请注意,训练拆分也被传入eval_set
(除了验证拆分),目的是使用模型训练的输出生成学习曲线(参见此处)。
python - ModuleNotFoundError:没有名为“dask_xgboost”的模块
我正在尝试运行 dask_ml 函数,但系统不接受我的安装并在我导入它时给出错误。操作系统:Linux ubuntu 20。
进口
错误
可能的解决方案
python - 如何在 dask 中使用 xgboost?
我试图使用 dask 来解决 kaggle 欺诈检测分类问题。但是,当我构建模型时,模型将所有值预测为 1。
我真的很惊讶,因为测试数据中有 56,000 个 zeor 和 92 个 zeor,但模型仍然以某种方式将所有值预测为 1。
我显然做错了什么。如何正确使用模型?
MWE
更新
我尝试了各种比例 pos 权重值。
scikit-learn - Dask-ML 与 sklearn 随机森林导致连接闭合
我正在尝试使用 Dask-ML 训练模型。我的最终目标是对大于内存的数据集进行预测,因此我正在利用 Dask 的 ParallelPostFit 包装器在相对较小的数据集(4 Gb)上训练模型,并期望稍后我将对更大的数据帧进行预测。我正在连接到一个有 50 个工作人员的 Yarn 集群,将我的数据从 parquet 加载到一个 dask 数据框中,创建一个管道并进行培训。训练有效,但是当我尝试对保留的测试集进行评估时,我遇到了问题。当我使用 sklearn 的 LogisticRegression 作为分类器时,训练和预测运行成功。但是,当我使用具有 100 个估计器的 sklearn 随机森林时,训练步骤成功运行,但在预测时出现以下错误。我在预测计算步骤中注意到,在断开连接错误之前,我的本地机器内存使用量开始爆炸。当我将 RF 估计器的数量减少到 10 个时,预测步骤会成功运行。谁能帮我理解发生了什么?
我的代码(精简)
输出:
python - 根据 Dask.Series 创建类别代码图
我有一个已知的分类 dtype 的 Dask.Series。我想创建一个小数据框来显示关联的映射,而无需计算整个系列。我如何实现这一目标?
上面的代码在 dask 中创建了一个类别系列。通过使用test.cat.codes
,我可以将类别转换为如下代码:
期望的结果是获得从类别到代码的映射,如下所示,而不使用计算命令,直到最后。
期望的输出:
我尝试了很多东西,但它们都需要将系列转换为熊猫系列或数据框,这违背了使用 dask 的目的。我在 dask 中没有找到任何可以帮助我在不重新分区的情况下做到这一点的东西,我不想这样做。另请注意,虽然该示例可以访问 DataFrame 以进行设置,但我实际上无法访问原始数据帧,因此它需要从“test”系列开始。
python - XGBoost 模型需要多少内存?
背景: 具有 100m 行和大约 50 列的训练集,我已将 dtype 转换为最小类型。仍然,加载时数据帧就像 8-10Gb。
在 AWS ec2 实例上运行训练(一个是 36CPU + 72RAM。另一个是 16CPU + 128RAM)
问题:
1;在 Pandas 数据框中加载数据并尝试使用 xgboost 的默认配置,内存很快就会爆炸 2;此外,我尝试使用启用并使用分布式客户端的 Dask 数据帧dask.xgboost
,它运行的时间更长,但我收到了工人失败的警告并且进度停滞不前。
那么,有没有办法让我估计我应该使用多大的 RAM 来确保它足够?
这是一些代码:
dask - 如何减少 `dask_ml.xgboost` worker 内存消耗?
我一直dask_ml.xgboost
在合成 10GB 数据集上测试回归器。训练时,工作人员的内存使用量超过了我本地笔记本电脑上的可用内存量。我知道我可以尝试在具有更大内存的在线 dask 集群上运行,或者我可以在训练之前对数据进行采样(并忽略其余部分)。但是有不同的解决方案吗?我尝试限制生成的树的数量和深度,对行和列进行二次采样,并更改树构造算法,但工作人员仍然内存不足。
给定一个固定的内存分配,有没有办法在训练时减少每个工人的内存消耗dask_ml.xgboost
?
这是一个代码片段:
合成数据集10GB_float.csv
有 50 列和 26758707 行,其中包含float64
从 0 到 1 的随机浮点数 ( )。以下是集群详细信息:
还有一些关于我本地笔记本电脑的信息:
此外,以下是XGBRegressor
(使用.get_params()
)的参数:
非常感谢您的宝贵时间!
python - 实现 Dask MinMaxScaler 的问题
我在规范dask.dataframe.core.DataFrame
using时遇到问题Dask.dask_ml.preprocessing.MinMaxScaler
,我可以使用,sklearn.preprocessing.MinMaxScaler
但是我希望使用 dask 来扩大规模。
最小的,可重现的例子:
错误信息:
不确定透视表中的“分类”是什么,但我尝试过.as_ordered()
索引:
但我收到错误消息:
附加信息
test.csv
:
dask - 您如何将 GPU 支持与 Dask Gateway 集成?
我们目前正在将 Dask Gateway 与仅 CPU 工作人员一起使用。然而,随着深度学习被更广泛地采用,我们希望过渡到为通过 Dask Gateway 创建的集群添加 GPU 支持。
我查看了 Dask Gateway 文档,关于如何设置它以及我们需要更改 helm chart/config 的哪些部分以启用此功能的详细说明并没有太多。
我的想法是首先在 GCP 上的 GKE 集群中添加一个 GPU,然后为使用该 GPU 的 dask 工作人员使用 RAPIDS dockerfile?这就是 Dask Gateway 所需的全部设置吗?
如果有人能指出我正确的方向,将不胜感激。
python - MySQL 服务器:使用 dask 连接
我有一个包含数百万条记录的数据框,在 jupyter 中拉取数据框时需要大量内存,我无法这样做,因为服务器崩溃了,因为数据库中有数百万条记录。
我了解了 DASK 包,它有助于在 python 中获取巨大的数据帧,我是 dask 的新手,不知道如何使用 dask 和 mysql 服务器建立连接。
我通常使用以下方式与 jupyter 和 mysql 服务器建立连接,如果有人能告诉我如何使用 dask 框架为同一个表和服务器建立连接,我将不胜感激。
如果有人可以帮助我并且我不能使用 csv 然后使用 dask 需要与 mysql 服务器正确连接,我将非常感激