smile scala api:从数组创建数据框
smile scala api: create Dataframe from Array
我正在尝试将 smile 集成到我的 scala 代码库中。特别是,我想训练一个随机森林分类器。在 FAQ 中写着:
Most Smile algorithms take simple double[] as input. So you can use your favorite methods or library to import the data as long as the samples are in double arrays.
但对于 RandomForest 似乎并非如此,所有 fit methods 似乎都将公式和数据框作为输入。在我的例子中,我有两个 Array[Array[Double]] 包含两个不同 类 的示例:例如,第一个应标记为 0,第二个应标记为 1。第一个数组的形状为 (n_samples_0, n_features),第二个数组的形状为 (n_samples_1, n_features)
据我所知,在此数据上训练微笑随机森林的唯一方法是首先将这两个数组转换为一个微笑数据帧,其中包含 n_features + 1 列(每个特征一个 + 一个对于标签)和 n_samples_0 + n_samples_1 行。然后:
val formula: Formula = "class" ~
val rf = randomForest(formula, df)
因此我的问题是:有没有一种方法可以从 Scala 中的数组创建 Dataframe API?我只能通过读取不同的文件格式来找到创建Dataframe的方法。
我设法使用 Smile DataFrames 的 of 方法解决了我的问题。
这是一个最小的例子:(X1 和 X0 是包含特征的双精度数组的数组,每个子数组的大小为 600,X1 包含正样本的特征 class,X0 包含特征否定的例子 class)
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)
我正在尝试将 smile 集成到我的 scala 代码库中。特别是,我想训练一个随机森林分类器。在 FAQ 中写着:
Most Smile algorithms take simple double[] as input. So you can use your favorite methods or library to import the data as long as the samples are in double arrays.
但对于 RandomForest 似乎并非如此,所有 fit methods 似乎都将公式和数据框作为输入。在我的例子中,我有两个 Array[Array[Double]] 包含两个不同 类 的示例:例如,第一个应标记为 0,第二个应标记为 1。第一个数组的形状为 (n_samples_0, n_features),第二个数组的形状为 (n_samples_1, n_features)
据我所知,在此数据上训练微笑随机森林的唯一方法是首先将这两个数组转换为一个微笑数据帧,其中包含 n_features + 1 列(每个特征一个 + 一个对于标签)和 n_samples_0 + n_samples_1 行。然后:
val formula: Formula = "class" ~
val rf = randomForest(formula, df)
因此我的问题是:有没有一种方法可以从 Scala 中的数组创建 Dataframe API?我只能通过读取不同的文件格式来找到创建Dataframe的方法。
我设法使用 Smile DataFrames 的 of 方法解决了我的问题。
这是一个最小的例子:(X1 和 X0 是包含特征的双精度数组的数组,每个子数组的大小为 600,X1 包含正样本的特征 class,X0 包含特征否定的例子 class)
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)