【问题标题】:XGBoost4J - Scala dataframe to sparse dmatrixXGBoost4J - Scala 数据帧到稀疏 dmatrix
【发布时间】:2021-11-02 01:28:41
【问题描述】:

将 scala 数据帧转换为 XGBoost4J 的稀疏 dmatrix 的最有效和可扩展的方法是什么?

假设我有一个数据框 train,其中包含 row_indexcolumn_indexvalue 列,它会是这样的

new DMatrix(train.select("row_index"), train.select("column_index"), train.select("Value"), DMatrix.SparseType.CSR, n_col)

但是,上面的代码会导致类型不匹配,因为 DMatrix 需要 Array[Long]

train.select(F.collect_list("row_index")).first().getList[Long](0) 似乎是一个可能的选择,但它似乎不是内存友好和可扩展的。

我在 Databricks 上执行此操作,因此欢迎使用其他受支持语言(python、SQL、scala)的解决方案。

【问题讨论】:

标签: scala apache-spark-sql sparse-matrix databricks xgboost


【解决方案1】:

答案是按行使用稀疏向量,而不是尝试创建稀疏矩阵或 dmatrix。

train.rdd.map(r => (r.getInt(0), (r.getInt(1), r.getInt(2).toDouble))).groupByKey().map(r => (r._1, Vectors.sparse(n_col, r._2.toSeq))).toDF

我测试了使用Matrix::sparseMatrixxgboost::dmatrixR 中的数据样本进行评分,结果匹配。

【讨论】:

    猜你喜欢
    • 2022-12-17
    • 2016-02-01
    • 1970-01-01
    • 2016-09-09
    • 2021-04-14
    • 2018-04-28
    • 2017-08-30
    • 1970-01-01
    • 2018-02-13
    相关资源
    最近更新 更多