矩阵中的火花循环以运行线性回归
Posted
技术标签:
【中文标题】矩阵中的火花循环以运行线性回归【英文标题】:spark loop in matrix to run linear regression 【发布时间】:2021-05-02 08:31:48 【问题描述】:我有一个如下的 spark 数据框 dt
。 BAB 是 ID,我想对 BAB 的每个值使用 AAB 和 AAD 列进行线性回归。
这就是我运行它的方式。通过为每个 BAB 值过滤整个数据帧,它变得非常慢。有没有办法像 3 维矩阵一样循环数据并为每个 BAB 运行回归?所以我只需要通过 BAB 一次。它不必是 spark mllib。任何其他带有 scala 编码的机器学习工具都可以。
val arrColu = Array("AAB", "AAD");
val assFeat = new VectorAssembler().setInputCols(arrColu).setOutputCol("features");
val arrBAB=dt.select("BAB").collect.map(_ (0)).map(x => x.toString);
for (a<-0 to arrBAB.length-1)
val vecDF: DataFrame = assFeat.transform(dt.filter("BAB='"+arrBAB(a)+"'").select("AAB","AAD"));
val lr1=new LinearRegression();
val lr2=lr1.setFeaturesCol("features").setLabelCol("AAD").setFitIntercept(true).
setMaxIter(10).setRegParam(.3).setElasticNetParam(.8);
val fitD1=lr2.fit(vecDF);
...
【问题讨论】:
收集arrBAB
时代码中是否缺少distinct
?
是的,我应该添加 .distinct()。仍然可能有超过 5000 个不同的 BAB。所以最好只循环一次,而不是为每个 BAB 过滤整个数据帧
也许this answer可以帮忙?
【参考方案1】:
一种方法是将数据框转换为以元组为元素 List((BAB1,AAB1,AAD1),(BAB2,AAB2,AAD2),...)
的列表,然后根据每个单独的 BAB
对列表进行切片并在每个切片上运行回归。
【讨论】:
以上是关于矩阵中的火花循环以运行线性回归的主要内容,如果未能解决你的问题,请参考以下文章