【问题标题】:smile scala api: create Dataframe from Array微笑scala api:从数组创建数据框
【发布时间】:2021-01-30 13:45:11
【问题描述】:

我正在尝试将微笑集成到我的 scala 代码库中。特别是,我想训练一个随机森林分类器。在FAQ 中写道:

大多数 Smile 算法都将简单的 double[] 作为输入。因此,只要样本在双数组中,您就可以使用自己喜欢的方法或库来导入数据。

但 RandomForest 似乎并非如此,所有fit methods 似乎都将公式和数据框作为输入。就我而言,我有两个 Array[Array[Double]] 包含两个不同类的示例:例如,第一个应标记为 0,第二个应标记为 1。第一个数组有形状 (n_samples_0, n_features) 和第二个 (n_samples_1, n_features)

据我所知,在此数据上训练微笑 randomForest 的唯一方法是首先将这两个数组转换为一个微笑数据帧,其中包含 n_features + 1 列(每个特征一个列 + 标签一个列)和 n_samples_0 + n_samples_1 行。然后:

val formula: Formula = "class" ~
val rf = randomForest(formula, df)

因此我的问题是:有没有办法从 Scala API 中的数组创建数据框?我只能通过读取不同的文件格式来找到创建 Dataframe 的方法。

【问题讨论】:

    标签: scala smile


    【解决方案1】:

    我设法通过使用 Smile DataFrames 的 of 方法解决了我的问题。

    这是一个最小的示例:(X1 和 X0 是包含特征的双精度数组的数组,每个子数组的大小为 600,X1 包含正类示例的特征,X0 包含负类示例的特征)

    val X1: List[Array[Double]] = ???
    val X0: List[Array[Double]] = ???
    val y1 = X1.map(_ => Array(1))
    val y0 = X0.map(_ => Array(0))
    val X = (X1 ++ X0).toArray
    val y = (y1 ++ y0).toArray
    val dfX = DataFrame.of(X)
    val dfy = DataFrame.of(y, "class")
    val df = dfX.merge(dfy)
    val formula: Formula = "class" ~
    val rf = randomForest(formula, df)
    

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多