scala - 矩阵中的火花循环以运行线性回归
问题描述
我有一个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);
...
}
解决方案
一种方法是将数据框转换为以元组为元素List((BAB1,AAB1,AAD1),(BAB2,AAB2,AAD2),...)
的列表,然后对每个人的列表进行切片BAB
并在每个切片上运行回归。
推荐阅读
- kotlin - 返回 shamir 方案的 n 次多项式的函数
- python - 为pairplot中的所有图添加框架
- batch-file - 使用批处理从txt文件中提取文本
- docker - Docker容器中Flask Celery和RabbitMQ之间的连接问题
- r - 有没有办法使用 R 函数连接几列?
- python - 给定两个二进制字符串,返回它们的和(也是一个二进制字符串)
- codeigniter - 为什么我的 BaseUrl 在 CodeIgniter 4 中不起作用?
- python - Wilcoxon 秩和 / Man-Whitney-U 检验的精确统计量
- reactjs - 无法输入 HOC 来添加默认道具
- android-studio - 将生成的密钥库文件保存在 android studio 项目中是否安全?